【发布时间】:2010-07-14 07:31:22
【问题描述】:
我正在尝试创建一个宏来选择工作簿中的大部分工作表,然后使用 ExportAsFixedFormat 将它们打印为 PDF。
问题是,虽然我知道我不想想要包含的工作表,但我不知道在给定时间哪些工作表将到位,所以我无法制作“选择这些工作表”的静态列表(无论如何维护可能会很痛苦)。
有没有办法,比如“全选然后取消选择这些特定的工作表”或类似的东西?
【问题讨论】:
我正在尝试创建一个宏来选择工作簿中的大部分工作表,然后使用 ExportAsFixedFormat 将它们打印为 PDF。
问题是,虽然我知道我不想想要包含的工作表,但我不知道在给定时间哪些工作表将到位,所以我无法制作“选择这些工作表”的静态列表(无论如何维护可能会很痛苦)。
有没有办法,比如“全选然后取消选择这些特定的工作表”或类似的东西?
【问题讨论】:
怎么样:
Dim s As Worksheet
DoNotInclude = "Sheet2"
For Each s In ActiveWorkbook.Worksheets
If InStr(DoNotInclude, s.Name) = 0 Then
''Do something
End If
Next
【讨论】:
''Do something 部分。是的,您可以转到.Select False 将当前工作表添加到当前选定的工作表中,但请尝试适应不需要的工作表已经是活动工作表的情况。然后,此代码会将其包含在选择中。
没有。这并不妨碍您自己动手:
Public Sub SelectExceptThese(ByVal wb As Workbook, ExceptThese() As String)
Dim ws() As String
ReDim ws(1 To wb.Worksheets.Count)
Dim wt As Worksheet
Dim i As Long
For Each wt In wb.Worksheets
If Not IsInArray(ExceptThese, wt.Name) Then
i = i + 1
ws(i) = wt.Name
End If
Next
If i > 0 Then
ReDim Preserve ws(LBound(ws) To LBound(ws) + i - 1)
wb.Worksheets(ws).Select
End If
End Sub
Private Function IsInArray(arr() As String, val As String) As Boolean
Dim i As Long
For i = LBound(arr) To UBound(arr)
If arr(i) = val Then
IsInArray = True
Exit Function
End If
Next
End Function
【讨论】:
这可能有点太晚了,但可能对其他人有帮助。
如果您知道不想导出哪些工作表并且如果这些工作表始终相同,则可以执行以下操作..
Sheets("sheetnotincluded1").Visible = False
Sheets("sheetnotincluded2").Visible = False
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"FilePath.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
Sheets("sheetnotincluded1").Visible = True
Sheets("sheetnotincluded2").Visible = True
您只是隐藏不需要的工作表、导出活动工作簿并取消隐藏不需要的工作表。
【讨论】: