我有一個 EXCEL 工作表1,工作表1名稱為 Print_Order
工作表1中插入一個 ActiveX 控制項的文字方塊(TextBox1)。工作表1中 column A 至column F 存放資料。
1.當在工作表1中的 TextBox1 中按下 Enter 鍵時觸發
2.在 A 欄搜索完全匹配的文字(不區分大小寫),A 欄有重複資料。
3.找到後檢查右側 5 格是否在 F 欄範圍內
4.複製範圍包含原格和右側 5 格(共 6 格)
5.判斷在工作表1的 H4 儲存格:
.如果 H4 為空,從 H4 開始貼上
.如果 H4 有資料,則往下找到第一個空白儲存格貼上
6.重複 步驟2至步驟5,搜尋下一個相同資料
6.清除剪貼簿內容,清空 TextBox1 內容。
7.自動將焦點設回 TextBox1,方便連續輸入。
8.用vba寫程式。
=============================================================
✅【重新產生正確事件程序的方法】
-
在 Excel 中按 Alt + F11
打開 VBA 編輯器。
-
在左側點兩下你的工作表名稱(例如 工作表1(Print_out)
)。
-
在畫面上方 左邊下拉選單 選擇 TextBox1。
-
在 右邊下拉選單 選擇 KeyDown 。
貼上程式碼。
=============================================================
Private Sub TextBox1_KeyDown(ByVal KeyCode As Integer, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
Dim ws As Worksheet
Set ws = Me ' 指的是 Print_Order
Dim searchText As String
searchText = Trim(Me.TextBox1.Text)
If searchText = "" Then Exit Sub
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim i As Long
Dim pasteRow As Long
Dim firstPaste As Boolean
firstPaste = True
For i = 1 To lastRow
If StrComp(ws.Cells(i, "A").Value, searchText, vbTextCompare) = 0 Then
Dim fVal As Variant
fVal = ws.Cells(i, "F").Value
' 檢查右邊5格是否有一格等於F欄的值
If ws.Cells(i, "B").Value = fVal Or _
ws.Cells(i, "C").Value = fVal Or _
ws.Cells(i, "D").Value = fVal Or _
ws.Cells(i, "E").Value = fVal Or _
ws.Cells(i, "F").Value = fVal Then
' 複製 A 至 F 共6格
ws.Range(ws.Cells(i, "A"), ws.Cells(i, "F")).Copy
' 找貼上位置
If firstPaste Then
If IsEmpty(ws.Range("H4").Value) Then
pasteRow = 4
Else
pasteRow = ws.Cells(ws.Rows.Count, "H").End(xlUp).Row + 1
End If
firstPaste = False
Else
pasteRow = ws.Cells(ws.Rows.Count, "H").End(xlUp).Row + 1
End If
ws.Range("H" & pasteRow).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End If
End If
Next i
' 清除 TextBox 與焦點回復
Me.TextBox1.Text = ""
Me.TextBox1.Activate
End If
End Sub
=============================================================
插入 BarCode 控制項: (如果尚未插入)
- 切換到 開發人員 索引標籤。
- 在「控制項」群組中,按一下 插入,然後在「ActiveX 控制項」下方選擇 Microsoft BarCode Control 16.0 (或類似名稱)。
- 在工作表 1 中拖曳滑鼠,繪製出您想要放置條碼的區域。
- 將這個 BarCode 控制項的 (Name) 屬性在「屬性」視窗中更改為一個容易識別的名稱,例如
BarcodeCtrl
。
LinkedCell
設定為 H6
選 Code-128 才會顯示出來
當 LinkedCell
設定為 H6 時,可以看到預覽條碼 (Sample Barcode),但在 H6 輸入數字後條碼卻變為空白,這表示 BarCode 控制項本身是正常運作的,問題可能出在資料傳輸或格式上。
列印按鈕
Sub Print_out()
'
' Print_out 巨集
'
'
Range("H2:N23").Select
Selection.PrintOut Copies:=1, Collate:=True
End Sub
清空資料按鈕
Sub Clear_OrderData()
'
' Clear_OrderData 巨集
'
'
Range("H6:M22").Select
Selection.ClearContents
Range("H6").Select
End Sub
列印完接著清空資料,方便連續輸入再列印。