VBA新手求助,目前想設計一個方便的入貨出貨系統給員工並簡化工作程序。
如圖例,想以表單帶出兩個搜尋及記錄空格進行搜尋相同的訂單編號,並且對同一行上的出貨數量進行登記,最後的庫存數量可以由excel內建的簡易算是得出。
目前的進度為紀錄新訂單時能夠自動排序+透過表單輸入的click自動新增一筆新訂單的資料,無奈網路上找不到能夠透過表單輸入內容進行搜尋+更改或刪除同一行資料的範例。
我寫好了如下圖
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
請問經過測試後出現UserForm1第二行的"rng="被標註並且系統顯示「變數未定義」的警示,已經確認在Module1中已經宣告rng=Range了,請問是哪邊需要更改呢?
是「CommandButton1_Click()」裡吧...
我這裡是不會
我看一下
我只測得出一種情形
就是在程式裡加上 Option Explicit (表示「所有變數都須事先宣告,下圖中的第一列)
(註:我原本是沒有這一列)
解決方法有兩個:
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 裡仍不認得