简单的excel宏

时间:2013-03-28 06:36:15

标签: excel vba excel-vba colors

嗨,我刚开始研究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

'对象变量或未设置块变量'显示错误消息。 提前感谢您的指导。

5 个答案:

答案 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是正确的,你不能使用关键字作为变量名。但rangerngTable变量在设置之前仍然使用。

您仍然可以使用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