我经常看到VBA参数以四种不同的方式添加:
所以似乎有尺寸:
我可以随时使用任何方法吗?什么时候比其他更合适
答案 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