Workbooks.Open执行后VBA代码终止问题求助
跨工作簿数据复制VBA代码执行异常问题
我编写了一段VBA代码用于跨工作簿复制数据,但执行到打开目标工作簿的语句时,Excel会短暂加载文件后立刻关闭,代码直接终止,后续逻辑完全未执行。
原代码
Sub get_data() Dim wb As Workbook Dim ws As Worksheet Dim wn As Worksheet Dim lastrow Application.ScreenUpdating = False 'Open the other workbook Set wb = Workbooks.Open("C:\Users\OneDrive - My Smart Place\Reception\Shared Reception Files\Misc\data.xlsx") Set ws = wb.Worksheets("data") Set wn = ThisWorkbook.Worksheets("Helper Sheet") With ws lastrow = .Cells(Rows.Count, 1).End(xlUp).Row wn.Unprotect Password:=pass .Range(.Cells(1, 1), .Cells(lastrow, 5)).Copy _ Destination:=wn.Range("A1") wn.Protect Password:=pass End With 'Close the workbook from which we just got some data and make sure not to save it in case accidental changes were made to it. wb.Close SaveChanges:=False Application.ScreenUpdating = True End Sub
出错语句
执行到以下代码时出现异常:
Set wb = Workbooks.Open("C:\Users\rec135\OneDrive\OneDrive - My Smart Place\Reception\Shared Reception Files\Misc\data.xlsx")
问题排查与解决方案
1. 路径问题(最常见原因)
- 字符串格式错误:原代码中路径字符串存在换行,VBA中字符串必须是单行(或用续行符
_连接),且需使用标准双引号",不能是转义后的"。 - OneDrive同步问题:OneDrive的虚拟路径可能未同步到本地,建议直接使用文件的本地实际路径(右键文件→属性查看位置),或确认OneDrive已完成同步。
2. 错误捕获与调试
添加错误捕获逻辑,明确报错原因(如文件不存在、权限不足、文件被锁定等):
Sub get_data() Dim wb As Workbook Dim ws As Worksheet Dim wn As Worksheet Dim lastrow Dim pass As String ' 必须定义并赋值密码变量 pass = "你的工作表密码" ' 替换为实际密码 Application.ScreenUpdating = False On Error GoTo ErrorHandler ' 启用错误捕获 ' 修正后的路径:确保单行、路径正确 Set wb = Workbooks.Open("C:\Users\rec135\OneDrive\OneDrive - My Smart Place\Reception\Shared Reception Files\Misc\data.xlsx") Set ws = wb.Worksheets("data") Set wn = ThisWorkbook.Worksheets("Helper Sheet") With ws ' 加.引用当前工作表的Rows,避免引用错误 lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row wn.Unprotect Password:=pass .Range(.Cells(1, 1), .Cells(lastrow, 5)).Copy Destination:=wn.Range("A1") wn.Protect Password:=pass End With wb.Close SaveChanges:=False Application.ScreenUpdating = True Exit Sub ' 正常结束时跳过错误处理 ErrorHandler: ' 弹出错误信息,便于排查 MsgBox "错误代码:" & Err.Number & vbCrLf & "错误描述:" & Err.Description ' 确保异常时关闭已打开的工作簿 If Not wb Is Nothing Then wb.Close SaveChanges:=False End If Application.ScreenUpdating = True End Sub
3. 其他潜在问题
- 文件锁定:检查
data.xlsx是否被其他程序/用户打开,处于锁定状态会导致无法正常加载。 - 宏安全设置:若目标工作簿包含宏,或当前Excel宏安全级别过高,可能阻止文件打开,需调整信任中心设置。
- 变量未定义:原代码中
pass变量未定义赋值,会导致后续解锁工作表时出错,需补充定义并设置正确密码。 - 工作表名称错误:确认目标工作簿中存在名为
data的工作表,否则打开后会触发运行时错误。
内容的提问来源于stack exchange,提问作者Believe82
相关产品推荐
相关产品推荐

