excel vba调用具有variables的子程序

我定义了下面的子例程:

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

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

 EnterCellValueMonthNumber ("N23:Q23",1) 

我收到以下错误信息:

 Compile error Expected: = 

我不知道为什么我得到这个消息。 有谁知道我错过了什么?

你会打电话给子

 EnterCellValueMonthNumber "N23:Q23", 1 

没有括号。 要么

 Call EnterCellValueMonthNumber("N23:Q23", 1) 

方括号,然后Call它。

另外,你的Sub期望一个Range对象作为第一个参数,并且你正在提供一个string; 你应该把签名改为:

 Sub EnterCellValueMonthNumber(cells As String, number As Integer) 

另外,我不确定你想用这个代码实现什么,因为它只会将范围的左上angular的单元格设置为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,这是没有必要的,只会在未来给你带来问题。

你实际上有两个问题。

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

 Call EnterCellValueMonthNumber("N23:Q23",1) 

但是,如果你运行它,你仍然不会工作,因为你已经设置了cells的typesrange …设置为typesstring而不是:

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

试试下面的代码:

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