嗨,我刚开始研究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
'对象变量或未设置块变量'显示错误消息。 提前感谢您的指导。
答案 0 :(得分:1)
您不能使用任何VBA的变量名称:关键字,函数,对象名称,集合名称等。尝试将变量名称从range
更改为rngTable
。
在其他信息后编辑在该帖子的不同区域写为评论:
将您的if
代码行更改为:
If Cells(R,1).Value = 1 Then Cells(R,1).EntireRow.Interior.ColorIndex =3
将为行R
中的所有工作表列着色。要着色某些范围,例如在10列中,您可以使用此行代替if
:
If Cells(R,1).Value = 1 Then Cells(R,1).Resize(1,10).Interior.ColorIndex =3
答案 1 :(得分: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 不是标签名称,它是您在项目窗口中看到的代码名称。
答案 2 :(得分:0)
@KazJaw是正确的,你不能使用关键字作为变量名。但range
或rngTable
变量在设置之前仍然使用。
您仍然可以使用Range
变量,但为什么不使用与if语句相同的寻址方式?
If Cells(r, 1).Value = 1 Then Cells(r, 1).Interior.ColorIndex = 3
否则,您必须在使用之前设置范围对象:
Set rngTable = Cells(r, 1)
答案 3 :(得分:0)
我觉得很多人都知道你的变量'R'除了666bytes之外没有被定义。
声明要使用的变量是使代码工作的重要事项。
答案 4 :(得分:0)
您可以使用Cells功能代替范围。您必须参考WorkSheet以使用范围。由于没有提到任何内容,因此不会设置抛出Object变量或使用block变量。
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
End Sub