在尝试选择范围时获得1004

时间:2018-04-26 11:39:40

标签: excel vba excel-vba

我正在

  

1004错误

在运行下面的宏时,在行中 Worksheets("Testable").Range(Range("A2"), Range("A2").End(xlDown)).Select

Sub colour()
    Dim cell As Range

    Worksheets("Testable").Range(Range("A2"), Range("A2").End(xlDown)).Select
    For Each cell In Selection

        cell.EntireRow.Interior.ColorIndex = 33
    Next cell
End Sub

2 个答案:

答案 0 :(得分:3)

工作表的第一个SelectActivate。然后Select范围。

这是一个有效的例子:

Sub colour()
    Dim cell As Range
    Worksheets("Testable").Activate
    Worksheets("Testable").Range(Range("A2"), Range("A2").End(xlDown)).Select
    For Each cell In Selection
        cell.EntireRow.Interior.ColorIndex = 33
    Next cell
End Sub

enter image description here

编辑#2:
要避免循环和选择,请使用以下内容:

Sub colourAlternative()
    Dim cell As Range
    With Worksheets("Testable")
        Set cell = Range(.Range("A2"), .Range("A2").End(xlDown)).EntireRow
    End With
    cell.Interior.ColorIndex = 33
End Sub

这里有三个问题:

  1. 为什么Select失败
  2. 避免Select
  3. 避免循环

答案 1 :(得分:1)

您将在下面找到一个简单且万无一失的(基于原始问题中的详细信息)完成任务的方法:

With Worksheets("Testable")
    .Range(.Range("A2"),.Range("A2").End(xlDown)).EntireRow.InteriorColorIndex = 33
End With

你在行

中出错的原因
Worksheets("Testable").Range(Range("A2"), Range("A2").End(xlDown)).Select

是因为语句的两个Range("A2")部分是不合格的,Excel不知道如何处理它们(特别是如果Testable表不是活动表)。通过以上述方式对它们进行限定,您可以避免选择对象并直接使用它,从而优化代码执行。