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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:52:59