iT邦幫忙

0

VBA - 如何設計透過表單及其輸入內容搜尋表格內同樣編號的資料並更新其同一行上的資料

  • 分享至 

  • xImage

VBA新手求助,目前想設計一個方便的入貨出貨系統給員工並簡化工作程序。
如圖例,想以表單帶出兩個搜尋及記錄空格進行搜尋相同的訂單編號,並且對同一行上的出貨數量進行登記,最後的庫存數量可以由excel內建的簡易算是得出。
目前的進度為紀錄新訂單時能夠自動排序+透過表單輸入的click自動新增一筆新訂單的資料,無奈網路上找不到能夠透過表單輸入內容進行搜尋+更改或刪除同一行資料的範例。

https://ithelp.ithome.com.tw/upload/images/20220824/20151792MQD2BP19fH.png

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-08-24 22:41:26
最佳解答

參考這篇那篇即可寫出你要的功能

我寫好了如下圖
https://ithelp.ithome.com.tw/upload/images/20220824/20001787i0zYkZ0AeT.png
https://ithelp.ithome.com.tw/upload/images/20220824/20001787Hswk3E8a2l.png
https://ithelp.ithome.com.tw/upload/images/20220824/200017871FJQlBGVOT.png
https://ithelp.ithome.com.tw/upload/images/20220824/20001787TmKslp8Twa.png

VBA 程式碼有三個部份,說明如下:
1.UserForm - 要自己畫,有兩點要注意
1.1 訂單編號輸入方塊是 TextBox1;出貨數量輸入方塊是 TextBox2
1.2 出貨按鈕(CommandButton1_Click) 的程式碼如下

Private Sub CommandButton1_Click()
    Set rng = SearchStr(TextBox1.Value)
    If rng Is Nothing Then
        MsgBox "Not Found " & TextBox1.Value
    Else
        rng.Offset(0, 3).Value = TextBox2.Value
    End If
End Sub

2.SearchStr(搜尋字串函數) - 寫在 Module1(模組)裡

Function SearchStr(str As String) As Range

Dim wb As Workbook
Dim s1 As Worksheet
Dim rng As Range

Set wb = ThisWorkbook
Set s1 = wb.Sheets("Sheet1")

Set rng = s1.Columns("B:B")
Set SearchStr = rng.Find(What:=str, LookIn:=xlFormulas, LookAt:=xlWhole, MatchCase:=False)

End Function

3.showForm(在工作表裡顯示 UserForm1) - 也寫在 Module1(模組)裡

Sub showForm()
    UserForm1.Show
End Sub

https://ithelp.ithome.com.tw/upload/images/20220825/20001787VT3O2cyb0g.png
https://ithelp.ithome.com.tw/upload/images/20220825/20001787PXF8EK5e9m.png
https://ithelp.ithome.com.tw/upload/images/20220825/200017877Ps791l3uh.png

看更多先前的回應...收起先前的回應...
ChrisL iT邦新手 5 級 ‧ 2022-08-26 14:45:36 檢舉

請問經過測試後出現UserForm1第二行的"rng="被標註並且系統顯示「變數未定義」的警示,已經確認在Module1中已經宣告rng=Range了,請問是哪邊需要更改呢?

是「CommandButton1_Click()」裡吧...
我這裡是不會
我看一下

我只測得出一種情形
就是在程式裡加上 Option Explicit (表示「所有變數都須事先宣告,下圖中的第一列)
(註:我原本是沒有這一列)
https://ithelp.ithome.com.tw/upload/images/20220826/20001787NunPNjE2DN.png
解決方法有兩個:
1.把 Option Explicit 刪掉
2.加上一列宣告,加上之後如下

Option Explicit
Private Sub CommandButton1_Click()
    Dim rng As Range
    Set rng = SearchStr(TextBox1.Value)
    If rng Is Nothing Then
        MsgBox "Not Found " & TextBox1.Value
    Else
        rng.Offset(0, 3).Value = TextBox2.Value
    End If
End Sub

UserForm1第二行的"rng="被標註並且系統顯示「變數未定義」的警示,已經確認在Module1中已經宣告rng=Range了

另外
UserForm1 和 Module1 是兩隻不同的程式
在 Module1 裡有宣告,UserForm1 裡仍不認得

ChrisL iT邦新手 5 級 ‧ 2022-08-29 16:53:05 檢舉

是的 我系統有預設Optional Explicit 強制對所有變數進行宣告,這是在之前的教學上看到說這樣比較不會佔用系統資源。

ChrisL iT邦新手 5 級 ‧ 2022-08-29 19:54:37 檢舉

刪除Optional Explicit 及對rng宣告後成功了,謝謝。

問題解決就好

我要發表回答

立即登入回答