【发布时间】:2019-07-26 17:26:02
【问题描述】:
我对在 Excel 的某些事件处理程序中使用 ByVal 关键字感到有些困惑。
NewSheet 事件示例 (复制自 Excel 2019 Power Programming with VBA,Wiley)
Private Sub Workbook_NewSheet(ByVal Sh As Object)
If TypeName(Sh) = "Worksheet" Then
Sh.Cells.ColumnWidth = 35
Sh.Range("A1") = "Sheet added " & Now()
End If
End Sub
此代码按预期工作,似乎微不足道。但经过一番思考,我越来越困惑。
根据我的理解ByVal 意味着Sh 只是原始工作表对象的副本,使用ByVal 参数的过程不会导致对原始对象的更改。换句话说,代码所做的应该没有任何影响。
只有当引用被传递给过程时,它们才能修改这些引用所引用的对象。
我错过了什么吗?谢谢
附:我对通过引用/值传递的大部分理解来自其他编程语言,例如 C#。我不知道 VBA 中可能有一些特殊性。
【问题讨论】:
标签: vba pass-by-reference pass-by-value