Vba 以这四种不同的方式输入参数有什么区别?
我经常看到以四种不同的方式添加VBA参数:Vba 以这四种不同的方式输入参数有什么区别?,vba,Vba,我经常看到以四种不同的方式添加VBA参数: wks.Cells.Find(“*”,xlByRows,xlPrevious)-包含以逗号分隔的值的括号 vls.添加vl-后跟值的空间 copyRange.Copy Destination:=单元格(countD,2)-空格后跟标签、特殊符号:=和值 查找(查找:=“*”)-包含标签、特殊符号:=和值的括号 因此,似乎存在以下维度: 括号与否 标签:=值或值 我可以随时使用任何方法吗?当括号是否比其他括号更合适时,括号是vb惯例,如果要从函数
- wks.Cells.Find(“*”,xlByRows,xlPrevious)-包含以逗号分隔的值的括号
- vls.添加vl-后跟值的空间
- copyRange.Copy Destination:=单元格(countD,2)-空格后跟标签、特殊符号:=和值
- 查找(查找:=“*”)-包含标签、特殊符号:=和值的括号
- 括号与否
- 标签:=值或值
我可以随时使用任何方法吗?当括号是否比其他括号更合适时,括号是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
括号与否
通常在下列情况下使用括号:
1) 将结果分配给变量:
正确:
Set rng = wks.Cells.Find("*", , , , xlByRows, xlPrevious)
Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy Destination:=Range("C1")
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy(Destination:=Range("C1"))
不正确:
Set rng = wks.Cells.Find("*", , , , xlByRows, xlPrevious)
Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy Destination:=Range("C1")
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy(Destination:=Range("C1"))
2) 做一些有结果的事情:
3) 与调用一起使用
关键字:
正确:
Set rng = wks.Cells.Find("*", , , , xlByRows, xlPrevious)
Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy Destination:=Range("C1")
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy(Destination:=Range("C1"))
不正确:
Set rng = wks.Cells.Find("*", , , , xlByRows, xlPrevious)
Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy Destination:=Range("C1")
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy(Destination:=Range("C1"))
在下列情况下不使用括号: 1) 调用任何方法而不将结果分配给变量,或对结果执行操作,或使用
Call
关键字:
正确:
Set rng = wks.Cells.Find("*", , , , xlByRows, xlPrevious)
Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy Destination:=Range("C1")
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy(Destination:=Range("C1"))
不正确:
Set rng = wks.Cells.Find("*", , , , xlByRows, xlPrevious)
Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy Destination:=Range("C1")
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy(Destination:=Range("C1"))
标签:=值或值 此功能称为命名参数,非常方便 使用命名参数的函数调用与常规函数调用的不同之处在于,通过将每个值与参数名关联来传递值,而不是提供有序的值列表 当调用具有可选参数的过程时,命名参数特别有用。如果使用命名参数,则不必包含逗号来表示缺少的位置参数。使用命名参数可以更容易地跟踪传递的参数和省略的参数。看更多 例如,
Find
方法有9个参数(1个必需参数和8个可选参数),如果要指定7th
参数,有两个选项:
选项1:
Set rng = wks.Cells.Find("*", , , , xlByRows, xlPrevious)
Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy Destination:=Range("C1")
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy(Destination:=Range("C1"))
使用其顺序进行设置:
当您看到上面第行中的代码时,很难理解True
的含义,因为您应该计算此参数的位置并查看详细信息
选项2:
Set rng = wks.Cells.Find("*", , , , xlByRows, xlPrevious)
Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy (Destination:=Range("C1"))
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy Destination:=Range("C1")
Call Range("A1:A5").Copy Destination:=Range("C1")
Range("A1:A5").Copy(Destination:=Range("C1"))
使用命名参数设置它:
Set rng = wks.Cells.Find(MatchCase:=True, What:="*")
这使您的代码更具可读性
此外,使用命名参数时,可以更改参数的顺序:
Set rng = wks.Cells.Find(MatchCase:=True, What:="*")
为什么使用:=而不是=?命名参数,还有一点值得一提的是,变量何时通过val传递,何时通过ref传递。不过,大多数语法只是偏好问题