You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:33:11