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

use*_*776 3 vba

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

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

所以似乎有尺寸:

  • 括号与否
  • label:=值或值

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

Dmi*_*liv 6

括号与否

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

1)将结果分配给变量:

正确:

Set rng = wks.Cells.Find("*", , , , xlByRows, xlPrevious)
Run Code Online (Sandbox Code Playgroud)

不正确:

Range("A1:A5").Copy (Destination:=Range("C1"))
Run Code Online (Sandbox Code Playgroud)

2)做一些结果:

wks.Cells.Find("*", , , , xlByRows, xlPrevious).Activate
Run Code Online (Sandbox Code Playgroud)

3)使用带Call关键字:

正确:

Call Range("A1:A5").Copy (Destination:=Range("C1"))
Run Code Online (Sandbox Code Playgroud)

不正确:

Call Range("A1:A5").Copy Destination:=Range("C1")
Run Code Online (Sandbox Code Playgroud)

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

1)调用任何方法而不将结果赋给变量使用result使用Call关键字执行某些操作:

正确:

Range("A1:A5").Copy Destination:=Range("C1")
Run Code Online (Sandbox Code Playgroud)

不正确:

Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy(Destination:=Range("C1"))
Run Code Online (Sandbox Code Playgroud)

label:=值或值

这个功能称为命名参数,非常方便.

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

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

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

选项1:

使用它的顺序设置它:

Set rng = wks.Cells.Find("*", , , , , , True)
Run Code Online (Sandbox Code Playgroud)

当你看到如上所述的代码时,很难理解其含义,True因为你应该计算这个参数的位置并查看文档以获取详细信息.

选项2:

使用命名参数设置它:

Set rng = wks.Cells.Find(What:="*", MatchCase:=True)
Run Code Online (Sandbox Code Playgroud)

这使您的代码更具可读性.

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

Set rng = wks.Cells.Find(MatchCase:=True, What:="*")
Run Code Online (Sandbox Code Playgroud)