【问题标题】:VBA passing argument to parameter in method vs :=VBA将参数传递给方法vs中的参数:=
【发布时间】:2016-02-17 04:34:40
【问题描述】:

我学习了 java 和 C,现在我正在尝试学习 VBA for excel,但是对于将参数传递给 VBA 方法我有点困惑

当我们在 C 中传递参数时,我们会:

void Foo(int i)
{
    // Do things
}

void Bar()
{
    int temp = 1;
    Foo(temp);
}

但在vba中,当我使用记录宏学习时,它给了我这一行。

ActiveWorkbook.Names.Add Name:="NewName", RefersToR1C1:="=Sheet1!C8"

如果我在没有记录功能的情况下尝试使用方法Add,我会输入

ActiveWorkbook.Names.Add("NewName", "Sheet1!C8")

让我感到困惑的是,有时我们像 java/C 一样将参数传递给方法,例如:

单元格(行数,1)

那么我们什么时候使用 := ,什么时候像在 java/C 中那样传递参数?

谢谢

【问题讨论】:

标签: excel vba function methods arguments


【解决方案1】:

如果按顺序传递所有必需的参数,则不需要命名参数(java/C 风格)。如果您跳过可选参数(依赖于它们的默认值)或将参数传递到它们的声明顺序之外,那么您需要命名参数。

使用Range.Cells propertyRange.Address property 来说明这一点:

Dim r As Long, c As Long
r = 5
c = 8
'ordered Cells args, first 2 args in Address changes from defaults
Debug.Print Cells(r, c).Address(0, 0)    '<~~ H5
'out-of-order Cells args
Debug.Print Cells(Columnindex:=c, RowIndex:=r).Address(0, 0)    '<~~ still H5
'out-of-order Cells args and only the 4th arg for .Address
Debug.Print Cells(Columnindex:=c, RowIndex:=r).Address(external:=True)    '<~~ [Book2]Sheet3!$H$5

【讨论】:

  • 谢谢,现在说得通了 编辑:我正在尝试 microsoft.com 中的一个示例:Sub PassArgs(strName As String, intAge As Integer, dteBirth As Date) Debug.Print strName, intAge, dteBirth End Sub PassArgs ( "Mary", 29, #2/21/1969#) '这给了我一个错误' 但是,如果我这样做 PassArgs "Mary", 29, #2/21/1969# PassArgs strName:="Mary", intAge:=29, dteBirth:=#2/21/1969# 很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 2011-07-23
  • 2017-01-05
  • 2013-10-04
  • 2013-05-19
相关资源
最近更新 更多