標題:
[發問]
Bard code 列印問題
[打印本頁]
作者:
PD961A
時間:
2010-8-18 10:07
標題:
Bard code 列印問題
本帖最後由 PD961A 於 2010-8-19 07:32 編輯
請問先進
在"資料"工作表輸入所需條碼列印資料..
按下"列印鍵"原本可以自動計算並列印..
請問現在使用只剩單張資料顯示..程式碼是否有問題需要修正?....謝謝
[attach]2469[/attach]
作者:
GBKEE
時間:
2010-8-18 17:10
回復
1#
PD961A
修改了一下 請試試看
Sub Get_BardCode()
Dim A As Range, d As Object, r%, k%, cnt%, i%, pnt%
Set d = CreateObject("Scripting.Dictionary")
With Sheet2
For Each A In .[A1:D1]
d(A.Value) = InputBox("請輸入" & A & "預設字元", "預設字元", IIf(A = .[C1], "", IIf(A = .[A1], "CC", Mid(A, 1, 1))))
Next
ay = d.items
For Each A In .Range(.[A2], .[A65536].End(xlUp))
A.Offset(, 4) = InputBox("請輸入第" & A.Row & "列" & A & "分裝量", "分裝量", 4)
A.Offset(, 5) = IIf(A.Offset(, 1) Mod A.Offset(, 4) = 0, A.Offset(, 1) / A.Offset(, 4), Int(A.Offset(, 1) / A.Offset(, 4)) + 1)
Next
Sheet1.Range("B:C,F:G,J:K") = ""
r = 2: k = 2
For Each A In .Range(.[A2], .[A65536].End(xlUp))
Ar = Array(A, A.Offset(, 4), A.Offset(, 2), A.Offset(, 3))
For cnt = 1 To A.Offset(, 5)
With Sheet1.Cells(r, k).Resize(4, 1)
.Value = Application.Transpose(Ar)
For i = 0 To 3
.Offset(, 1).Cells(i + 1) = "*" & ay(i) & Ar(i) & "*"
Next
End With
k = k + 4
If k > 10 Then k = 2: r = r + 5
Next
Next
End With
pnt = MsgBox("是否列印" & Chr(10) & Chr(10) & "是 列印" & Chr(10) & "否 預覽" & Chr(10) & "取消 離開", vbYesNoCancel)
If pnt = 2 Then Exit Sub
If pnt = 6 Then Sheet1.PrintOut '列印
If pnt <> 6 Then Sheet1.PrintPreview '預覽
End Sub
複製代碼
作者:
PD961A
時間:
2010-8-18 17:31
回復
2#
GBKEE
版主
謝謝您
套用後...
它的計算功能...會沒有辦法將沒有整除的部份也當成是1張條碼格式
[attach]2474[/attach]
[attach]2475[/attach]
作者:
PD961A
時間:
2010-8-18 17:38
本帖最後由 PD961A 於 2010-8-19 07:32 編輯
回復
2#
GBKEE
另外原程式--本來就沒有多下面這個小計那是臨時加上去的
所以應該不是這裡不對...
謝謝您....
[attach]2476[/attach]
[attach]2477[/attach]
[attach]2478[/attach]
作者:
GBKEE
時間:
2010-8-18 18:48
回復
4#
PD961A
寫程序時最好加上 Option Explicit 強制宣告變數 如圖 會自動加上
設立 變數 英文字不要太相似
少了一個
k
If
k
cnt Mod 24 = 0 Or kcnt = Application.Sum(.Range(.[F2], .[F65536].End(xlUp))) Then
If pnt <> 6 Then Sheet1.PrintPreview '預覽
If pnt = 0 Then pnt = MsgBox("是否列印" & Chr(10) & "是 列印" & Chr(10) & "否 預覽" & Chr(10) & "取消 離開", vbYesNoCancel)
If pnt = 2 Then Exit Sub
If pnt = 6 Then Sheet1.PrintOut '列印
If kcnt < Application.Sum(.Range(.[F2], .[F65536].End(xlUp))) Then Sheet1.Columns("B:C") = "": Sheet1.Columns("F:G") = "": Sheet1.Columns("J:K") = ""
r = 2: k = 2
[attach]2484[/attach]
作者:
GBKEE
時間:
2010-8-18 19:24
回復
3#
PD961A
它的計算功能...會沒有辦法將沒有整除的部份也當成是1張條碼格式
最後一張 是要尾數嗎?
AR = Array(A, A.Offset(, 4), A.Offset(, 2), A.Offset(, 3))
Do Until cnt > A.Offset(, 5)
If cnt = A.Offset(, 5) And A.Offset(, 1) Mod A.Offset(, 4) <> 0 Then
AR(1) = A.Offset(, 1) - A.Offset(, 4) * (cnt - 1)
End If
Sheet1.Cells(r, k).Resize(4, 1).Value = Application.Transpose(AR)
For i = 0 To UBound(AR)
Sheet1.Cells(r + i, k + 1) = "*" & ay(i) & AR(i) & "*"
Next
r = IIf(r > 37, 2, IIf(k = 10, r + 5, r))
k = IIf(r > 37 Or k = 10, 2, k + 4)
kcnt = kcnt + 1
If kcnt Mod 24 = 0 Or kcnt = Application.Sum(.Range(.[F2], .[F65536].End(xlUp))) Then
If pnt <> 6 Then Sheet1.PrintPreview '預覽
If pnt = 0 Then pnt = MsgBox("是否列印" & Chr(10) & "是 列印" & Chr(10) & "否 預覽" & Chr(10) & "取消 離開", vbYesNoCancel)
If pnt = 2 Then Exit Sub
If pnt = 6 Then Sheet1.PrintOut '列印
If kcnt < Application.Sum(.Range(.[F2], .[F65536].End(xlUp))) Then Sheet1.Columns("B:C") = "": Sheet1.Columns("F:G") = "": Sheet1.Columns("J:K") = ""
r = 2: k = 2
End If
cnt = cnt + 1
Loop
複製代碼
作者:
PD961A
時間:
2010-8-19 07:22
回復
6#
GBKEE
謝謝版主
沒錯..是要尾數也計算出成1張
10KG=2張4KG+1張2KG
謝謝您
[attach]2489[/attach]
作者:
GBKEE
時間:
2010-8-19 07:54
本帖最後由 GBKEE 於 2010-8-19 07:57 編輯
回復
7#
PD961A
這些程式碼 就是判斷最後一張是否是整數
03. If cnt = A.Offset(, 5) And A.Offset(, 1) Mod A.Offset(, 4) <> 0 Then
04. AR(1) = A.Offset(, 1) - A.Offset(, 4) * (cnt - 1)
05. End If
附圖 是什麼問題
作者:
PD961A
時間:
2010-8-19 08:23
本帖最後由 PD961A 於 2010-8-19 09:34 編輯
回復
8#
GBKEE
把您的程式碼帶進去了...
得到就是這樣的畫面....
作者:
GBKEE
時間:
2010-8-19 09:28
回復
9#
PD961A
上則的程式碼,是要給你
套用
到Get_BardCode 中用的 ,你應該看的懂 哪只是
部分的程式碼
.
你沒有給程序名稱
Sub
????()
'
'
End Sub
Sub Get_BardCode()
Dim A As Range, d As Object, r%, k%, cnt%, i%, pnt%
Set d = CreateObject("Scripting.Dictionary")
With Sheet2
For Each A In .[A1:D1]
d(A.Value) = InputBox("請輸入" & A & "預設字元", "預設字元", IIf(A = .[C1], "", IIf(A = .[A1], "CC", Mid(A, 1, 1))))
Next
ay = d.items
For Each A In .Range(.[A2], .[A65536].End(xlUp))
A.Offset(, 4) = InputBox("請輸入第" & A.Row & "列" & A & "分裝量", "分裝量", 4)
A.Offset(, 5) = IIf(A.Offset(, 1) Mod A.Offset(, 4) = 0, A.Offset(, 1) / A.Offset(, 4), Int(A.Offset(, 1) / A.Offset(, 4)) + 1)
Next
Sheet1.Range("B:C,F:G,J:K") = ""
r = 2: k = 2
kcnt = 1
For Each A In .Range(.[A2], .[A65536].End(xlUp))
AR = Array(A, A.Offset(, 4), A.Offset(, 2), A.Offset(, 3))
cnt = 1
Do Until cnt > A.Offset(, 5)
If cnt = A.Offset(, 5) And A.Offset(, 1) Mod A.Offset(, 4) <> 0 Then
AR(1) = A.Offset(, 1) - A.Offset(, 4) * (cnt - 1)
End If
Sheet1.Cells(r, k).Resize(4, 1).Value = Application.Transpose(AR)
For i = 0 To UBound(AR)
Sheet1.Cells(r + i, k + 1) = "*" & ay(i) & AR(i) & "*"
Next
r = IIf(r > 37, 2, IIf(k = 10, r + 5, r))
k = IIf(r > 37 Or k = 10, 2, k + 4)
If kcnt Mod 24 = 0 Or kcnt = Application.Sum(.Range(.[F2], .[F65536].End(xlUp))) Then
If pnt <> 6 Then Sheet1.PrintPreview '預覽
If pnt = 0 Then pnt = MsgBox("是否列印" & Chr(10) & "是 列印" & Chr(10) & "否 預覽" & Chr(10) & "取消 離開", vbYesNoCancel)
If pnt = 2 Then Exit Sub
If pnt = 6 Then Sheet1.PrintOut '列印
If kcnt < Application.Sum(.Range(.[F2], .[F65536].End(xlUp))) Then Sheet1.Columns("B:C") = "": Sheet1.Columns("F:G") = "": Sheet1.Columns("J:K") = ""
r = 2: k = 2
End If
kcnt = kcnt + 1
cnt = cnt + 1
Loop
Next
End With
End Sub
複製代碼
作者:
PD961A
時間:
2010-8-19 09:42
回復
10#
GBKEE
版主
對不起啦...真的沒注意到
謝謝您這麼耐心的說明
2個檔案都改好
也都可以用了....
謝謝您...
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)