首页 > 解决方案 > PDF每个命名范围到单个页面 - VBA

问题描述

我有一个 excel 模型,可以根据用户的输入动态更改范围的数量和名称。然后将所有命名范围填充到参考选项卡上,它们的位置位于相应的单元格中。我需要编写一个宏,将单个页面上的每个命名范围都转换为 PDF,但作为单个 PDF 文件。

我已经尝试了所有可以找到显示 PDF 范围的各种方法的论坛,但没有任何方法可以统一解决两个特定问题:

1) 命名范围的数量会动态变化。我不能在我的 VBA 代码中静态命名它们。2) 命名范围位于 10 个单独的工作表上。3) 一些工作表上有多个命名范围。它并不总是一对一的,这意味着我需要它来 PDF 来自同一张表的多个命名范围,但结果仍然必须是每个 PDF 页面的一个命名范围。

有人可以帮助我获取以下列表并实现我的目标,即为每个命名范围创建一个具有单个页面的 PDF 文件吗?作为参考,我的命名范围表如下所示:

Named Range, Location

Range1, =Sheet1!$K$2:$R$21
Range2, =Sheet2!$K$2:$R$21
Range3, =Sheet3!$K$2:$R$21
Range4, =Sheet4!$K$2:$R$21
Range5, =Sheet5!$K$2:$R$21
Range6, =Sheet6!$K$2:$R$21
Range7, =Sheet7!$K$2:$R$21
Range8, =Sheet8!$K$2:$R$21
Range9, =Sheet9!$K$2:$R$21
Range10, =Sheet10!$B$2:$I$21
Range10, =Sheet10!$K$2:$R$21 

我在这个问题上尝试了多个角度。我试图将所有命名范围移动到一个选项卡,但这非常困难,因为命名范围具有不同的格式,这意味着它不像复制和粘贴那么简单。我很犹豫是否在这里显示任何代码,因为我尝试过的 20 次迭代离实现我的目标还差得很远。非常感谢任何关于如何做到这一点的结构性指导。

我希望的最终结果是一个宏,它可以从 Excel 工作簿中对所有命名范围进行 PDF,每个命名范围在 PDF 文件中都有自己的页面。

标签: excelvbapdf

解决方案


归功于@Tim Williams 的想法,我只是提供基本的骨架代码作为简单示例,以便根据要求进行修改。

Sub test()
Dim Rng As Range
Dim Ws As Worksheet, Wb As Workbook
Dim Nm As Name
Set Wb = Application.Workbooks.Add

    For Each Nm In ThisWorkbook.Names
    Set Rng = Nm.RefersToRange
    Set Ws = Rng.Worksheet
    With Ws.PageSetup
        .PrintArea = Rng.Address
        ' may set other pagesetup properties according to requirement
    End With
    Ws.Copy After:=Wb.Sheets(Wb.Sheets.Count)
    Next Nm

Wb.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\user\Documents\Range to PDF.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
Wb.Close False
Set Wb = Nothing
End Sub

推荐阅读