如何使用VBA制作Excel打印选择性选项卡?
我已经对Excel工作簿进行了编码,以便一次打印出我需要的所有选择表。然而,有时我只需要它来打印特定的纸张,而不是所有的纸张。是否有一种方法,在我打印之前,我可以让我的代码询问我想要打印的纸张范围,这样我就不会在只需要7张时得到全部45张?先谢谢你 克里斯如何使用VBA制作Excel打印选择性选项卡?,vba,excel,Vba,Excel,我已经对Excel工作簿进行了编码,以便一次打印出我需要的所有选择表。然而,有时我只需要它来打印特定的纸张,而不是所有的纸张。是否有一种方法,在我打印之前,我可以让我的代码询问我想要打印的纸张范围,这样我就不会在只需要7张时得到全部45张?先谢谢你 克里斯 子打印工作表() Application.ScreenUpdating=False 将ws设置为工作表 对于此工作簿中的每个ws。工作表 如果ws.Name是“反馈数据”,那么 如果ws.Visible=xlSheetVisible,则 打印
子打印工作表()
Application.ScreenUpdating=False
将ws设置为工作表
对于此工作簿中的每个ws。工作表
如果ws.Name是“反馈数据”,那么
如果ws.Visible=xlSheetVisible,则
打印输出
如果结束
如果结束
下一个ws
Application.ScreenUpdating=True
MsgBox“所有图表均已打印标记”
端接头
下面是一个用户表单的示例,其中我们使用文件中所有工作表的名称填充列表框
:
用户表单后面的代码
:
Dim i As Long
Private Sub UserForm_Initialize()
For i = 1 To ActiveWorkbook.Sheets.Count
ListBox1.AddItem ActiveWorkbook.Sheets(i).Name
Next i
End Sub
Private Sub btnPrint_Click()
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
ActiveWorkbook.Worksheets(ListBox1.List(i)).PrintOut
End If
Next i
End Sub
Private Sub btnCancel_Click()
Unload Me
End Sub
当然,还有其他方面,例如将列表框
的MultiSelect
属性更改为1
(以允许选择多个工作表),在我的示例中,我将我的按钮重命名为不切实际的按钮。但从理论上讲,这就是解决问题的方法 您可以尝试创建更多的子例程,每个子例程都有不同的预定义图纸集供选择。示例:
Public Sub selectSheets_1()
Dim arrayOfNames As Variant
arrayOfNames = Array(ws1.Name, ws2.Name, ws4.Name)
ThisWorkbook.Sheets(arrayOfNames).Select
End Sub
Public Sub selectSheets_2()
Dim arrayOfNames As Variant
arrayOfNames = Array(ws8.Name, ws15.Name, ws25.Name, ws35.Name, ws45.Name)
ThisWorkbook.Sheets(arrayOfNames).Select
End Sub
等等……
其中,ws#
是工作表的代码名。据我所知,实际上没有任何内置工具来选择要打印的工作表,除非您的页面是连续的,并且您不需要按名称显示。如果需要按名称进行选择,最好创建一个用户表单,在其中用所有工作表名称填充一个列表框(然后打印所选的名称),或者手动创建复选框,这可能会使45页的内容变得杂乱无章。@dwirony以前没有创建过很多用户表单,但是,如果你打算破解克里斯,你可以考虑让它看起来像是在快速访问工具栏尼斯解决方案DWRORY中添加东西的界面。但是,您可能需要将ActiveWorkbook.Worksheets.Count
更改为ActiveWorkbook.Sheets.Count
。否则,如果工作簿包含其他工作表,例如图表工作表,您可能会得到意外的结果。@Domenic Good call-我已进行更改。如果ListBox1.Selected(I)=True,则可以将减少为如果ListBox1.Selected(I)
@JohnyL Edited。
Public Sub selectSheets_1()
Dim arrayOfNames As Variant
arrayOfNames = Array(ws1.Name, ws2.Name, ws4.Name)
ThisWorkbook.Sheets(arrayOfNames).Select
End Sub
Public Sub selectSheets_2()
Dim arrayOfNames As Variant
arrayOfNames = Array(ws8.Name, ws15.Name, ws25.Name, ws35.Name, ws45.Name)
ThisWorkbook.Sheets(arrayOfNames).Select
End Sub