1

次のコード (コード 1) があり、正常に動作します。コンボ ボックスの値に基づいて、製品とその価格をセルに割り当てるだけです。クライアントが何千もの製品を持っている場合に備えて、 for each... ループを使用してコードを短縮することを考えました。

CODE 2 は、これに関する私の実験的な調査です。しかし、配列要素の値をループ内の変数に代入すると、VBA で実行時エラー 1004 型の不一致が発生します。また、2 次元配列の目的を達成するために for next... ループを実行するにはどうすればよいですか?

誰でも助けることができますか?過去 3 日間、あちこちで答えを探していましたが、何も見つかりません。ありがとう :-)

''CODE 1
Private Sub Product1ComboBox_Change()

'Fills in Product and Price columns.
If Sheet1.Product1ComboBox.Value = "1-2-3 ABC" Then
    Sheet1.Range("H2").Value = "1-2-3 ABC"
    Sheet1.Range("I2").Value = "150.00"
ElseIf Sheet1.Product1ComboBox.Value = "1-3 Pick Up Sticks" Then
    Sheet1.Range("H2").Value = "1-3 Pick Up Sticks"
    Sheet1.Range("I2").Value = "89.00"
ElseIf Sheet1.Product1ComboBox.Value = "Meat and Potatoes" Then
    Sheet1.Range("H2").Value = "Meat and Potatoes"
    Sheet1.Range("I2").Value = "140.00"
ElseIf Sheet1.Product1ComboBox.Value = "Pigs in a Blanket" Then
    Sheet1.Range("H2").Value = "Pigs in a Blanket"
    Sheet1.Range("I2").Value = "140.00"
Else
    Sheet1.Range("H2").Value = "Simply Toasted"
    Sheet1.Range("I2").Value = "65.00"
End If

'Computes amount.
Sheet1.Range("J2").Value = Sheet1.Range("I2").Value * Sheet1.Qty1ComboBox.Value

End Sub

''CODE 2
Private Sub Product1ComboBox_Change()

Dim Products(1 To 5)
Dim i
Dim Product

Products(1) = "1-2-3 ABC--150"
Products(2) = "1-3 Pick Up Sticks--89"
Products(3) = "Meat and Potatoes--140"
Products(4) = "Pigs in a Blanket--140"
Products(5) = "Simply Toasted--65"

For Each i In Products
    Product = Products(i) 'PROBLEM: RUN-TIME ERROR 13 TYPE MISMATCH.
    If Products(i) = Sheet1.Product1ComboBox.Value Then
        Sheet1.Range("H2").Value = Products(i) 'PROBLEM: RUN-TIME ERROR 13 TYPE MISMATCH.
    Exit For
    End If
Next i

'Computes amount.
Sheet1.Range("J2").Value = Sheet1.Range("I2").Value * Sheet1.Qty1ComboBox.Value

End Sub
4

1 に答える 1

1

あなたの問題はFor Each i In Products

Productsこれが行うことは、 の各要素の値をi順番に代入することです。それからあなたが使うとき、あなたProducts(i)は事実上、例えばProducts("1-2-3 ABC--150")どれがもちろんナンセンスであるかを言っているのです。

代わりに試す

For i = LBound(Products) to UBound(Products)

また

For Each Product In Products
    If Product = Sheet1.Product1ComboBox.Value Then
        Sheet1.Range("H2").Value = Product
        Exit For
    End If
Next
于 2013-06-21T08:50:14.063 に答える