2011-06-06 63 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