Excel宏调用PrintPreviewAndPrint实现多工作表打印预览问题求助
问题根因
你推测的原因正确,ExecuteMso调用PrintPreviewAndPrint时会重置当前工作表选中状态,仅保留激活的单个工作表,因此只会预览单个工作表。
可行方案
方案1:最简修复(适配Excel 2010及以上版本)
直接调用选中工作表集合的打印预览方法,即可保留多工作表选中状态,唤起的界面支持配置打印机、打印份数等所有参数:
Sub PrintReport() ' PrintReport Macro ' 选中目标工作表,Replace:=True确保替换原有选择 Sheets(Array("Cover page", "Scoresheet")).Select Replace:=True ' 唤起带参数配置的打印预览界面 ActiveWindow.SelectedSheets.PrintPreview End Sub
方案2:临时工作簿兼容方案(适配所有Excel版本,完全匹配原生「文件-打印」界面)
如果方案1唤起的是旧版无侧边栏参数的预览界面,可以用临时工作簿中转实现需求,操作全程无感知:
Sub PrintReport() ' PrintReport Macro Dim originalWb As Workbook Dim tempWb As Workbook Dim targetSheets As Variant Set originalWb = ThisWorkbook targetSheets = Array("Cover page", "Scoresheet") ' 关闭屏幕刷新避免闪屏 Application.ScreenUpdating = False ' 将目标工作表复制到新临时工作簿 originalWb.Sheets(targetSheets).Copy Set tempWb = ActiveWorkbook ' 唤起原生带预览的打印界面 Application.CommandBars.ExecuteMso "PrintPreviewAndPrint" ' 操作完成后自动关闭临时工作簿,不留下临时文件 tempWb.Close SaveChanges:=False ' 恢复屏幕刷新 Application.ScreenUpdating = True End Sub
两种方案都支持用户自主调整所有打印参数,最终打印内容为指定的多个工作表。
内容的提问来源于stack exchange,提问作者IainMackay
相关产品推荐
相关产品推荐

