VBA中如何将Cells.Address作为动态范围参数传入CopyRangeToJPG函数
错误原因
你当前的传参写法将VBA计算表达式放在了双引号内部,VBA会将其识别为普通文本而非可执行代码,最终传入函数的是"A1:(Cells(r + 1, 5).Address(RowAbsolute:=False, ColumnAbsolute:=False))"这段无效地址字符串,不符合Range的地址格式要求,所以会触发校验失败。
正确写法
需要先把固定前缀A1:和动态计算得到的地址用字符串拼接符&拼接,生成合法的地址字符串后再传入函数:
' 先计算目标表A列有效行数 Dim r As Long r = Sheet2.Range(Sheet2.Range("A2"), Sheet2.Range("A2").End(xlDown)).Rows.Count ' 拼接生成动态范围地址 Dim dynamicAddr As String dynamicAddr = "A1:" & Sheet2.Cells(r + 1, 5).Address(RowAbsolute:=False, ColumnAbsolute:=False) ' 传入函数 CopyRangeToJPG "Sheet2", dynamicAddr
如果不想单独声明地址变量,也可以直接在传参位置完成拼接:
CopyRangeToJPG "Sheet2", "A1:" & Sheet2.Cells(r + 1, 5).Address(RowAbsolute:=False, ColumnAbsolute:=False)
注意事项
- 建议给所有Range、Cells对象前加上工作表限定(比如示例中的
Sheet2.),避免当前激活工作表不是目标表时,地址计算出错 - 如果需要更健壮的最后行判断,建议用
Sheet2.Cells(Sheet2.Rows.Count, "A").End(xlUp).Row的写法,避免A列存在空行时xlDown取到的行数不全的问题
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

