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

请求修正VBA代码:从Book1.xlsm各工作表提取L1值至p.xlsm

修正后的VBA代码
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
    If Success Then ' 仅在保存成功时执行汇总逻辑
        Call MakeSummary
    End If
End Sub

Sub MakeSummary()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False ' 关闭文件操作弹窗提示
    
    Dim wbBook1 As Workbook
    Dim ws As Worksheet
    Dim wsTarget As Worksheet
    Dim lastRow As Long
    
    ' 绑定当前工作簿(p.xlsm)的目标工作表
    Set wsTarget = ThisWorkbook.Sheets("Seznam")
    
    ' 捕获文件不存在/已打开等异常
    On Error Resume Next
    Set wbBook1 = Workbooks.Open("C:\Users\petr.shromazdil\Desktop\Book1.xlsm")
    On Error GoTo 0
    
    ' 确认Book1成功打开后执行写入逻辑
    If Not wbBook1 Is Nothing Then
        For Each ws In wbBook1.Worksheets
            If ws.Name <> "Seznam" Then
                ' 动态获取C列最后一行,适配所有Excel版本
                lastRow = wsTarget.Cells(wsTarget.Rows.Count, "C").End(xlUp).Row
                ' 将目标单元格值写入下一行
                wsTarget.Cells(lastRow + 1, "C").Value = ws.Range("L1").Value
            End If
        Next ws
        
        ' 关闭Book1,不保存(无需修改原文件时用此设置)
        wbBook1.Close SaveChanges:=False
    End If
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
原代码的问题解析
  • 多余的Application.Goto:这行代码会跳转到Book1的Seznam工作表,完全没必要,反而可能干扰后续操作的上下文,直接删除即可。
  • 硬编码行数Range("C65536"):仅适配旧版Excel(2003及更早),新版Excel最大行数为1048576,改用Cells(Rows.Count, "C")可兼容所有版本。
  • 直接用文件名引用工作簿Workbooks("p.xlsm"):若当前工作簿文件名被修改,代码会失效,用ThisWorkbook指代运行代码的工作簿更可靠。
  • 缺少错误处理:未考虑Book1文件不存在、已被打开等异常情况,加入错误捕获可避免代码崩溃。
  • 未关闭Book1:打开文件后未执行关闭操作,会导致Book1一直处于打开状态,浪费系统资源。

内容的提问来源于stack exchange,提问作者user3456168

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:05:18