首页 > 解决方案 > 使用 VBA 选择一系列工作表

问题描述

我想在 VBA 中编写一个打印宏,它将打印到 pdf 中的所有工作表,包括一个名为“开始”的工作表和一个名为“结束”的工作表。我不想使用所有工作表名称,因为如果在“开始”和“结束”之间插入新工作表,我希望代码能够工作。我基本上只需要选择工作表的代码。任何帮助,将不胜感激。

标签: excelvba

解决方案


请尝试以下方法;

Sub SaveBeginningToEnd()
    Dim wsBeginning As Worksheet
    Dim wsEnd As Worksheet
    On Error Resume Next
    Set wsBeginning = ThisWorkbook.Worksheets("Beginning")
    Set wsEnd = ThisWorkbook.Worksheets("End")
    On Error GoTo 0

    If wsBeginning Is Nothing Then
        Debug.Print "Cannot find worksheet Beginning"
        Exit Sub
    ElseIf wsEnd Is Nothing Then
        Debug.Print "Cannot find worksheet End"
        Exit Sub
    ElseIf wsBeginning.Index > wsEnd.Index Then
        Debug.Print "Beginning Worksheet is after End Worksheet."
        Exit Sub
    End If

    Dim varSheets() As Long
    ReDim varSheets(wsEnd.Index - wsBeginning.Index)

    For i = wsBeginning.Index To wsEnd.Index
        varSheets(i - wsBeginning.Index) = i
    Next i

    ThisWorkbook.Sheets(varSheets).Select

    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogSaveAs)
    fd.AllowMultiSelect = False
    fd.Title = "Save As PDF"
    Dim intIndex As Integer
    For intIndex = 1 To fd.Filters.Count
        If fd.Filters(intIndex).Description = "PDF" Then fd.FilterIndex = intIndex
    Next
    If fd.Show = -1 Then
        ThisWorkbook.ExportAsFixedFormat xlTypePDF, fd.SelectedItems(1)
    End If

End Sub

推荐阅读