如果工作表名称出现在单元格范围内,则 select
If worksheet name appears within range of cells then select
我希望能够将多个特定工作表保存为 PDF。
我目前有这个有效的代码:
Sheets(Array("Print - Cover", "Print 2.2")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFile,Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=OpenPDFAfterCreating
这会将工作表 "Print - Cover" 和 "Print 2.2" 按预期保存为 PDF。我不想对工作表名称进行硬编码,而是希望保存其名称存在于单元格范围内的工作表。
例如在我的 ActiveSheet 的单元格 A1:A3
中,我可以有 蜜蜂、猫和狗 ,宏会
- select 工作表 "Bee"、"Cat" 和 "Dog"、
- 但不是 "Pig",它作为工作表存在但未列出。
列出的张数可能会增加或减少。
这样做的目的是让用户可以轻松地指出他们想要保存哪些工作表,而无需编辑宏。
我在工作表 1 的第二行开始使用 B 列作为要导出为 PDF 的工作表列表。
Sub PDF_from_Range(Optional OpenPDFAfterCreating As Boolean = False)
Dim v As Long, vWSs As Variant, PDFFile As String
PDFFile = Environ("TEMP") & Chr(92) & "pdf_print_test"
With Worksheets("Sheet1")
ReDim vWSs(0)
For v = 2 To .Cells(Rows.Count, "B").End(xlUp).Row
vWSs(UBound(vWSs)) = .Range("B" & v).Value2
ReDim Preserve vWSs(0 To UBound(vWSs) + 1)
Next v
ReDim Preserve vWSs(0 To UBound(vWSs) - 1)
End With
Worksheets(vWSs).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFile, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=OpenPDFAfterCreating
End Sub
一维数组可以轻松搞定工作表名称的集合。可以轻松引入错误控制,以确保 B 列中命名的工作表存在于当前工作簿中。
这是一个包含错误处理的简单方法:
Sub PrintPDFs()
Dim i&, n$, s$, v
v = [a1:a3]
On Error Resume Next
For i = 1 To UBound(v)
n = Worksheets(v(i, 1)).Name
If Len(n) Then s = s & "," & n
n = ""
Next
If Len(s) Then
Worksheets(Split(Mid$(s, 2), ",")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFile, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=OpenPDFAfterCreating
End If
End Sub
注意:您可以编辑方括号顶部的列表范围。
我希望能够将多个特定工作表保存为 PDF。
我目前有这个有效的代码:
Sheets(Array("Print - Cover", "Print 2.2")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFile,Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=OpenPDFAfterCreating
这会将工作表 "Print - Cover" 和 "Print 2.2" 按预期保存为 PDF。我不想对工作表名称进行硬编码,而是希望保存其名称存在于单元格范围内的工作表。
例如在我的 ActiveSheet 的单元格 A1:A3
中,我可以有 蜜蜂、猫和狗 ,宏会
- select 工作表 "Bee"、"Cat" 和 "Dog"、
- 但不是 "Pig",它作为工作表存在但未列出。
列出的张数可能会增加或减少。
这样做的目的是让用户可以轻松地指出他们想要保存哪些工作表,而无需编辑宏。
我在工作表 1 的第二行开始使用 B 列作为要导出为 PDF 的工作表列表。
Sub PDF_from_Range(Optional OpenPDFAfterCreating As Boolean = False)
Dim v As Long, vWSs As Variant, PDFFile As String
PDFFile = Environ("TEMP") & Chr(92) & "pdf_print_test"
With Worksheets("Sheet1")
ReDim vWSs(0)
For v = 2 To .Cells(Rows.Count, "B").End(xlUp).Row
vWSs(UBound(vWSs)) = .Range("B" & v).Value2
ReDim Preserve vWSs(0 To UBound(vWSs) + 1)
Next v
ReDim Preserve vWSs(0 To UBound(vWSs) - 1)
End With
Worksheets(vWSs).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFile, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=OpenPDFAfterCreating
End Sub
一维数组可以轻松搞定工作表名称的集合。可以轻松引入错误控制,以确保 B 列中命名的工作表存在于当前工作簿中。
这是一个包含错误处理的简单方法:
Sub PrintPDFs()
Dim i&, n$, s$, v
v = [a1:a3]
On Error Resume Next
For i = 1 To UBound(v)
n = Worksheets(v(i, 1)).Name
If Len(n) Then s = s & "," & n
n = ""
Next
If Len(s) Then
Worksheets(Split(Mid$(s, 2), ",")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFile, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=OpenPDFAfterCreating
End If
End Sub
注意:您可以编辑方括号顶部的列表范围。