Excel - 为数组公式覆盖的一系列单元格设置动态打印区域

时间:2017-01-28 15:43:57

标签: arrays excel excel-vba excel-formula vba

我有一个带有页面的电子表格(表3),我想将其导出为PDF(使用宏导出pdf)。

目前,这会链接到另一个工作表,用户可以在其中放入日期范围以从较大的工作表中提取相关数据。这使用以下数组公式来填充工作表3上的数据:

=IFERROR(INDEX(Sheet1!$V$3:$W$5998,SMALL(IF((Sheet1!$C$3:$C$5998>=Crynodeb!$D$3)*(Sheet1!$C$3:$C$5998<=Crynodeb!$F$3)*(Sheet1!$V$3:$V$5998<>""),ROW(Sheet1!$V$3:$W$5998)-2),ROW(18:18)),1),"")

Sheet 3上的数组公式已应用于大约6000行数据。因此,有可能返回6000行数据。但是,根据用户输入的标准,可能只返回5行数据。

除此之外,我还将单元格格式应用于6000行,以便在数据行之间存在打印友好的行。

但是,由于这已经应用于6000行数据,因此可能会导出61个左右的页面,而实际上只显示一页数据。

是否有一种简单的方法可以继续在大范围内应用数组公式,同时将打印功能限制为仅应用于包含从数组公式返回的数据的页面?

我也在使用格式&gt; AutoFit Row Height 功能可根据返回项目的长度调整行高,但此时我认为每次返回数据时都必须手动执行此操作。有没有办法自动应用它来调整页面内容?

非常感谢

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

由于您希望通过宏将数据导出为PDF,我们可以将您想要的所有内容放入该宏中。

宏需要找到具有值的范围。从你的例子中,我假设总会有从A3开始返回的数据;然后在数据结束之前,A列中不会出现空白。

因此,这个宏从A3开始并查看每个单元格,直到它找到一个空白值来确定数据的结束位置。

我还假设您拥有固定数量的数据列。我只能看到2列,所以我在宏中使用了这个数字。您可以将指示的代码更新为实际的列数。

然后,从A1到数据的最后一行和一列,它会自动对行进行自动调整,然后将该范围保存为PDF。

Public Sub SaveCopy()

Dim intLastRow As Integer

'Loops through column A to find last row with data
intLastRow = 3
Do While Cells(intLastRow + 1, 1).Value <> ""
    intLastRow = intLastRow + 1
Loop

'With the range of data...
'NOTE: REPLACE '2' WITH ACTUAL NUMBER OF COLUMNS OF DATA
With Range("A1", Cells(intLastRow, 2))

    'Ensure text is wrapping - required to autofit
    .WrapText = True

    'Autofit row height
    .Rows.AutoFit

    'Save as PDF
    .ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ThisWorkbook.FullName, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

End With

End Sub

这是一个基本导出,只是将PDF保存到与文件相同的位置并使用相同的文件名(包括excel文件扩展名),只需附加.PDF文件扩展名。

有多种选项可用于处理PDF的文件名和位置。随着有关所需内容的更多信息,我可以帮助提供强大的解决方案。

或者,您可以删除导出为PDF的代码行,并将其替换为“.Select”

这将选择数据范围,然后您可以手动保存为PDF。只需使用另存为...将类型更改为PDF,单击选项,然后在“发布内容”部分中选择“选择”。

Saving as PDFT

如果我的任何假设不正确,请告诉我。