以这四种不同的方式输入参数有什么区别?

时间:2014-05-07 07:41:48

标签: vba

我经常看到VBA参数以四种不同的方式添加:

  • wks.Cells.Find(“*”,,,, xlByRows,xlPrevious) - 包含以逗号分隔的值的括号
  • vls.Add vl - space后跟值
  • copyRange.Copy Destination:= Cells(countD,2) - 空格后跟标签,特殊标志:=和值
  • wks.Cells.Find(lookFor:=“*”) - 包含标签的括号,特殊符号:=和值

所以似乎有尺寸:

  • 括号是否
  • label:= value或value

我可以随时使用任何方法吗?什么时候比其他更合适

2 个答案:

答案 0 :(得分:6)

  

是否括号

通常在以下情况下使用括号:

1)将结果分配给变量

<强>正确:

Set rng = wks.Cells.Find("*", , , , xlByRows, xlPrevious)

<强>不正确:

Range("A1:A5").Copy (Destination:=Range("C1"))

2)使用结果执行某些操作:

wks.Cells.Find("*", , , , xlByRows, xlPrevious).Activate

3)使用Call关键字

<强>正确:

Call Range("A1:A5").Copy (Destination:=Range("C1"))

<强>不正确:

Call Range("A1:A5").Copy Destination:=Range("C1")

在以下情况下不使用括号:

1)调用任何方法而不将结果分配给变量使用结果使用Call关键字执行某些操作:< / p>

<强>正确:

Range("A1:A5").Copy Destination:=Range("C1")

<强>不正确:

Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy(Destination:=Range("C1"))

  

标签:=价值或价值

此功能称为命名参数,非常方便。

使用命名参数的函数调用与常规函数调用的不同之处在于,通过将每个值与参数名称相关联来传递值,而不是提供有序的值列表。

当您调用具有可选参数的过程时,命名参数特别有用。如果使用命名参数,则不必包含逗号来表示缺少位置参数。使用命名参数可以更容易地跟踪您传递的参数以及省略的参数。查看更多here

E.g。 Find方法有9个参数(1个必需,8个可选),如果要指定7th参数,则有两个选项:

<强>选项1:

使用它的顺序设置它:

Set rng = wks.Cells.Find("*", , , , , , True)

当您看到上面的代码时,很难理解True的含义,因为您应该计算这个参数的位置并查看documentation以获取详细信息。

<强>选项2:

使用命名参数设置它:

Set rng = wks.Cells.Find(What:="*", MatchCase:=True)

使您的代码更加可读。

此外,使用命名参数时,您可以更改参数的顺序:

Set rng = wks.Cells.Find(MatchCase:=True, What:="*")

答案 1 :(得分:4)

括号与否是vb约定,如果你想从你必须提供括号的函数中获取返回值,如果你对返回值不感兴趣,你必须将它们遗漏。

:=允许您以与声明它们的顺序不同的顺序指定参数。

Sub Test()

    TestParams "hello", "there" ' not capturing the return value - no parenthesis

    r = TestParams("hello", "there") ' reading the return value - parenthesis needed

    TestParams w:="there", v:="hello" ' := supply the parameters in a different order

    r2 = TestParams(w:="there", v:="hello") ' := and () to supply the parameters in different order and get the return value


End Sub


Public Function TestParams(v As String, w As String)

    MsgBox v & " " & w

    TestParams = "ok" & " " & v & " " & w

End Function