如何通过引用传递DOM元素并修改其值?VBA代码求助
解决VBA中无法通过引用传递属性值更新元素的问题
问题核心是你传递的是属性的当前值,而非属性所属的对象本身。Application.ActiveSheet.Columns(1).ColumnWidth是Range对象的一个属性,当你把它作为参数传给ByRef的Double变量时,VBA会先读取该属性的数值,生成一个临时的Double变量,再将这个临时变量的引用传入子过程。你在UpdateValue里修改的只是这个临时变量,原Range对象的ColumnWidth属性不会受到任何影响,所以两次输出的数值始终一致。
方法一:传递对象而非属性值
直接将Range对象传递给子过程,在子过程中直接修改它的ColumnWidth属性:
Sub Test() Debug.Print Application.ActiveSheet.Columns(1).ColumnWidth UpdateColumnWidth Application.ActiveSheet.Columns(1) Debug.Print Application.ActiveSheet.Columns(1).ColumnWidth End Sub Sub UpdateColumnWidth(ByRef col As Range) col.ColumnWidth = 9 End Sub
方法二:通用属性更新方法(适合多场景复用)
如果需要一个通用的更新属性的子过程,可以传递对象、属性名和新值,使用CallByName函数来设置属性:
Sub Test() Debug.Print Application.ActiveSheet.Columns(1).ColumnWidth UpdateValue Application.ActiveSheet.Columns(1), "ColumnWidth", 9 Debug.Print Application.ActiveSheet.Columns(1).ColumnWidth End Sub Sub UpdateValue(obj As Object, propName As String, newValue As Double) CallByName obj, propName, VbLet, newValue End Sub
内容的提问来源于stack exchange,提问作者zin92
相关产品推荐
相关产品推荐

