Excel跨工作簿复制区域报错:Run-time error '9'下标越界
VBA下标越界错误(Run-time error '9')的原因分析
出现这个错误,主要是以下几种常见情况:
引用的工作簿未打开:你的代码直接通过
Workbooks("Excel_1.xlsx")和Workbooks("Excel_2.xlsm")调用工作簿,但如果这两个文件没在当前Excel进程中打开,VBA找不到对应的工作簿对象,就会触发下标越界。OneDrive路径下的文件也一样,没打开就没法直接用文件名引用。文件名或工作表名不匹配:检查文件名是否完全一致,比如有没有大小写差异、末尾空格;再确认工作表名是不是真的叫
Sheet1——如果工作表被重命名过(比如改成了"数据 sheet"),代码里写Sheet1就会找不到对应的工作表,导致错误。OneDrive路径的同步问题:OneDrive同步的文件,实际本地存储路径可能和你直观看到的"同路径"有差异,比如同步目录是
C:\Users\XXX\OneDrive,但代码运行时的当前路径不是这个,或者OneDrive未完成同步,都会导致VBA无法正确定位文件,间接引发引用失败。未显式打开工作簿:如果你的代码没有先打开这两个文件,直接用
Workbooks()引用是无效的。正确的做法是先通过Workbooks.Open()指定完整路径打开文件,再执行复制操作。
修正后的示例代码
Option Explicit Sub copyRange() Dim wbSource As Workbook, wbTarget As Workbook Dim basePath As String ' 获取当前代码所在工作簿的路径(假设两个文件同路径) basePath = ThisWorkbook.Path & "\" ' 打开源文件和目标文件 Set wbSource = Workbooks.Open(basePath & "Excel_1.xlsx") Set wbTarget = Workbooks.Open(basePath & "Excel_2.xlsm") ' 执行复制粘贴 wbSource.Worksheets("Sheet1").Range("A1:D7").Copy _ Destination:=wbTarget.Worksheets("Sheet1").Range("A1") ' 可选:保存目标文件并关闭(按需调整) wbTarget.Save wbSource.Close SaveChanges:=False wbTarget.Close SaveChanges:=False End Sub
内容的提问来源于stack exchange,提问作者Whiteli3
相关产品推荐
相关产品推荐

