Excel VBA - 导出为PDF

3

首先,我是新手,请多多关照。

我创建了一个摘要工作簿,使用宏从文件夹中的多个工作簿中选择特定范围("A19:W105")并将值复制到摘要工作簿中。此范围中的数据量会变化,有时可能只有 1 行,有时最多可达 86 行。以下是代码,效果很好:

 With wsMaster
            erow = .Range("B" & .Rows.Count).End(xlUp).Row
            wsTemp.Range("A19:W105").Copy
            .Range("B" & erow).Offset(1, 0).PasteSpecial xlPasteValues
 End With

然后我创建了一个命令按钮来将汇总工作簿保存为PDF。现在我的问题是,代码中选择了所有复制过来的空单元格。这导致生成的PDF文件有多页,即使只有1或2页实际上有数据。以下是该代码:

Dim lastrow As Long
DateStr = Format(Date, "yyyy-mm-d")

lastrow = Cells(Rows.Count, 2).End(xlUp).Row
Range("B1:X" & lastrow).ExportAsFixedFormat Type:=xlTypePDF,_ 
        Filename:="K:\AALI\Forecasts\Exported PDF Summary Sheets\"_
        & "(" & DateStr & ") " & "MR Forecast and Budget Summary" & "_" _
        & Comment, Quality:=xlQualityStandard, IncludeDocProperties:=True,_
        IgnorePrintAreas:=False, OpenAfterPublish:=True

有没有一种方法只选择具有实际信息的范围?
更新1: 附上工作表的屏幕截图。数据最后一行下方的所有内容都是“空白”(没有公式或文本),但是当宏从其他文件复制信息时,由于IFERROR公式的结果,某些值为空白。这会有影响吗?另外,在复制数据时,我已将排序功能编码到宏中,这样有问题吗?
文件屏幕截图:
感谢!

你能提供一张截图吗?数据之间有空行吗?数据之后有空行吗? - user6432984
2个回答

1
首先,通过任何不包含空白的列来找出最后一个具有数据的位置。如果您想使用Rows.count来获取最后一个已使用行,请确保保存数据的整个工作表为空白(除了数据之外不应该有任何内容)。
Dim lastrow As Long

If ActiveSheet.Range("B2").Value = "" Then
lastrow = 2
Else
lastrow = Range("B1").End(xlDown).Row
End If
Range("B1:X" & lastrow).Select
Selection.ExportAsFixedFormat xlTypePDF, _
    Filename:=ThisWorkbook.Path & "\Test.pdf"

使用不含空白单元格的列替代范围对象中的“B”来查找数据的结尾,并更改PDF文件的位置和名称。

我仍然在PDF上看到了多个页面。请参见更新以获取更多信息。在本例中,第38行之后的所有行都为空,但似乎存在与之相关联的值(例如,即使在该范围内没有与之相关联的值,“Ctrl”+“Shift”+“Down”也会找到高达第618行的“值”)。 - RSpence
尝试清洗和修剪数据。 - Aditya Pansare

0
隐藏空行并将IgnorePrintAreas设置为True即可解决问题。
Dim x As Long, lastrow As Long
Dim DateStr As String


lastrow = Cells(Rows.Count, 2).End(xlUp).Row
For x = 1 To lastrow

    If WorksheetFunction.CountA(Rows(x)) = 0 Then Rows(x).Hidden = True

Next

DateStr = Format(Date, "yyyy-mm-d")
Range("B1:X" & lastrow).ExportAsFixedFormat Type:=xlTypePDF, _
        FileName:="K:\AALI\Forecasts\Exported PDF Summary Sheets\" _
        & "(" & DateStr & ") " & "MR Forecast and Budget Summary" & "_" _
        & Comment, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=True, OpenAfterPublish:=True

同样的问题出现了,我已经在描述中添加了更新。同时,我也会重申我在 Aditya 的帖子下留言的评论:在这种情况下,38行以后的所有行都是空白的,但它表现出好像与一个值相关联(例如,Ctrl + Shift + 下箭头在找到与该范围关联的“值”时一直查找到第618行,尽管没有任何与该范围相关联的值)。 - RSpence
你确定没有空格吗?我会删除38行之后的所有行,然后保存电子表格。 - user6432984

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接