2011-06-06 22 views
23

Excel VBA中調用子程序我定義瞭如下子程序:與變量

Sub EnterCellValueMonthNumber(cells As range, number As Integer) 

range(cells).Select 
ActiveCell.FormulaR1C1 = number 

End Sub 

當我調用子程序這樣的:

EnterCellValueMonthNumber ("N23:Q23",1) 

我收到以下錯誤信息:

Compile error Expected: = 

我不知道爲什麼我會收到此消息。有誰知道我錯過了什麼?

回答

40

你會叫子作爲

EnterCellValueMonthNumber "N23:Q23", 1 

沒有括號。或

Call EnterCellValueMonthNumber("N23:Q23", 1) 

方括號,和Call之前。

而且,你的子期待一個Range對象作爲第一個參數,你提供的字符串;你應該子的簽名改爲:

Sub EnterCellValueMonthNumber(cells As String, number As Integer) 

而且,我不確定你試圖用這個代碼實現,因爲它會範圍的左上角單元格設置爲僅1什麼。會像

Range(cells).Value = number 
' Or, if you're going to be passing in something more complex later... 
Range(cells).FormulaR1C1 = number 

更合適嗎?

我還非常謹慎使用Range("...")沒有指定你指的是哪個表。這將根據活動工作表進行操作,因此可能會導致意想不到的問題,幾乎總是傾向於使用SheetX.Range("...")。同樣使用.Select,這是不必要的,並且只會在將來爲您造成問題。

+1

是的,這是正確的和正確的。謝謝。 – user366121 2011-06-06 13:08:06

+0

雖然我定義的另一子例程:Sub EnterCellValue(細胞作爲範圍) 範圍(小區)。選擇 ActiveCell.FormulaR1C1 = 「M」 結束Sub和稱它是這樣的:EnterCellValue( 「N23:Q23」)和有沒問題。這是令人煩惱的。 – user366121 2011-06-06 13:08:53

2

你確實有2個問題。

一是實際回答你的問題。你需要說:

Call EnterCellValueMonthNumber("N23:Q23",1) 

但仍然無法正常工作,如果你運行它,因爲你已經設置rangecells ...使用這個,而不是將其設置爲string類型:

Sub EnterCellValueMonthNumber(cells As String, number As Integer) 
    Range(cells).Select 
    ActiveCell.FormulaR1C1 = number 
End Sub 
0

嘗試以下代碼:

Sub EnterCellValueMonthNumber(ByVal cells As String, number As Integer) 

    Range(cells).Select 

    ActiveCell.FormulaR1C1 = number 

End Sub