2

Excelシートで選択したデータを配列に転送し、それを使用して新しいスプレッドシートにデータを印刷するコードを書いています。ただし、selectArr(i-1)をスクロールすると値が表示されますが、「添え字が範囲外です」というエラーが発生します。これが私のコードです:

Sub Marascuilo()
    Dim numRows As Integer 'Number of rows selected
    numRows = Selection.Rows.Count
    Dim selectArr() As Double 'Array containing numbers from selected cells
    selectArr = loadArr(numRows) 'Load values into array
    For i = 2 To UBound(selectArr) - LBound(selectArr) + 2
        Sheets("Sheet 4").Cells(i, 2).Value = selectArr(i - 1)
    Next
End Sub

'This function loads the values from the selected cells into selectArr.
Function loadArr(numRows) As Double()
    Dim ResultArray() As Double
    r = 1
    For Each v In Selection
        ReDim Preserve ResultArray(1 To r)
        If v <> "" Then
            ResultArray(r) = v.Value
            r = r + 1
        End If
    Next
    loadArr = ResultArray
End Function

この問題をどのように修正するかについてのアイデアはありますか?

ありがとう!

ジェイ

4

1 に答える 1

1

Sheets( "Sheet 4")を使用する代わりに、シートのCodeNameの使用を検討することもできます。プロジェクトエクスプローラウィンドウを見ると、すべてのシートに名前とコードネームがあります。このように見えるかもしれません

Sheet1 (Sheet1)
Sheet2 (Sheet2)

1つ目はCodeNameです(UIから変更することはできません)。かっこにあるのはタブ名です。プロジェクトエクスプローラーでシートを選択し、F4キーを押して[プロパティ]ダイアログを開きます。(Name)プロパティ(名前の悪いプロパティ)に移動し、意味のあるものに変更します。すべてのシートのコードネームを変更し、wshプレフィックスを使用します。ログである私のシートのコードネームは

wshLog

これで、コードでwshLogを使用できるようになり、いくつかの利点が得られます。1つ目は、UIでシートの名前を変更しても、コードは機能するということです。2つ目は、wshlog(すべて小文字)と入力すると、VBEによってwshLogに変更され、正しいスペルの視覚的な合図が表示されます。最後に、私のコードはより読みやすくなっています。例:wshFinalReport vs. Sheets( "Sheet1")。

于 2012-04-17T22:24:08.447 に答える