使用变量调用Excel VBA子程序

32

我定义了以下子程序:

Sub EnterCellValueMonthNumber(cells As range, number As Integer)

range(cells).Select
ActiveCell.FormulaR1C1 = number

End Sub

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

EnterCellValueMonthNumber ("N23:Q23",1)

我得到以下错误信息:

Compile error Expected: =

我不知道为什么会收到这条消息。有人知道我缺少什么吗?

3个回答

55

你可以这样调用子程序:

EnterCellValueMonthNumber "N23:Q23", 1
没有括号。或者。
Call EnterCellValueMonthNumber("N23:Q23", 1)

括号和在它之前调用函数。

此外,您的子程序期望第一个参数是范围对象,而您提供的是字符串; 您应该更改子过程的签名为:

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时,这是不必要的,并且将来只会给你带来问题。


尽管我定义了另一个子程序:Sub EnterCellValue(cells As range)range(cells).Select ActiveCell.FormulaR1C1 = "M"End Sub,并且像这样调用它:EnterCellValue("N23:Q23"),没有遇到任何问题。这真的很烦人。 - user366121

4
您有两个问题。
首先是您的问题的实际答案。您需要说:
Call EnterCellValueMonthNumber("N23:Q23",1)

但是如果你运行它,它仍然不起作用,因为你已经设置了cells类型为range...使用以下代码将其设置为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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接