0

私は vba を独学で習得しており、現在、材料を特注のサイズに変換するフォーム ベースの在庫管理システムを会社用に構築しています。顧客、使用される基材のサイズなどに依存するビジネスの特注の性質により、基材が使用された後に無数の異なるオフカットまたは完成品が在庫される可能性があります。したがって、実際にスクロールして検索しないと、この商品がデータベース (FinPriceList) に既に存在するかどうかを知ることは困難です。したがって、コンボボックス製品グループ(FinProdGroup)、製品カテゴリ「FinProdCat」からの入力を相互参照するためにvbaを使用して、テーブルFinPriceList(それぞれ列A、B、C、D)に製品が存在するかどうかを確認する方法を探しています。商品説明「FinProdDesc」とテキストボックス「商品サイズ」

私の現在の試みは次のとおりです。したがって、助けていただければ幸いです。

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
4

1 に答える 1

1

IndexおよびMatchワークシート関数をEva​​luate VBA メソッドと組み合わせて使用​​します。たとえば、製品コード (または部品番号、またはその他の識別子) が A2:A5000 の範囲にあり、B2:B5000 と C2:C5000 に一致する 2 つの基準がある場合、次を使用できます。

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
于 2013-03-18T17:42:13.283 に答える