2016-10-21 18 views
0

私のコードでは、私はVariant queryResult内でSQLクエリ2次元配列を取得します。VBAの2次元配列のコンボボックスへの配列

queryResult = RetrieveRecordset("SELECT * FROM Materials;") 

アレイは、次のようになります。

enter image description here

そして、私はコンボボックス

cbSTPScrewedMaterial.List = queryResult 

を埋めるためにしようとした場合にのみ1とプラスチック値塗りつぶし、私は値を取得したいです上記の画像上のプラスチックからハードプラスチック - > queryResult(1)ですが、入力すると

cbSTPScrewedMaterial.List = queryResult(1) 

ランタイムエラー9:サブスクリプトが範囲外です。 私は間違って何をしているのか、それを解決する方法がありますか?

答えて

1

queryResultは2行5列

の2次元配列が5

cbSTPScrewedMaterial.ColumnCount = 5 

にあなたのコンボボックスColumnCountプロパティを設定し、それらのすべては、さらにqueryResult(1)がアクセスしようとしている

を示していています1次元の2次元配列であるため誤差が発生する

Option Explicit 
Function GetQueryRow(arr As Variant, iRow As Long) As Variant 
    Dim j As Long 
    ReDim arrRow(LBound(arr, 2) To UBound(arr, 2)) As Variant 

    For j = LBound(arr, 2) To UBound(arr, 2) 
     arrRow(j) = arr(iRow, j) 
    Next j 
    GetQueryRow = arrRow 
End Function 

ように使用される次のように指定した二次元アレイの行のうちの一次元配列を返す関数を使用することができる:

Dim queryResult As Variant 
Dim queryRow As Variant 

queryResult = RetrieveRecordset("SELECT * FROM Materials;") 
queryRow = GetQueryRow(queryResult, 1) 

または「直接」

Dim queryRow As Variant 

queryRow = GetQueryRow(RetrieveRecordset("SELECT * FROM Materials;"), 1) 

あるいは "より直接的に"

MsgBox GetQueryRow(RetrieveRecordset("SELECT * FROM Materials;"), 1)(1) 
+0

ありがとう、私は列として列を行として見てきました、それはその問題でした。ありがとうございました :-) –