首先,我是新来的,所以请客气。
我创建了一个摘要工作簿,该工作簿使用宏从文件夹中的许多工作簿中选择特定范围(“ 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。我现在遇到的问题是,通过编写的代码,我还将选择所有已复制的空白单元格。即使只有1或2页中包含实际数据,这也会导致PDF文件的长度为多页。可以在下面找到此代码:
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公式,某些值将为空白。这有什么不同吗?另外,在复制数据时,我已经将排序函数编码到了宏中,这有什么问题吗?
文件的屏幕截图
谢谢!
最佳答案
首先借助将不包含任何空格的任何列来找出数据中最后一个。如果要使用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文件的位置和名称。