2

私はこれを数時間いじりましたが、解決策には近づいていません。

次の方法で配列を作成すると、問題なく範囲に出力されます。

Dim Destination As Range
Set Destination = NewSheet.Range("A1")

ReDim OutArray(1 To 1, 1 To NumArrayCols) As Variant
OutArray(1, 1) = "hello"
Destination.Resize(UBound(OutArray, 1), UBound(OutArray, 2)).Value = OutArray

ただし、次の方法で出力配列を作成すると、大きな空の配列がスプレッドシートに貼り付けられます。コードの最初のセクションはおそらくほとんど無関係ですが、何か不足している場合に備えて含めたいと思います。

ReDim OutArray(1, 1 To NumArrayCols) As Variant
Set ThisAtt = Wells.CurrWell.FirstAttribute(Skip:=False)
k = 1
OutArray(1, k) = "UWI"
Do
    ElevOffset = 0
    Set ThisAtt = Wells.CurrWell.CurrAttribute
    If InStr(LCase(ThisAtt.Name1), "elevation") Then
        OutArray(1, k + 1) = ThisAtt.Name1
        OutArray(1, k + 2) = ""
        OutArray(1, k + 3) = ThisAtt.Name2
        OutArray(1, k + 4) = ""
        ElevOffset = ElevOffset + 2
    Else
        OutArray(1, k + 1) = ThisAtt.Name1
        OutArray(1, k + 2) = ThisAtt.Name2
    End If
    OutArray(1, k + ElevOffset + 3) = "Recommend"
    OutArray(1, k + ElevOffset + 4) = "Rec. Value"
    OutArray(1, k + ElevOffset + 5) = "Comments"
    k = k + ElevOffset + 2 + AdditionalColumns
Loop While Not (Wells.CurrWell.NextAttribute(EnableSkipping:=False) Is Nothing)

Dim Destination As Range
Set Destination = NewSheet.Range("A1")
Destination.Resize(UBound(OutArray, 1), UBound(OutArray, 2)).Value = OutArray

OutArray のすべての要素が検査時にそこにあるように見えるため、これは奇妙です。手動で生成した配列は問題なく動作しますが、自動生成された配列 (ほぼすべての点で似ているように見えます) は機能しません。理由を知っている人はいますか?

4

1 に答える 1

5

それはあなたのREDIM発言に過ぎないと思います。最初の例では、次のようになります。

ReDim OutArray(1 To 1, 1 To NumArrayCols) As Variant

しかし、2番目の例では、これを行います。

ReDim OutArray(1, 1 To NumArrayCols) As Variant

違いに気づきましたか?ReDim A(1 To 1)上限と下限の両方が1であると言う場合、Redim(1)上限のみが1であると言う場合、下限はデフォルトのゼロ(0)に設定されます。したがって、2つの配列は同じ形状/サイズではないため、2番目のケースでは、配列が宛先範囲に正しく適合しません。

于 2013-01-30T19:08:21.207 に答える