質問

私は単純な式を実行して、空白のエントリを配列から削除しようとしています。IMを使用しているアレイは、IMがTYと呼ばれるExcelで設定したデータテーブル内のフィールドからロードされます。このフィールドの名前はty [L3数]です。ユーザーがデータテーブルから行を追加または削除すると、このアレイを動的に保ちたいのです。IMを使用しているテストデータには、218行が218行、そのうち210が複製されたエントリ(後で削除したい)、および8つのエントリの ""。

マクロを実行するときは、if文の最初の行の「範囲外の範囲外」を取得します。

私は文字通りVBAがこのエラーを与えている理由を理解しようとしている時間を過ごしました。私の理解は、これがそれに渡されているデータを処理するために正しくサイズされていないアレイが原因であることです。両方の配列が正しくサイズされていることを確認するためにデバッグウィンドウを使用しました。

私はプログラミングにかなり新しいもので、私が行くように自分自身を教えていますが、私はちょうど親切なものを私自身のものに解決するのを見つけました。

Sub BuildArray()

'   Load array

Dim MyArr()
Dim J As Long


'   Size array

MyArr() = Range("TY[L3 Number]")
ReDim NewArr(LBound(MyArr) To UBound(MyArr))

'   For Loop to search for Blanks and remove from Array
'   The Lbound and UBound parameters will be defined by the size of the TY[L3 Number] field in the TY Table

J = LBound(MyArr) - 1 ' Added this recently while testing the theory that J may start at the 2nd      index in the loop, did not help

For i = LBound(MyArr) To UBound(MyArr)
   If MyArr(i) <> "" Then '   This is where I error out
        J = J + 1
        NewArr(J) = MyArr(i)
  End If
Next i
ReDim Preserve NewArr(LBound(MyArr) To J)

'   Debug Window to show results of revised array.

Dim c As Long
For c = LBound(NewArr) To UBound(NewArr)
   Debug.Print NewArr(c)
Next
   Debug.Print "End of List"

End Sub
.

役に立ちましたか?

解決

範囲は多次元配列です。(すなわち、myArray(#、#)) 最初のインデックスが行と2番目の列になります。

変更

 If MyArr(i) <> "" Then 
.

 If MyArr(i,1) <> "" Then 
.

範囲に1つの列が1つしかない場合、2番目のインデックスは常に1

になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top