2017-04-05 68 views
1

我在Excel中有一個表,並有一個宏將ActiveSheet保存爲PDF。反正我可以:從Excel中動態保存PDF

  • 選擇要打印的列。現在我只是隱藏它們。
  • 使用同一個名稱保存多個PDF,並使用唯一的SKU連接:name_SKU.pdf
  • 過濾「SKU」列並保存該SKU的pdf並自動轉到下一個唯一SKU並保存pdf的方法等等。

目前我手動過濾SKU列,每次點擊「保存PDF」宏。我想把這個任務減少到一個單一的點擊。

+0

這當然是可以做到的。如果他們能夠看到現有的代碼,那麼有人會更容易向您展示如何修改現有的代碼。請將代碼粘貼到問題中,否則您會發現您的問題被拒絕提供。 – YowE3K

回答

1

有幾種方法可以做到這一點。

首先,你可以使用此功能每張打印區域保存爲PDF格式:

此功能需要在文件名,可以從單元格的值,只要你想被解析,文件夾路徑保存和表PDF文件,打印區域從中被取出。

Function PrintToPDF(fileName As String, folderPath As String, ByVal currentSheet As Worksheet) 

currentSheet.Range(currentSheet.PageSetup.PrintArea).ExportAsFixedFormat Type:=xlTypePDF, fileName:= _ 
folderPath & fileName & "_SKU.pdf", Quality:=xlQualityStandard, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 

End Function 

現在,您可以編輯代碼位通過添加額外的參數功能,只打印的定製範圍:

Function PrintToPDF(fileName As String, folderPath As String, ByVal currentSheet As Worksheet, printRange As String) 

currentSheet.Range(printRange).ExportAsFixedFormat Type:=xlTypePDF, fileName:= _ 
folderPath & fileName & "_SKU.pdf", Quality:=xlQualityStandard, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 

End Function 

要使用此功能,做這樣的事情:

Sub test() 
    Call PrintToPDF("name", "C:/Path/To/Folder/", Worksheets(1)) 
End Sub 

或在第二種情況下:

Sub test() 
    Call PrintToPDF("1", "C:/Path/To/Folder/", Worksheets(1), "A1:C20") 
End Sub 

現在讓我們說你有一個名字值和張數表(和範圍,如果你不希望使用打印區域):

TEST1 1 
TEST2 2 
TEST3 3 

然後通過你的價值觀在此表中循環,並呼籲與功能單元格值作爲參數:

Sub test() 
    For i = 1 To Sheets(1).UsedRange.Rows.Count 
     Call PrintToPDF(Sheets(1).Cells(i, 1).Value, "C:/Path/To/Folder/", Worksheets(Sheets(1).Cells(i, 2).Value)) 
    Next i 
End Sub 

或者您想如何定義您的名稱/圖紙/範圍範圍。

希望這會有所幫助!