首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从函数单元格执行时,Excel VBA ByVal目标作为范围不更新目标工作表

是因为ByVal关键字在VBA中用于传递参数时,表示按值传递,即传递参数的副本而不是原始对象。在Excel VBA中,当将范围作为参数传递给函数时,如果使用ByVal关键字,函数将使用传递的范围的副本而不是原始范围。

这意味着,如果在函数中对传递的范围进行修改,原始范围不会被更新。这是因为函数只能修改传递的范围的副本,而不是原始范围。

为了解决这个问题,可以使用ByRef关键字来传递参数。ByRef表示按引用传递,即传递参数的引用而不是副本。这样,在函数中对传递的范围进行修改时,原始范围也会被更新。

以下是一个示例代码,演示了ByVal和ByRef的区别:

代码语言:vba
复制
Sub Test()
    Dim rng As Range
    Set rng = Range("A1:B2")
    
    ' 使用ByVal关键字传递范围
    ByValExample rng
    MsgBox rng.Address ' 输出 $A$1:$B$2,原始范围未被修改
    
    ' 使用ByRef关键字传递范围
    ByRefExample rng
    MsgBox rng.Address ' 输出 $C$1:$D$2,原始范围被修改
End Sub

Sub ByValExample(ByVal rng As Range)
    rng.Offset(2, 2).Value = "ByVal"
End Sub

Sub ByRefExample(ByRef rng As Range)
    rng.Offset(2, 2).Value = "ByRef"
End Sub

在上述示例中,ByValExample函数使用ByVal关键字传递范围,并在范围的偏移位置写入"ByVal"。然而,当在主程序中检查范围的地址时,发现原始范围并没有被修改。

相反,ByRefExample函数使用ByRef关键字传递范围,并在范围的偏移位置写入"ByRef"。当在主程序中检查范围的地址时,发现原始范围已经被修改。

总结起来,使用ByVal关键字传递范围时,函数只能修改传递范围的副本,而不是原始范围。如果需要修改原始范围,应该使用ByRef关键字传递参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券