【问题标题】:Is there a way to specify PDF range by Sheet name in Excel through VBA?有没有办法通过 VBA 在 Excel 中按工作表名称指定 PDF 范围?
【发布时间】:2020-05-02 08:33:15
【问题描述】:

因此,在下面的示例代码中,它可以通过指定工作表 # 在 Excel 中对特定工作表进行 PDF 处理,但是有没有办法通过工作表名称而不是数字来指定 PDF 范围?

Sub createPdf()

Dim SheetArr() As String
Dim i As Integer
Dim startSheet As Integer
Dim endSheet As Integer

startSheet = 1
endSheet = 2
Dim folderPath As String
folderPath = "C:\Users\xxxx\Desktop\Pdfs" 'change to your 
user.
MkDir (folderPath)

For Each ws In ThisWorkbook.Worksheets 'This statement 
starts the loop
If ws.Index >= startSheet And ws.Index <= endSheet Then ' <> 
"Sheet3" Then
    ReDim Preserve SheetArr(i)
    SheetArr(i) = ws.Name

    i = i + 1
    Debug.Print (ws.Name)

End If
Next

Sheets(SheetArr).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, 
Filename:=folderPath & "\Sales", _
openafterpublish:=False, ignoreprintareas:=False

MsgBox "All done with pdf's"

End Sub

【问题讨论】:

  • 这能回答你的问题吗? Save multiple sheets to .pdf
  • 嗨,谢谢您的输入,但不完全是,因为这是按名称指定工作表以供选择,而不是按名称指定工作表作为范围的两端。
  • 好吧,我误解了你的问题。
  • 每个工作表是否有不同的范围,您想打印到 .pdf?是否有您不想打印的工作表?您是否尝试仅打印工作簿中的一个特定工作表?
  • 是的,因此 pdf 的页数根据 PDF 开始和结束选项卡的位置是动态的。

标签: excel vba pdf


【解决方案1】:

如果我理解正确,你想通过改变这个来开始这个子:

startSheet = 1
endSheet = 2

到工作表名称而不是它们的索引号。这可以通过添加工作表作为参考来轻松完成,并让代码从中获取索引,方法是将上面的内容替换为:

startSheet = Sheets("Start sheet name here").Index
endSheet = Sheets("End sheet name here").Index

其余代码将像以前一样运行。

请注意,不要硬编码,你也可以用一个简单的输入框来代替:

startSheet = Sheets(InputBox("Sheet name?", "CreatePDF")).index

这可以使它更易于访问和用户友好,而不必一直弄乱 VBA 代码。

【讨论】:

  • 您好,谢谢您提供的信息,但在将其替换为 startSheet = Sheets("此处开始工作表名称").Index, endSheet = Sheets("此处结束工作表名称").Index 之后,我是出现运行时错误“9”:订阅超出范围错误。
  • 您是否将文本“在此处开始工作表名称”替换为要开始的工作表的实际名称? (注意:这需要在“引号”中)请确保拼写正确。
  • 是的,把它们放在引号里
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 2022-11-02
相关资源
最近更新 更多