返回列表 上一主題 發帖

VBA 當2個條件一樣時,自動尋找輸入

Private Sub CommandButton1_Click()
Dim xNo$, xName$, xR As Range
xNo = TextBox1: xName = TextBox2 
For Each xR In Range([A2], [A65536].End(xlUp))
  If xR = xNo And xR(1, 2) = xName And xR(1, 3) = "" Then
    xR(1, 3) = xName: xR(1, 5) = Now: Exit Sub
  End If
Next
[A65536].End(xlUp)(2).Resize(1, 4) = Array(xNo, xName, "", Now)
End Sub

1.最好在前面加入檢錯:
  〔編號〕限制〔英大寫〕+數字12碼
   If Not xNo Like "[A-Z]############" Then MsgBox "編號錯誤或未輸入!": Exit Sub
   If xName = "" Then MsgBox "司機名未輸入!": Exit Sub
2.防錯是VBA最重要的,建議〔出車〕與〔回車〕分別兩個按鈕執行,
  否則若編號或姓名輸入一字之差,本來是回車變成出車!

TOP

〔出車〕〔回車〕分別處理:
  1. Dim xChk&
  2.  
  3. Private Sub CommandButton1_Click()
  4. xChk = 1: Call 記錄
  5. End Sub
  6.  
  7. Private Sub CommandButton2_Click()
  8. xChk = 2: Call 記錄
  9. End Sub
  10.  
  11. Sub 記錄()
  12. Dim xNo$, xName$, xR As Range
  13. xNo = TextBox1: xName = TextBox2
  14. If Not xNo Like "[A-Z]############" Then MsgBox "編號錯誤或未輸入!": Exit Sub
  15. If xName = "" Then MsgBox "司機名未輸入!": Exit Sub
  16. For Each xR In Range([A2], [A65536].End(xlUp))
  17.   If xR = xNo And xR(1, 2) = xName And xR(1, 3) = "" Then
  18.     If xChk = 1 Then MsgBox "本車次尚未回車,請確認!": Exit Sub
  19.     If xChk = 2 Then xR(1, 3) = xName: xR(1, 5) = Now: Exit Sub
  20.   End If
  21. Next
  22. If xChk = 1 Then [A65536].End(xlUp)(2).Resize(1, 4) = Array(xNo, xName, "", Now): Exit Sub
  23. If xChk = 2 Then MsgBox "找不到本車次的出車記錄!": Exit Sub
  24. End Sub
複製代碼

 
參考檔:
20160304_v1.rar (179.28 KB)

TOP

        靜思自在 : 自己害自己,莫過於亂發脾氣。
返回列表 上一主題