1

さて、私は奇妙なエラーに出くわしました.なぜそれが起こっているのか分かりません. このプログラムがどのように機能するかを説明しましょう。したがって、このプログラムでは、さまざまなものでいっぱいの配列を詰め込みます。最初の要素Array_WS(0)はワークシート オブジェクト、次の要素はワークシートArray_WS(1)のタイトル行番号などです。Array_WS別のプロシージャに渡すと、すべて問題ありません。ただし、With ステートメントを入力するとWith Array_WS(0)、要素がクリアされます...そうです。Sheet1 が割り当てられる直前にコードをステップ実行するWith Array_WS(0)と、With ステートメントを入力するとすぐに、bamArray_WS(0)が空になります。以下の例は、これを少し明確にするはずです。

コードは次のようになります。

問題

Sub WTF(Array_WS as Variant)
Dim greatValue%

With Array_WS(0)
   greatValue = .Cells(1,1).Value2 <= this works even though Array_WS(0) is now empty
End With

greatValue = Array_WS(0).Cells(1,1).Value2 <= outside the With statement throws an exception

修正

私が思いついた回避策はこれだけです

Sub WTF(Array_WS as Variant)
Dim greatValue%, WS as Worksheet

Set WS = Array_WS(0)

With WS
   greatValue = .Cells(1,1).Value2 <= this works
End With

greatValue = Array_WS(0).Cells(1,1).Value2 <= this also works

質問

回避策を発見しましたが、知りたいのですが、なぜこれが起こっているのですか?? . 渡される配列内のオブジェクトがどのように機能するかについて、何か不足していますか? それとも、私が取得していない With ステートメントに何かあるのでしょうか?

どんな助けでも大歓迎です!

ありがとう、ジャスティン

4

1 に答える 1

1

単一のオブジェクトを Variant 配列として渡すだけでも、問題が発生する可能性があります。以下は、3 番目の MsgBox で停止します。

Sub MAIN()
    Dim ary(1 To 1) As Variant
    Set ary(1) = ActiveSheet
    Call routine(ary)
End Sub

Sub routine(v As Variant)
    MsgBox v(1).Name
    With v(1)
        MsgBox .Name
    End With
    MsgBox v(1).Name
End Sub

しかし、これは死ぬことはありません:

Sub MAIN()
    Dim ary(1 To 1) As Worksheet
    Set ary(1) = ActiveSheet
    Call routine(ary)
End Sub

Sub routine(v As Variant)
    MsgBox v(1).Name
    With v(1)
        MsgBox .Name
    End With
    MsgBox v(1).Name
End Sub
于 2013-10-03T16:08:23.833 に答える