【问题标题】:Excel VBA Print multiple named range in seperate page of PDFExcel VBA在PDF的单独页面中打印多个命名范围
【发布时间】:2016-10-05 08:51:41
【问题描述】:

我有命名范围的列表,我将每个范围设置为适合单页。我使用以下代码导出为 PDF,并在其中合并为单个页面。

Dim wbBook As Workbook
Dim i As Integer
Dim rs As Range

Set wbBook = ActiveWorkbook
Set rs = wbBook.Names(1).RefersToRange
For i = 2 To wbBook.Names.Count
   Set rs = Union(rs, wbBook.Names(i).RefersToRange)
Next

rs.ExportAsFixedFormat xlTypePDF, strPath, , , False

但是当我手动输入范围名称时,下面的代码对我有用。而我的命名范围是动态的。我认为,上面的代码需要一些修改才能工作。有人能帮我完成这项工作吗?

Set rs = wbBook.Range("Page_1,Page_2,Page_3")
rs.Select
Selection.ExportAsFixedFormat xlTypePDF, strPath, , , False

建议的解决方案仍然给出一页。我在页面设置下方提供了,页面设置有问题吗?

With Sheet1.PageSetup
.PrintArea = Range(Cells(iBeginRow, 1), Cells(iRow + 2, 5)).Address
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlLandscape
.LeftMargin = Application.InchesToPoints(0)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.PrintQuality = 600
.FitToPagesWide = 1
.FitToPagesTall = 1
End With

然后我动态命名范围

Sheet1.Range(Cells(iBeginRow, 1), Cells(iRow + 2, 5)).Select
Selection.Name = "Page_" & PageNum

【问题讨论】:

  • 你遇到了什么错误,在哪一行?
  • 对不起,我的问题不清楚。这不是一个错误。我想在导出时保持每个命名范围的页面设置完整;因此每个命名范围数据反映在每个页面中。当我手动输入命名范围时,我能够做到这一点。我想将每个命名范围的原始页面设置保留在“rs”中并在第一组代码中导出。
  • 您是否在不同工作表中使用连续范围?
  • 我正在处理同一张表中的连续范围。

标签: excel vba dynamic range named


【解决方案1】:

以下 UDF 对我有用(我在一个模块中使用它):

Sub ExportRangeToPDF(ByVal WSName As String)

    Dim oRng As Range
    Dim strPath As String: strPath = "C:\temp\Temp\"
    Dim intCount As Integer

    For intCount = 1 To ActiveWorkbook.Names.Count

        If InStr(1, LCase(ActiveWorkbook.Names(intCount).RefersToRange.Name.Name), LCase(WSName)) > 0 Then

            If oRng Is Nothing Then
                Set oRng = Range(ActiveWorkbook.Names(intCount).RefersToRange.Name.Name)
            Else
                Set oRng = Union(oRng, Range(ActiveWorkbook.Names(intCount).RefersToRange.Name.Name))
            End If

        End If

    Next

    oRng.ExportAsFixedFormat xlTypePDF, strPath & "test.pdf", , , False

    Set oRng = Nothing

End Sub

注意:我正在处理的工作簿中有一些 'solver' 和 'filterdatabase' 范围,因此必须在工作之前为它们添加一些验证。如果您的工作簿中有任何此类范围,您可能必须这样做

【讨论】:

  • 建议的解决方案仍然在单个 PDF 文件中给出一页(三个命名范围数据合并在一起),而我需要在单个 PDF 文件中输出三页(对于每个命名范围)。我用每个命名范围的页面设置编辑了问题,页面设置有问题吗?注意:当手动传递所有命名范围时,我能够做到。
  • 这很奇怪,因为我得到了一个包含 3 页的 PDF 文件(每个范围 1 页)。您工作表上的范围是否重叠?
  • 不,你会检查我现在在问题中给出的当前页面设置吗?
  • 我认为页面设置不会影响命名范围(不过我可能是错的)。您是否有机会提供工作表的快照并突出显示范围?
  • 它对我有用。最初出现的问题是,我没有在第一个命名范围和其他命名范围之间留出任何空格(空白行)。这就是原因。它的工作。谢谢!
猜你喜欢
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 2019-12-05
  • 2017-10-01
  • 2019-06-09
  • 1970-01-01
相关资源
最近更新 更多