简单的Excelmacros

嗨,我刚刚开始在Excelmacros上工作。 请让我知道在下面的代码中有什么错误:

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 

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

你不能使用任何VBA的variables名称:关键字,函数,对象名称,集合名称等。尝试将range的variables名称更改为rngTable

编辑作为意见在该职位的不同领域的额外信息后编辑

把你的代码行改成:

 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 

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

 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不是选项卡名称,它是您在项目窗口中看到的代码名称。

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

你仍然可以使用Rangevariables,但是为什么不使用与if语句相同的寻址方式呢?

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

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

 Set rngTable = Cells(r, 1) 

我觉得很多人收集的事实是你的variables“R”没有被定义为666字节。

声明你将要使用的variables是一个重要的事情,为了让代码工作。

您可以使用单元格function而不是范围。 你必须参考工作表来使用范围。 由于没有提到,它抛出的对象variables或块variables未设置。

 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 

结束小组