如何使用VBA制作Excel打印选择性选项卡?

如何使用VBA制作Excel打印选择性选项卡?,vba,excel,Vba,Excel,我已经对Excel工作簿进行了编码,以便一次打印出我需要的所有选择表。然而,有时我只需要它来打印特定的纸张,而不是所有的纸张。是否有一种方法,在我打印之前,我可以让我的代码询问我想要打印的纸张范围,这样我就不会在只需要7张时得到全部45张?先谢谢你 克里斯 子打印工作表() Application.ScreenUpdating=False 将ws设置为工作表 对于此工作簿中的每个ws。工作表 如果ws.Name是“反馈数据”,那么 如果ws.Visible=xlSheetVisible,则 打印

我已经对Excel工作簿进行了编码,以便一次打印出我需要的所有选择表。然而,有时我只需要它来打印特定的纸张,而不是所有的纸张。是否有一种方法,在我打印之前,我可以让我的代码询问我想要打印的纸张范围,这样我就不会在只需要7张时得到全部45张?先谢谢你

克里斯

子打印工作表()
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