我想在VBA上取得一些进展
我知道这是非常基本的,但在诸如Change
之类的工作表事件中Private Sub Worksheet_Change(ByVal Target as Range)
Target.Font.ColorIndex = 5
End Sub
中搜索了ByVal的含义
我无法从帮助
中解释出这个解释指定以这样的方式传递参数:被调用的过程或属性不能更改调用代码中参数的变量值。
女巫真的很困惑我......
我也在各种来源中搜索它,发现这种不同的解释让我更深入地陷入黑暗......它如下:
如果您不希望被调用过程修改作为参数传递的任何变量,则可以修改被调用过程的参数列表,以便通过值而不是引用将参数传递给它。为此,请在参数前加上ByVal关键字。这种技术使被调用的例程处理传递的变量数据的副本 - 而不是数据本身。
他的意思是“参数是通过价值而不是通过参考传递给它的”? 你能用简单的方式向我解释一下ByVal的作用吗,我在编码时会经常使用它 我想知道我写的每一段代码。
答案 0 :(得分:3)
这是一个非常好的网站,其中的示例解释了按值和引用之间的区别: http://www.physics.nyu.edu/grierlab/idl_html_help/procedures12.html 如果有帮助,请告诉我! 如果没有,我可以更深入地解释它,但我认为该网站充分涵盖了该主题。
编辑:
按值表示已设置。您无法在另一个函数中再次调用此值。通过引用意味着可以再次调用此值。所以在这个例子中,PRO ADD,A,B A = A + B RETURN END
A通过引用传递,当用户再次调用A时,它将被返回。但是,B是按值调用的。在以下示例中,ADD,A,4工作。 A被定义为A = A + B.因此用户再次调用A,并向其添加B.但是,ADD,4,A不起作用,因为4是一个值。所以4 = A + B会产生错误。当然,这也可以应用于VBA。
只是补充一点,这种区别很重要的原因来自两个主要观点:
保护:在两种传递机制之间进行选择时,最重要的标准是保护变量免受未完成的更改。调用ByRef时,该过程可以通过该参数向调用代码返回一个值。换句话说,它可以再次引用相同的变量。 ByVal保护变量不被过程更改。因此,例如,如果您希望变量= 4,那么您将使用ByVal。
性能:传递机制可能影响性能,但通常无关紧要。一个例外是传递ByVal的值类型。在这种情况下,Visual Basic将复制参数的全部数据内容。因此,对于诸如结构的大值类型,传递ByRef可能更有效。
很抱歉答案很长,希望有所帮助。