在VBA中循环工作表时选择范围

zac*_*ack 1 excel vba

为了问题的目的,我已经缩短了我的代码,但是我得到的错误是一样的.

当我尝试在每个工作表上选择包含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 Code Online (Sandbox Code Playgroud)

我得到的错误是:

"Run-time error '1004': Method 'Range' of object'_Worksheet' failed.
Run Code Online (Sandbox Code Playgroud)

dan*_*rak 5

试试这个:

sh.Activate
sh.Range("A6", "A" & sh.Range("A6").End(xlDown).row).Select
Run Code Online (Sandbox Code Playgroud)

我确保范围引用在最右边的工作表上结束了我最后一行返回最后一行编号并与可能不需要的列字符连接,但可能使您更容易调试.

更新:

添加了激活线.选择可能要求工作表处于活动状态.

UPDATE2:

这是"正确"的方式,不使用选择使用此方法直接引用需要在工作表中移动工作表的工作表数据INSTEAD.这种最佳实践将提高您的代码性能

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
Run Code Online (Sandbox Code Playgroud)

  • 欢迎.我添加了第二个答案,显示了另一种"更好"的方式来完成你想要做的事情.这可能与一个小例子无关,但在编写大型项目时这是绝对必要的最佳实践,因此最好养成尽快避免使用"选择"的习惯. (3认同)