excel vba用变量调用子程序

use*_*121 30 excel vba subroutine

我定义了以下子例程:

Sub EnterCellValueMonthNumber(cells As range, number As Integer)

range(cells).Select
ActiveCell.FormulaR1C1 = number

End Sub
Run Code Online (Sandbox Code Playgroud)

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

EnterCellValueMonthNumber ("N23:Q23",1)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

Compile error Expected: =
Run Code Online (Sandbox Code Playgroud)

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

Sim*_*wen 50

你可以把子叫做

EnterCellValueMonthNumber "N23:Q23", 1
Run Code Online (Sandbox Code Playgroud)

没有括号.要么

Call EnterCellValueMonthNumber("N23:Q23", 1)
Run Code Online (Sandbox Code Playgroud)

括号,Call在它之前.

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

Sub EnterCellValueMonthNumber(cells As String, number As Integer)
Run Code Online (Sandbox Code Playgroud)

此外,我不确定你要用这个代码实现什么,因为它只会将范围的左上角单元格设置为1.类似于

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

更合适吗?

我也非常谨慎地使用Range("...")而没有指定你指的是哪张纸.这将取决于活动表单中的任何一个,因此可能导致意外问题,几乎总是更喜欢SheetX.Range("...").同样地,对于使用来说.Select,它是不必要的,并且只会在将来给您带来问题.