我刚刚开始研究 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
显示的错误信息:
对象变量或未设置块变量
提前感谢您的指导。
我看到你仍然有这个代码的问题。请尝试这个简单的子程序,这可能是您需要的:
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不是选项卡名称,它是您在项目窗口中看到的代码名称。
您不能使用任何 VBA 的变量名称:关键字、函数、对象名称、集合名称等。尝试将变量名称range
从rngTable
.
在该帖子的不同区域以评论形式写入附加信息后进行编辑:
将您的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
@KazJaw 是正确的,您不能使用关键字作为变量名。但是range
orrngTable
变量在设置之前仍然使用。
您仍然可以使用Range
变量,但为什么不使用与 if 语句中相同的寻址方式呢?
If Cells(r, 1).Value = 1 Then Cells(r, 1).Interior.ColorIndex = 3
否则,您必须在使用之前设置范围对象:
Set rngTable = Cells(r, 1)
我觉得很多人都发现了你的变量“R”除了 666 字节之外没有定义。
声明您将要使用的变量对于使代码正常工作是一件很重要的事情。
您可以使用 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
结束子