1

質問のためにコードを少し短くしましたが、発生するエラーは同じです。

各ワークシートの列Aにデータがあるセルを選択してそれを処理しようとすると、最初のワークシートの後にエラーが発生します。

Sub quickSub()

Dim sh As Worksheet

For Each sh In Worksheets
    sh.Range("A6", Range("A6").End(xlDown)).Select

''Random bits of code here where I manipulate selection on each worksheet

Next

End Sub

私が得るエラーは次のとおりです。

"Run-time error '1004': Method 'Range' of object'_Worksheet' failed.
4

1 に答える 1

5

これを試して:

sh.Activate
sh.Range("A6", "A" & sh.Range("A6").End(xlDown).row).Select

範囲参照が右側のシートでエンドダウンしていることを確認しました。エンドダウンで最終行番号を返し、不要な列文字と連結しましたが、デバッグが容易になる場合があります。

アップデート:

アクティベートラインを追加しました。選択には、シートがアクティブである必要がある場合があります。

Update2:

selectを使用せずにこれを行う「正しい」方法は次のとおりです。このメソッドを使用すると、ワークシートごとにワークシートを移動する必要がある代わりに、ワークシートデータを直接参照します。このベストプラクティスにより、コードのパフォーマンスが向上します

Sub quickSub()

Dim sh As Worksheet

For Each sh In Worksheets
    With sh.Range("A6", "A" & sh.Range("A6").End(xlDown).row)
        '- lines that manipulate the 'selection' in the above with
        .Value = "NewValue"
        .font.bold = true


    End With

''Random bits of code here where I manipulate selection on each worksheet

Next

End Sub
于 2012-11-26T23:19:47.027 に答える