VBA宏运行时错误'9'(下标越界)求助:跨工作簿复制数据失败
VBA跨工作簿复制数据时Run-time error 9的解决办法
你编写的宏代码如下:
Option Explicit Sub CopyMainTable() Dim SourceWorkbook As Workbook Dim DestWorkbook As Workbook ' Set references to the source and destination workbooks Set SourceWorkbook = Workbooks("Monthly Report.xlsx") Set DestWorkbook = Workbooks("ANNUAL REPORT.xlsx") ' Copy data from source to destination SourceWorkbook.Sheets("SITE1").Range("B19:Av43").Copy Destination:=DestWorkbook.Sheets("SITE1").Range("B19") Set SourceWorkbook = Nothing Set DestWorkbook = Nothing End Sub
运行时触发Run-time error 9(下标越界),即使已核对单元格区域、文件名和工作表名,仍可从以下几个方向排查解决:
排查方向与解决方法
确认目标工作簿已在Excel中打开
Workbooks("文件名")只能引用当前处于打开状态的工作簿,如果文件未打开,直接调用会触发下标越界错误。你可以手动打开两个工作簿后再运行宏,或者修改代码自动打开文件(需替换为实际文件路径):Option Explicit Sub CopyMainTable() Dim SourceWorkbook As Workbook Dim DestWorkbook As Workbook Dim SourcePath As String Dim DestPath As String ' 替换为文件实际存储路径 SourcePath = "C:\示例路径\Monthly Report.xlsx" DestPath = "C:\示例路径\ANNUAL REPORT.xlsx" ' 检查并打开源工作簿 On Error Resume Next Set SourceWorkbook = Workbooks("Monthly Report.xlsx") On Error GoTo 0 If SourceWorkbook Is Nothing Then Set SourceWorkbook = Workbooks.Open(SourcePath) End If ' 检查并打开目标工作簿 On Error Resume Next Set DestWorkbook = Workbooks("ANNUAL REPORT.xlsx") On Error GoTo 0 If DestWorkbook Is Nothing Then Set DestWorkbook = Workbooks.Open(DestPath) End If ' 执行数据复制 SourceWorkbook.Sheets("SITE1").Range("B19:Av43").Copy Destination:=DestWorkbook.Sheets("SITE1").Range("B19") Set SourceWorkbook = Nothing Set DestWorkbook = Nothing End Sub核对文件名的完整扩展名
若系统默认隐藏了文件扩展名,你看到的文件名可能和实际不符(比如实际是Monthly Report.xls,但显示为Monthly Report)。可以在文件夹选项中开启「显示文件扩展名」,确认文件的完整名称与代码中的引用完全一致。验证工作表名的精确匹配
工作表名的空格、大小写、特殊字符(如全角/半角符号)不匹配也会触发错误。可以运行以下代码,在立即窗口查看目标工作簿的所有工作表名,确认是否存在SITE1:Sub CheckSheetNames() Dim wb As Workbook Dim ws As Worksheet ' 替换为要检查的工作簿名 Set wb = Workbooks("Monthly Report.xlsx") For Each ws In wb.Sheets Debug.Print ws.Name Next ws End Sub运行后按
Ctrl+G打开立即窗口,查看输出的工作表名是否与代码中的引用完全一致。
内容的提问来源于stack exchange,提问作者ADAN ALEJANDRO RAMIREZ QUINTER
相关产品推荐
相关产品推荐

