2013-03-28 88 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 

末次