0

我刚刚开始研究 Excel 宏。请让我知道以下代码有什么问题:

Sub color_red()

Dim range As range

For R = 1 To 20
    If Cells(R, 1).Value = 1 Then range(R, R).Interior.ColorIndex = 3
Next R

End Sub

显示的错误信息:

对象变量或未设置块变量

提前感谢您的指导。

4

5 回答 5

1

我看到你仍然有这个代码的问题。请尝试这个简单的子程序,这可能是您需要的:

Public Sub ColorRowIf()
    Dim r As Long
    For r = 1 To 20
        If Cells(r, 1).value = 1 Then
           Cells(r, 1).EntireRow.Interior.ColorIndex = 3
        End If
    Next r
End Sub

另请注意,使用“Cells()”不是一个好方法,但为了简单起见,我将其包括在内(如要求的那样)。'Cells()'将始终指代活动的工作表单元格,但情况并非总是如此。因此,您应该使用工作表的完整引用(通过代码名称方法) - 所以在这个例子中它应该说例如: Sheet1.Cells(r,1).Value = 1。另外,请记住Sheet1不是选项卡名称,它是您在项目窗口中看到的代码名称。

于 2013-03-28T12:38:39.467 回答
1

您不能使用任何 VBA 的变量名称:关键字、函数、对象名称、集合名称等。尝试将变量名称rangerngTable.

在该帖子的不同区域以评论形式写入附加信息后进行编辑:

将您的if代码行更改为:

If Cells(R,1).Value = 1 Then Cells(R,1).EntireRow.Interior.ColorIndex =3

这将为 row 中的所有工作表列着色R。要为某个范围着色,例如在 10 列中,您可以使用此行而不是您的if

If Cells(R,1).Value = 1 Then Cells(R,1).Resize(1,10).Interior.ColorIndex =3
于 2013-03-28T06:39:53.393 回答
0

@KazJaw 是正确的,您不能使用关键字作为变量名。但是rangeorrngTable变量在设置之前仍然使用。

您仍然可以使用Range变量,但为什么不使用与 if 语句中相同的寻址方式呢?

If Cells(r, 1).Value = 1 Then Cells(r, 1).Interior.ColorIndex = 3

否则,您必须在使用之前设置范围对象:

Set rngTable = Cells(r, 1)
于 2013-03-28T08:52:35.047 回答
0

我觉得很多人都发现了你的变量“R”除了 666 字节之外没有定义。

声明您将要使用的变量对于使代码正常工作是一件很重要的事情。

于 2013-10-10T18:49:58.550 回答
0

您可以使用 Cells 函数代替范围。您必须参考工作表才能使用范围。由于没有提到任何东西,它的抛出对象变量或块变量没有设置。

Sub color_red()
Dim r As Integer

For r = 1 To 20
If Cells(r, 1).Value = 1 Then Cells(r, r).Interior.ColorIndex = 3
Next r

结束子

于 2017-03-29T05:34:06.923 回答