【问题标题】:Check boxes in user form to select sheets to print用户表单中的复选框以选择要打印的工作表
【发布时间】:2016-02-28 03:15:32
【问题描述】:

我有代码可以选择要打印到 pdf 文档的工作表数组,但是我正在尝试使用与特定工作表相对应的一系列复选框来实现用户表单。

以下代码选择预先确定的工作表数组并将它们打印为 pdf

Sub PDFAllSheets_Click()

Dim ws As Worksheet
Dim strPath As String
Dim myfile As Variant
Dim strFile As String
Dim sheetstoprint As String

On Error GoTo errHandler

Set ws = ActiveSheet

strFile = "E_CALC_" & Worksheets("Contents").Range("H7").Text & ".pdf"

strFile = ThisWorkbook.Path & "\" & strFile

myfile = Application.GetSaveAsFilename _
    (InitialFileName:=strFile, _
    FileFilter:="PDF Files (*.pdf), *.pdf", _
    title:="Select Folder and FileName to save")

If myfile <> "False" Then

    ThisWorkbook.Sheets(Array("Engine", "CHP Layout", "Ventilation", "Exhaust", "Gas", "Hazardous Zoning", "Gas Ramp up", "Steam Boilers", _
                        "JW PU", "AC PU", "Combustion", "BREEAM NOx", "Pump P1", "Pump P2", "Pump P3", "Pump P4", "Pump P5")).Select

    ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    FileName:=myfile, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=True

    MsgBox "PDF file has been created."

End If

exitHandler:
Exit Sub

errHandler:
MsgBox "Could not create PDF file", vbRetryCancel, "Oops!"

Resume exitHandler

End Sub

我需要以下用户窗体的复选框来定义要包含在数组中的工作表。

UserForm1

【问题讨论】:

  • 它必须是复选框还是所有工作表的列表框,用户可以在其中选择多个工作表,也可以工作?
  • 我对ListBox功能不熟悉,但如果它能够完成任务,我一定会试一试。
  • 我正在使用 ListBoxes 显示我的所有工作表,然后用户可以选择他们想要导出为 PDF 的工作表,可以是合并的 PDF 文件,也可以是单独文件中的所有工作表。跨度>
  • 马上来
  • 当我在 ListBox 设置中将 MultiSelect 设置为 1 - fmMultiSelectMulti 时,我已设法将单个工作表从我的 ListBox 导出为 pdf,但它似乎不起作用。我应该在上面的代码中使用 Worksheets(Array(ListBox1.Value)).Select 吗?

标签: vba excel checkbox pdf-generation userform


【解决方案1】:

如果您有一个带有 ListBox 和 CommandButton 的用户窗体,这应该可以工作,假设您有按您指定的名称命名的工作表。

此代码当然应该添加到用户窗体代码模块中。

Private Sub CommandButton1_Click()

Dim SheetArray() As Variant
Dim indx As Integer

Dim ws As Worksheet
Dim strPath As String
Dim myfile As Variant
Dim strFile As String
Dim sheetstoprint As String

On Error GoTo errHandler

Set ws = ActiveSheet

strFile = "E_CALC_" & Worksheets("Contents").Range("H7").Text & ".pdf"

strFile = ThisWorkbook.Path & "\" & strFile

myfile = Application.GetSaveAsFilename _
    (InitialFileName:=strFile, _
    FileFilter:="PDF Files (*.pdf), *.pdf", _
    Title:="Select Folder and FileName to save")

If myfile <> "False" Then

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    indx = 0
    For i = 0 To ListBox1.ListCount - 1
            If ListBox1.Selected(i) = True Then
                ReDim Preserve SheetArray(indx)
                SheetArray(indx) = Sheets(ListBox1.List(i, 1)).Index
                indx = indx + 1
            End If
    Next i

    If indx > 0 Then

            Sheets(SheetArray()).Select
                ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                Filename:=myfile, _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, _
                OpenAfterPublish:=True


                '.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True


    End If
End If
exitHandler:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub

errHandler:
MsgBox "Could not create PDF file", vbRetryCancel, "Oops!"

Resume exitHandler
End Sub

Private Sub UserForm_Initialize()

Dim wks() As Variant


wks = Array("Engine", "CHP Layout", "Ventilation", "Exhaust", "Gas", "Hazardous Zoning", "Gas Ramp up", "Steam Boilers", _
                        "JW PU", "AC PU", "Combustion", "BREEAM NOx", "Pump P1", "Pump P2", "Pump P3", "Pump P4", "Pump P5")

'Debug.Print wks(16)
For i = 0 To UBound(wks)

        ListBox1.AddItem wks(i)
        ListBox1.List(ListBox1.ListCount - 1, 1) = wks(i)

Next i


End Sub

记得在列表框属性窗口中允许列表框多选。

编辑: 在我的测试过程中,Excel 应用程序似乎在导出 PDF 后冻结。我不知道这是否与将 OpenAfterPublish 属性设置为 True 有任何关系,因为我一直将其设置为 False。

编辑2:

我的错,只是因为用户窗体仍然打开...

【讨论】:

  • 我做到了,完美!再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多