gpt4 book ai didi

vba - 调用关键字 - 已弃用与否

转载 作者:行者123 更新时间:2023-12-04 04:54:38 28 4
gpt4 key购买 nike

enter image description here

我一直看到人们提到 通话声明 已弃用,但我似乎找不到任何官方支持此声明的内容。

关于 documentation page ,该页面最近有更新(12/03/2018),所以不能说是过时的信息。

我一直在我的代码中使用 Call,大部分时间只是因为我发现:
Call function(arg1, arg2, arg3)function arg1, arg2, arg3
现在为 问题 ,任何人都可以提供一些见解为什么我不应该使用 Call声明了吗?如果您确实说已弃用,请提供指向资源的链接。

如果这个问题违反了网站规则,请告诉我,我很乐意自己删除它,但很高兴得到答案。

最佳答案

我尽量避免 Call (因此,它对我来说是贬值的)出于以下原因 - 在#VBA 中,我考虑在括号中传递一个变量作为超出标准 ByVal 的一种方式。/ByRef参数的规范。我是什么意思?考虑这个例子:

Public Sub TestMe()

Dim var1 As Long: var1 = 1
Dim var2 As Long: var2 = 1

IncrementByVal (var1)
IncrementByRef (var2)

Debug.Print var1, var2

End Sub

Public Function IncrementByVal(ByVal a As Variant) As Variant
a = a + 100
IncrementByVal = a
End Function

Public Function IncrementByRef(ByRef a As Variant) As Variant
a = a + 100
IncrementByRef= a
End Function

正如您可能看到的,两个 var1var2返回 1 , 而 var2应该是 101 ,至于 ByRef . Call -word kind-of 改进了 VBA 中的这个“特性”,但是当括号覆盖 ByRef 时,它变得太复杂而难以记住当没有时,在阅读代码时。因此,有 3 个案例是相当多的:
Public Sub TestMe()

Dim var1 As Long: var1 = 1
Dim var2 As Long: var2 = 1
Dim var3 As Long: var3 = 1
Dim var4 As Long: var4 = 1
Dim var5 As Long: var5 = 1
Dim var6 As Long: var6 = 1

IncrementByVal (var1) '1
IncrementByRef (var2) '1
IncrementByVal var3 '1
IncrementByRef var4 '101
Call IncrementByVal(var5) '1
Call IncrementByRef(var6) '101

Debug.Print var1, var2
Debug.Print var3, var4
Debug.Print var5, var6

End Sub

Public Function IncrementByVal(ByVal a As Variant) As Variant
a = a + 100
IncrementByVal = a
End Function

Public Function IncrementByRef(ByRef a As Variant) As Variant
a = a + 100
IncrementByRef = a
End Function

关于vba - 调用关键字 - 已弃用与否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56504639/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com