2013-03-28 86 views
1

嗨,我刚刚开始在Excel宏上工作。 请让我知道什么是错在下面的代码:简单的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 

“对象变量或与块变量未设置”显示错误消息。 预先感谢您的指导。

回答

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 
+0

感谢您的答复...!我改变了变量的名字,但得到了同样的错误:( – user2165404 2013-03-28 06:48:15

+0

请把你的'if'在这里注释或者添加(!)改进后的代码在这个问题中我想检查你用'range(R,R )',其不可能是'rngTable(R,R)' – 2013-03-28 06:50:35

+0

子COLOR_RED() 昏暗rngTable作为范围 对于R = 1至20 如果细胞(R,1)。价值= 1然后rngTable(“R: R“)。Interior.ColorIndex = 3 下一个R 结束子 – user2165404 2013-03-28 10:23:21

0

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

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

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

否则,你将不得不使用它之前设置的范围对象:

Set rngTable = Cells(r, 1) 
+0

由于kazjaw ... !!! IF为例如。A1的细胞是= 1,则我想要的颜色整个行是第一这是我正在尝试的,因为我是初学者,请你让我知道我错在哪里 – user2165404 2013-03-28 10:25:55

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 

也请注意,使用“细胞()”是不是一个很好的路要走,但我已经包括它的简单(如问)。 ''单元格()'将始终引用活动工作表单元格,可能并非总是如此。因此,您应该使用表单的完整引用(通过代码名称方法) - 因此在此示例中应该说明,例如:Sheet1.Cells(r,1).Value = 1。另外,请记住Sheet1不是选项卡名称,它是您在项目窗口中看到的代码名称。

+0

感谢队友......! !它按我想要的方式工作。就像你说的我会用表格名称而不是单元格。 – user2165404 2013-03-28 13:04:02

+0

我的荣幸:)如果您对任何答案感到满意,请将其标记为完整。谢谢 – 2013-03-28 22:02:21

0

我觉得很多人收集的事实是你的变量'R'没有被定义为666字节以外。

声明你将要使用的变量是为了让代码工作而做的重要事情。

0

您可以使用单元格功能代替范围。您必须参考工作表以了解使用范围。由于没有提到任何内容,因此它会抛出Object变量或未设置块变量。

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 

末次