2013-03-18 25 views
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 

回答

1

使用IndexMatch工作表函數與Evaluate VBA相結合的方法。例如,如果你的產品代碼(或部分號碼,或其他標識符)是在範圍A2:A5000,你有兩個標準在B2匹配:B5000和C2:C5000,可以使用:

Sub FindVal() 
    Const DQTE = """" 

    Dim criteria1 As String 
    Dim criteria2 As String 
    Dim evalStr As String 
    Dim prodCode As Variant 

    criteria1 = "ABC" 
    criteria2 = "DEF" 
    evalStr = "INDEX($C$2:$C$5000,MATCH(" & DQTE & criteria1 & DQTE & "&" & DQTE & criteria2 & DQTE & ",$A$2:$A$5000&$B$2:$B$5000,0))" 

    prodCode = Evaluate(evalStr) 

    If VarType(prodCode) = vbError Then 
     MsgBox "No match found" 
    Else 
     MsgBox "Value found: " & prodCode 
    End If 
End Sub 
+0

您好傑夫,非常感謝您的及時迴應。我試圖實現這一點,但是我不斷得到代碼的'prodCode = Evaluate(evalStr)'行的「運行時錯誤13 - 類型不匹配」。你有什麼建議,爲什麼? – pat3456 2013-03-19 15:33:10

+0

我添加了一個編輯:我上面的示例中的prodCode有時會出現錯誤類型結果,因此將其更改爲變體可以讓您測試該結果。 – Geoff 2013-03-19 15:44:22

+0

嗨Geoff,我已經將編輯添加到我的代碼中,但是現在它返回我的「找不到」的等價物,無論產品是否存在於表中。如果我重新發布我的更新代碼作爲答案,您可以查看一下,看看有沒有我曾經錯過的炫目的東西? – pat3456 2013-03-22 15:12:46

相關問題