Board logo

標題: [發問] Excel inputbox 迴圈 問題 [打印本頁]

作者: v03586    時間: 2015-9-18 07:45     標題: Excel inputbox 迴圈 問題

因工作上一個小問題想寫成 程式去RUN
如圖所示

目前我寫的程式碼只能單筆輸入,然後每輸入完一筆會自動存檔
我想改寫成第一次點選跳出來的inputbox 只輸入工號
再來開始跳回圈 輸入MO
直到我按取消他就把我回圈輸入中的訊息自動帶出來,工號部分能自動填上嗎?

程式碼參考  請問如何修改成我圖說的那樣呢?
  1. Sub 請輸入()


  2.     x = InputBox("請輸入收料OP工號 [ Please enter Operator ID ]", "請輸入收料OP工號  [Please enter Operator ID ]", "")
  3.     y = InputBox("請輸入MO, 輸入完畢請按取消鍵 [ Please enter MO ]", "請輸入MO [ Please enter MO ]", "")


  4.     Dim c1 As Integer
  5.     c1 = 2
  6.     While Cells(c1, 2) <> ""
  7.         c1 = c1 + 1
  8.     Wend
  9.     Cells(c1, 1) = x
  10.     Cells(c1, 2) = y
  11.     Cells(c1, 3) = Now()


  12.     ActiveWorkbook.Save

  13. End Sub
複製代碼
[attach]22027[/attach]
作者: stillfish00    時間: 2015-9-18 11:12

回復 1# v03586
  1. Sub 請輸入()
  2.     Dim x, y

  3.     x = InputBox("請輸入收料OP工號 [ Please enter Operator ID ]", "請輸入收料OP工號  [Please enter Operator ID ]", "")
  4.     If x = "" Then Exit Sub
  5.     Do
  6.         y = InputBox("請輸入MO, 輸入完畢請按取消鍵 [ Please enter MO ]", "請輸入MO [ Please enter MO ]", "")
  7.         If y = "" Then Exit Do
  8.         With Cells(Rows.Count, 1).End(xlUp)
  9.             .Cells(2, 1) = x
  10.             .Cells(2, 2) = y
  11.             .Cells(2, 3) = Now
  12.         End With
  13.     Loop

  14.     ActiveWorkbook.Save
  15. End Sub
複製代碼

作者: Joforn    時間: 2015-9-18 11:59

  1. Sub 請輸入()
  2.     Dim X   As Variant
  3.     Dim Y   As Variant
  4.     Dim C1  As Integer
  5.    
  6. EnterID:
  7.     X = InputBox("請輸入收料OP工號 [ Please enter Operator ID ]", "請輸入收料OP工號  [Please enter Operator ID ]", "")
  8.     If X = False Then Exit Sub
  9. EnterMo:
  10.     Y = InputBox("請輸入MO, 輸入完畢請按取消鍵 [ Please enter MO ]", "請輸入MO [ Please enter MO ]", "")
  11.     If Y = False Then
  12.       If MsgBox("你的輸入有誤,是否重新輸入一個MO?" & vbCrLf & _
  13.                 "點擊""是""重新輸入,""否""退出當次輸入。", vbYesNo Or vbQuestion, "MO輸入錯誤") = vbYes Then GoTo EnterMo
  14.       Exit Sub
  15.     End If
  16.    
  17.     C1 = 2
  18.     While Cells(C1, 2) <> ""
  19.         C1 = C1 + 1
  20.     Wend
  21.     Cells(C1, 1) = X
  22.     Cells(C1, 2) = Y
  23.     Cells(C1, 3) = Now()
  24.     ActiveWorkbook.Save
  25.     GoTo EnterID
  26. End Sub
複製代碼

作者: Joforn    時間: 2015-9-18 12:07

回復 1# v03586
上面的代碼有誤,帖子不能編輯,重發一次代碼:
  1. Sub 請輸入()
  2.     Dim X   As String
  3.     Dim Y   As String
  4.     Dim C1  As Long
  5.    
  6. EnterID:
  7.     X = InputBox("請輸入收料OP工號 [ Please enter Operator ID ]", "請輸入收料OP工號  [Please enter Operator ID ]")
  8.     If Len(X) < 1 Then Exit Sub
  9. EnterMo:
  10.     Y = InputBox("請輸入MO, 輸入完畢請按取消鍵 [ Please enter MO ]", "請輸入MO [ Please enter MO ]", "")
  11.     If Len(Y) < 1 Then
  12.       If MsgBox("你的輸入有誤,是否重新輸入一個MO?" & vbCrLf & _
  13.                 "點擊""是""重新輸入,""否""退出當次輸入。", vbYesNo Or vbQuestion, "MO輸入錯誤") = vbYes Then GoTo EnterMo
  14.       Exit Sub
  15.     End If
  16.    
  17.     C1 = 2
  18.     While Cells(C1, 2) <> ""
  19.         C1 = C1 + 1
  20.     Wend
  21.     Cells(C1, 1) = X
  22.     Cells(C1, 2) = Y
  23.     Cells(C1, 3) = Now()
  24.     ActiveWorkbook.Save
  25.     GoTo EnterID
  26. End Sub
複製代碼

作者: 准提部林    時間: 2015-9-18 15:49

參考:
1.使用者按〔取消〕即結束
2.若未輸入而按〔Enter〕或〔確定〕,仍維持在待命輸入狀態!
 
  1. Sub 輸入()
  2. Dim xR As Range, X, Y, T$, N%
  3. Set xR = Cells(Rows.Count, 2).End(xlUp)(2, 0)
  4.  
  5. T = "請輸入收料OP工號 [ Please enter Operator ID ]"
  6. Do: X = InputBox(T, T)
  7.   If StrPtr(X) = 0 Then Exit Sub  '使用者按〔取消〕跳出
  8. Loop Until X <> ""
  9.  
  10. T = "請輸入MO [ Please enter MO ]"
  11. Do: Y = InputBox(T & ",輸入完畢請按取消鍵", T)
  12.   If StrPtr(Y) = 0 Then GoTo 999  '使用者按〔取消〕結束
  13.   If Y <> "" Then
  14.    xR.Resize(1, 3) = Array(X, Y, Now)
  15.    Set xR = xR(2, 1): N = N + 1
  16.   End If
  17. Loop
  18.  
  19. 999: If N > 0 Then ThisWorkbook.Save
  20. End Sub
複製代碼

作者: v03586    時間: 2015-9-18 19:35

回復 2# stillfish00


    謝謝大大的指教!程式碼OK :D   感謝解決我一個大問題~
作者: v03586    時間: 2015-9-18 19:37

回復 4# Joforn


    感謝大大的分想~但他迴圈還是會出現輸入工號,我理想的設計是讓我的操作員,輸入工號第一次就好,其他就刷條碼,這樣對操作原來說 比較不用一直輸入工號,降低作業時的失誤率,但還是感謝您的分享,讓我也見識到不同的程式語法唷!!!  :D
作者: v03586    時間: 2015-9-18 19:47

回復 5# 准提部林


    感謝板大的程式碼!有像防呆的功能還不賴耶!!!!沒有取消就在待命 讚 :)
作者: v03586    時間: 2015-9-24 10:34

回復 5# 准提部林


    請問一下版大,如果我要加一行資料自動三個月自動刪除可以嗎?
資料表上再輸入時的時間往後判斷三個月
作者: 准提部林    時間: 2015-9-24 12:57

回復 9# v03586


基本原則:
與本帖主題需求不同,宜另開新帖!
另.所謂的〔三個月〕如何概定?要說得更清楚,最好舉實例!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)