You need to enable JavaScript to run this app. 如何修复无法正确生成8个独立PRN文件的VBA代码?
优惠活动
大模型
产品
解决方案
定价
更多

如何修复无法正确生成8个独立PRN文件的VBA代码?

问题原因

代码未显式绑定遍历到的工作表对象,循环中用到的Cells、ActiveSheet默认指向宏运行时的活动工作表(也就是你运行代码时打开的第一个工作表),导致8次复制的都是同一份数据。

修正后完整代码
Sub Create_PRN()
    Dim wb As Workbook, ws As Worksheet
    Dim lr As Long, shnum As Long ' 提前声明变量,符合VBA语法规范
    ' 关闭屏幕更新提升运行速度
    Application.ScreenUpdating = False
    For Each ws In ThisWorkbook.Worksheets ' 明确指定为当前代码所在工作簿的工作表,避免误操作其他打开的工作簿
        shnum = ws.Index
        lr = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' 绑定当前遍历工作表的单元格
        ' 明确复制当前遍历工作表的可见区域
        ws.Range("A1:Z" & lr).SpecialCells(xlCellTypeVisible).Copy
        Set wb = Workbooks.Add
        With wb.Sheets(1)
            .Range("A1").PasteSpecial xlPasteAll ' 不需要保留格式可改成xlPasteValues只粘贴数值,运行速度更快
            .Columns("A").ColumnWidth = 30
            .Columns("B").ColumnWidth = 29
            .Columns("C").ColumnWidth = 8
            .Columns("D").ColumnWidth = 1
            .Columns("E").ColumnWidth = 15
            .Columns("F").ColumnWidth = 10
            .Columns("G").ColumnWidth = 2
            .Columns("H").ColumnWidth = 8
            .Columns("I").ColumnWidth = 5
            .Columns("J").ColumnWidth = 15
            .Columns("K").ColumnWidth = 8
        End With
        wb.SaveAs "C:\Users\jsiemiatkowski\OneDrive - RB\Desktop\" & shnum & ".prn", 36
        wb.Close SaveChanges:=False ' 明确不保存新工作簿,避免弹出提示框
        Application.CutCopyMode = False ' 清空剪贴板
    Next ws
    ' 恢复屏幕更新
    Application.ScreenUpdating = True
    MsgBox "PRN文件批量生成完成!"
End Sub
主要修改点
  • 所有单元格操作都显式绑定到当前遍历的ws对象,避免默认调用活动工作表
  • 新增变量声明,避免隐式声明引发的未知错误
  • 增加ScreenUpdating开关,大幅提升批量操作的运行速度
  • 新增SaveChanges:=False参数,关闭新工作簿时不会弹出保存提示
  • 用With语句简化重复的wb.Sheets(1)引用,代码更简洁易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 23:36:01