excel vba用变量调用子程序

时间:2011-06-06 12:52:09

标签: excel vba subroutine

我定义了以下子程序:

Sub EnterCellValueMonthNumber(cells As range, number As Integer)

range(cells).Select
ActiveCell.FormulaR1C1 = number

End Sub

当我像这样调用子程序时:

EnterCellValueMonthNumber ("N23:Q23",1)

我收到以下错误消息:

Compile error Expected: =

我不知道为什么会收到这条消息。有谁知道我错过了什么?

3 个答案:

答案 0 :(得分:47)

您可以将子名称为

EnterCellValueMonthNumber "N23:Q23", 1

没有括号。或

Call EnterCellValueMonthNumber("N23:Q23", 1)

括号,以及Call之前。

此外,您的Sub期望Range对象作为第一个参数,并且您正在提供一个字符串;你应该将sub的签名改为:

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 :(得分:2)

你实际上有2个问题。

首先是你问题的实际答案。你需要说:

Call EnterCellValueMonthNumber("N23:Q23",1)

但是如果你运行它仍然无法工作,因为你设置cells类型的range ...使用它来设置为string类型:

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

答案 2 :(得分:0)

请尝试以下代码:

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

    Range(cells).Select

    ActiveCell.FormulaR1C1 = number

End Sub