BYVAL在VBA活动中



我正在尝试在VBA上获得一些基础

我知道这是非常基本的,但是在更改等工作表活动中

Private Sub Worksheet_Change(ByVal Target as Range) 
    Target.Font.ColorIndex = 5 
End Sub

i've搜索了byval在此链接中的含义

我无法从帮助中的这种解释中获得含义

指定参数以这样的方式传递,以至于调用过程或属性无法更改调用代码中参数基础的变量的值。

女巫真的让我困惑...

我还用各种来源搜索了它,发现了这种不同的解释,使我深入到黑暗中……它是:

如果您不希望调用过程来修改作为参数传递的任何变量,则可以修改调用过程的参数列表,以便通过值而不是参考将参数传递给其。为此,请使用Byval关键字进行参数之前。此技术使所谓的例程与传递变量数据的副本一起工作,而不是数据本身。

他的意思是"该论点是通过价值而不是通过参考传递给它的?"您能以简单的方式向我解释Byval的作用吗?我想知道我正在编写的所有代码。

这是一个非常好的网站,其中示例解释了按值和参考之间的区别:http://www.physics.nyu.edu/grierlab/idl_html_help/procedures12.html让我知道它是否有帮助!如果没有,我可以更深入地解释它,但我认为该网站充分涵盖了该主题。

编辑:

按值表示设置。您不能在另一个函数中再次调用此值。通过引用意味着可以再次调用此值。因此,在示例中,pro add,a,b a = a b返回结束

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会复制参数的整个数据内容。因此,对于诸如结构之类的大价值类型,通过REF将其传递可能更有效。

对不起,很长的答案,希望它有所帮助。

最新更新