VBA复制工作表至同文件指定表时遇运行时错误'9'求解决
解决VBA运行时错误'9':下标越界(工作表复制场景)
嘿,我来帮你搞定这个头疼的下标越界问题!错误'9'说白了就是VBA找不到你指定的对象——在这里就是Sheets("FPP")这个工作表。咱们一步步拆解可能的原因,再给出对应的解决办法:
可能的原因&解决方案
1. 目标工作簿里根本没有叫"FPP"的工作表
这是最常见的原因!你得仔细检查:
- 打开
wbTarget指向的工作簿,看看工作表标签的名称是不是和代码里的"FPP"完全一致——别小看拼写错误,比如多打了空格(比如"FPP ")、大小写不对(比如实际是"Fpp"),都会导致VBA找不到它。 - 解决:修改代码里的工作表名称,或者重命名工作表,确保两者完全匹配。
2. wbTarget对象没正确赋值
看你给出的代码片段,wbTarget只声明了但没看到赋值语句!你说要复制到编写宏的同一文件,那应该把wbTarget指向当前宏所在的工作簿才对:
Set wbTarget = ThisWorkbook ' 这句是关键!指向当前运行宏的工作簿
如果wbTarget是其他工作簿,那得确保这个工作簿已经打开,并且文件名(包括扩展名,比如.xlsx)写得完全正确,比如:
Set wbTarget = Workbooks("你的目标文件名.xlsx")
3. 调试技巧帮你快速定位问题
要是还是找不到问题,试试这些调试方法:
- 在出错的代码行前面加一句
Debug.Print wbTarget.Name,然后运行宏,打开VBA编辑器的立即窗口(按Ctrl+G),看看wbTarget到底指向哪个工作簿,是不是你预期的那个。 - 遍历目标工作簿的所有工作表,打印名称确认:
运行后在立即窗口里就能看到所有工作表的名字,对比一下有没有Dim ws As Worksheet For Each ws In wbTarget.Sheets Debug.Print ws.Name Next ws"FPP"。
修正后的代码示例
我给你调整了代码,加上了错误检查,避免踩坑:
Sub XML() Dim wbTarget As Workbook Dim wbThis As Workbook Dim fppSheet As Worksheet ' 赋值:指向当前宏所在的工作簿(你要复制到的目标文件) Set wbTarget = ThisWorkbook ' 赋值源工作簿:这里需要你补充正确的引用,比如打开的源文件 ' 示例:Set wbThis = Workbooks("你的源Excel文件名.xlsx") ' 先确认源范围复制成功(替换成你的源工作表名称) wbThis.Sheets("源工作表名称").Range("A1:E654").Copy ' 检查FPP工作表是否存在 On Error Resume Next Set fppSheet = wbTarget.Sheets("FPP") On Error GoTo 0 If fppSheet Is Nothing Then MsgBox "找不到名为FPP的工作表,请检查名称是否正确!" Exit Sub End If ' 执行粘贴操作,指定粘贴类型更稳妥 fppSheet.Range("A1:E654").PasteSpecial Paste:=xlPasteAll ' 清除剪贴板,避免残留 Application.CutCopyMode = False End Sub
内容的提问来源于stack exchange,提问作者Bunty
相关产品推荐
相关产品推荐

