0
我自學vba,目前我正在爲我公司構建一個基於表單的庫存控制系統,該系統將材料轉換成定製尺寸。由於業務的定製性質取決於客戶,所使用的基材的尺寸等,在使用基材之後,可能存在無數不同的切割或成品。因此,很難知道該產品是否已經存在於數據庫(FinPriceList)中,而沒有實際滾動並查找它。因此,我正在尋找一種方法來檢查產品是否存在於FinPriceList表中(分別爲列A,B,C & D),使用vba交叉引用來自組合框(FinProdGroup),產品類別「FinProdCat」的輸入,產品說明「FinProdDesc」和用戶窗體FinProdUserForm中的文本框產品大小「FinProdSize」。VBA如何檢查數據庫中是否存在userform組合框值
我現在嘗試如下,因此任何幫助,將不勝感激:
Sub VerifyStock()
Const DQTE = """"
Dim criteria1 As String
Dim criteria2 As String
Dim criteria3 As String
Dim criteria4 As String
Dim evalStr As String
Dim prodCode As Variant
criteria1 = FinProdIn.FinProdGroupIn.Value 'combobox1 from userform
criteria2 = FinProdIn.FinProdCatIn.Value 'combobox2 from userform
criteria3 = FinProdIn.FinProdDescIn.Value 'combobox3 from userform
criteria4 = FinProdIn.FinProdSizeIn.Value 'combobox4 from userform
evalStr = "INDEX(FinishedPriceList,MATCH(" & DQTE & criteria1 & DQTE & "&" & DQTE & criteria2 & DQTE & "&" & DQTE & criteria3 & DQTE & "&" & DQTE & criteria4 & DQTE & ",FinPriceList!$A:$A&FinPriceList!$B:$B&FinPriceList!$C:$C&FinPriceList!$D:$D,0))"
prodCode = Evaluate(evalStr)
If VarType(prodCode) = vbError Then
MsgBox "Not Found! Would you like to add new product to stock list?", vbYesNo
If Response = vbNo Then
MsgBox "Cancelled", vbInformation
Unload FinProdIn
Else
Call ModuleAddtoFinPriceList.AddtoFinPriceList
End If
Else
MsgBox "Product found would you like to add a transaction?", vbYesNo
If Response = vbNo Then
MsgBox "Cancelled"
Unload FinProdIn
Else
Call ModuleAddTrans.AddTrans
End If
End If
End Sub
您好傑夫,非常感謝您的及時迴應。我試圖實現這一點,但是我不斷得到代碼的'prodCode = Evaluate(evalStr)'行的「運行時錯誤13 - 類型不匹配」。你有什麼建議,爲什麼? – pat3456 2013-03-19 15:33:10
我添加了一個編輯:我上面的示例中的prodCode有時會出現錯誤類型結果,因此將其更改爲變體可以讓您測試該結果。 – Geoff 2013-03-19 15:44:22
嗨Geoff,我已經將編輯添加到我的代碼中,但是現在它返回我的「找不到」的等價物,無論產品是否存在於表中。如果我重新發布我的更新代碼作爲答案,您可以查看一下,看看有沒有我曾經錯過的炫目的東西? – pat3456 2013-03-22 15:12:46