VBA中Range对象Copy方法报错:参数数量错误或属性赋值无效
解决VBA复制表格时的"Wrong number of arguments or invalid property assignment"错误
我看了你的宏代码,出现这个错误主要是几个小细节问题导致的,下面帮你逐一修正并解释:
核心错误点拆解
- 未定义的变量
answ:你代码里用了If Not answ Is Nothing Then,但answ从来没声明也没赋值,这完全是笔误,应该替换成你实际获取的target变量。 - Copy方法参数使用错误:
table.Copy , shA.target这种写法逻辑混乱,target已经是用户选择的Range对象,不需要加shA.前缀;而且Copy方法的目标参数要么直接传入对象,要么用Destination参数明确标注,不能用逗号分隔的错误格式。 - Range引用未绑定工作表:
Set table = shA.Range(Cells(1, 2), Cells(i, 15))里的Cells没有绑定到shA工作表,如果当前激活的不是"User sheet comp data",会导致引用错位,必须改成shA.Cells。 - 隐式声明变量隐患:
shA没有显式声明,虽然VBA允许隐式声明,但显式声明能避免很多莫名其妙的错误,是良好的编程习惯。
修正后的完整代码
Sub PasteMacro() Dim target As Range ' 修正变量类型为Range,更贴合实际用途 Dim i As Long Dim table As Range Dim weight As Double Dim thickness As Double Dim Stiff As Double Dim shA As Worksheet ' 显式声明工作表变量 Set shA = ActiveWorkbook.Worksheets("User sheet comp data") ' 搜索表格中第一个非0行,加入防无限循环判断 i = 19 Do Until shA.Range("M" & i) <> 0 i = i - 1 If i < 1 Then MsgBox "未找到非0数据行" Exit Sub End If Loop MsgBox shA.Cells(i, 13).Address ' 绑定shA确保地址正确 ' 要复制的表格:绑定shA.Cells避免跨工作表引用错误 Set table = shA.Range(shA.Cells(1, 2), shA.Cells(i, 15)) weight = shA.Range("O20").Value ' 显式写.Value让代码逻辑更清晰 thickness = shA.Range("M20").Value Stiff = shA.Range("M21").Value On Error Resume Next ' 请用户选择粘贴表格的目标单元格 Set target = Application.InputBox(Prompt:="Please select a destination Cell where you want to paste", Type:=8) On Error GoTo 0 ' 判断用户是否选择了有效目标 If Not target Is Nothing Then ' 正确使用Copy方法的目标参数 table.Copy Destination:=target End If End Sub
额外优化说明
- 把
target的类型从Variant改成Range,避免类型不匹配的潜在问题; - 在循环中加入
i < 1的判断,防止M列1到19行全为0时出现无限循环; - 读取单元格值时显式加上
.Value,让代码可读性更强,逻辑更明确。
这样修改后,你的宏就能正常复制表格到用户选择的目标单元格了。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

