如何修复无法正确生成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
相关产品推荐
相关产品推荐

