2016-09-30 154 views
3

首先我是新來的,所以請親切。Excel VBA - 導出爲PDF

我創建了一個摘要工作簿,它使用宏從文件夾中的多個工作簿中選擇特定範圍(「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公式,某些值爲空白。這是否有所作爲?另外,當複製數據時,我已經編寫了一個排序函數到宏中,這有什麼問題? Screenshot of file

謝謝!

+0

你能否提供截圖。數據之間是否有空行?數據後有空行嗎? – 2016-10-01 00:17:36

回答

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 
+0

發生同樣的問題。我添加了對描述的更新。此外,我還會重申我在Aditya的帖子下留下的評論: 在此實例中,超過38的所有行都是空白的,但表現得好像存在相關聯的值(即Ctrl + Shift + Down查找「值」直到第618行,即使沒有與該範圍相關的值 – RSpence

+0

您確定沒有空格嗎?我會刪除超過38的所有行,然後保存電子表格 – 2016-10-03 15:07:15

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文件的位置和名稱。

+0

我仍然可以在PDF上看到多個頁面。在這個例子中,超過38的所有行都是空白的,但是就好像有一個值相關聯(即_Ctrl_ + _Shift_ + _Down_發現'值'直到第618行,即使沒有與之關聯的值該範圍 – RSpence

+0

嘗試使用CLEAN和TRIM數據。 –