如何用VBA打印复制工作表?含指定页打印与复制工作表检测需求
嘿,我来帮你搞定这个打印需求!咱们分两部分来实现:先稳妥地获取复制出来的工作表,再完成指定页码的打印功能。
一、获取复制生成的工作表(最可靠的两种方式)
直接在复制工作表的代码里把新表存为变量,这是最靠谱的方法,不用纠结它的名称会不会变:
' 把这个变量声明为模块级公共变量,这样打印宏也能直接调用 Public copiedDBSheet As Worksheet Sub CopyDBMainSheet() ' 复制工作表的同时,直接把新表对象赋值给变量 Set copiedDBSheet = ThisWorkbook.Sheets("DB_Main").Copy(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) End Sub
如果是事后(比如复制完之后再点击打印按钮)要找这个表,也可以遍历工作表匹配名称,避免多次复制后名称变成DB_Main (3)这类情况:
Dim copiedSheet As Worksheet For Each ws In ThisWorkbook.Sheets ' 匹配带括号的DB_Main副本 If InStr(ws.Name, "DB_Main (") > 0 Then ' 因为复制是放在最后,所以取索引最大的那个(最新复制的) If copiedSheet Is Nothing Or ws.Index > copiedSheet.Index Then Set copiedSheet = ws End If End If Next ws
二、实现指定页码的打印功能
给Main工作表的按钮绑定下面这个宏就行,它会精准打印两个工作表的指定页码:
Sub PrintTargetSheets() On Error GoTo HandleError Dim originalSheet As Worksheet Set originalSheet = ThisWorkbook.Sheets("DB_Main") Dim copiedSheet As Worksheet ' 优先用之前复制时存的模块级变量 If Not copiedDBSheet Is Nothing Then Set copiedSheet = copiedDBSheet Else ' 备用方案:按名称查找(适合只复制一次的场景) Set copiedSheet = ThisWorkbook.Sheets("DB_Main (2)") End If ' 打印原表第4、5页 originalSheet.PrintOut From:=4, To:=5 ' 打印复制表第4-7页 copiedSheet.PrintOut From:=4, To:=7 Exit Sub HandleError: MsgBox "打印出错:" & Err.Description, vbExclamation End Sub
补充说明:
PrintOut方法的From和To参数就是用来指定打印的起始和结束页码,完全贴合你的需求。- 加了错误处理是为了避免工作表不存在等情况导致程序崩溃,更友好。
- 绑定宏的方法:右键Main工作表上的按钮 → 选择「指定宏」→ 选中
PrintTargetSheets确定即可。
内容的提问来源于stack exchange,提问作者Savvas Antoniou
相关产品推荐
相关产品推荐

