2013-03-18 97 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