2025年5月17日 星期六

Print_Order (chat_GPT版)

我有一個 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寫程式。

=============================================================

✅【重新產生正確事件程序的方法】

  1. 在 Excel 中按 Alt + F11 打開 VBA 編輯器。

  2. 在左側點兩下你的工作表名稱(例如 工作表1(Print_out))。

  3. 在畫面上方 左邊下拉選單 選擇 TextBox1。

  4. 右邊下拉選單 選擇 KeyDown 。

  5. 貼上程式碼。

=============================================================

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


列印完接著清空資料,方便連續輸入再列印。