2017-07-07 638 views
2

我有一本工作手冊,其中包含許多宏,可以將各種工作表導出爲pdf,並保存工作簿。Excel宏 - 導出爲PDF

我的問題是,如果工作簿保存在桌面上的文件夾中,則生成的PDF就好了。

當工作簿保存在網絡位置時,pdf不會生成。下面是宏的一個樣本:

Sub PDF_CStmtP() 

    Application.ScreenUpdating = False 

    ThisWorkbook.Sheets(Array("C Stmt - P")).Select 

    pdfname = fileSaveName 
    ChDir ActiveWorkbook.Path & "\" 
    fileSaveName = "Closing Statement (Purchase)" 

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
     fileSaveName _ 
     , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ 
     :=False, OpenAfterPublish:=False 

    Application.ScreenUpdating = True 

    ActiveWorkbook.Sheets("Main Menu").Activate 

    MsgBox "File Saved " & " " & fileSaveName 
End Sub 
+0

僅供參考,'pdfname'(你永遠不會使用)將是空/空,因爲你定義在'fileSaveName'之前給出一個值。另外,沒有錯誤是正確的?嘗試將'fileSaveName'改爲''K:\ Closing Statement(Purchase)「'(假設'K:\是一個網絡文件夾)。你可能必須通過那裏的完整路徑。 – BruceWayne

+0

我試圖避免這種情況,因爲我打開了一個啓用宏的模板,然後將其作爲啓用宏的工作簿保存在我們工作的每個文件的不同位置。所以路徑每次都會改變。 (很高興見到你蝙蝠俠) – Ryan

+1

是的,我知道它每次都會改變 - 這只是一個快速檢查,看看問題是否與文件名或其他。如果你把路徑直接放在文件名中,並且它仍然沒有保存在你期望的地方,那麼這是另一回事。如果它*是*保存,那麼只需要添加一行或兩行即可包含完整路徑。 – BruceWayne

回答

2

你的問題是CHDIR命令,在這裏看到了一個解釋:https://www.techonthenet.com/excel/formulas/chdir.php

這樣做的重要組成部分,是「CHDIR語句讓你改變當前目錄當前驅動器,如果您需要更換驅動器,請首先嚐試使用CHDRIVE語句。「

當您嘗試保存到網絡驅動器時,您正在將驅動器盤符從C:\更改爲網絡驅動器映射到的任何地方,在我的情況下它是U:\。

簡單的修復你的代碼是到Path從CHDIR移動到剛剛在文件名之中,所以你的代碼應該是這樣的:

Sub PDF_CStmtP() 

Application.ScreenUpdating = False 

ThisWorkbook.Sheets(Array("C Stmt - P")).Select 

pdfname = fileSaveName 
'ChDir ActiveWorkbook.Path & "\" 
fileSaveName = ActiveWorkbook.Path & "\" & "Closing Statement (Purchase)" 

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= fileSaveName, _ 
Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
IgnorePrintAreas:=False, OpenAfterPublish:=False 

Application.ScreenUpdating = True 

ActiveWorkbook.Sheets("Main Menu").Activate 

MsgBox "File Saved " & " " & fileSaveName 
End Sub 

有你可以爲清理一些其他修改但這將解決手頭的問題。

**根據有關消息框中的評論,你可以將代碼改成這樣:

Sub PDF_CStmtP() 

Application.ScreenUpdating = False 

ThisWorkbook.Sheets(Array("C Stmt - P")).Select 

pdfname = "Closing Statement (Purchase)" 
'ChDir ActiveWorkbook.Path & "\" 
fileSaveName = ActiveWorkbook.Path & "\" & pdfname 

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= fileSaveName, _ 
Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
IgnorePrintAreas:=False, OpenAfterPublish:=False 

Application.ScreenUpdating = True 

ActiveWorkbook.Sheets("Main Menu").Activate 

MsgBox "File Saved " & " " & pdfname 
End Sub 
+0

這工作,並解決了這個問題,與消息框具有整個文件路徑,但至少它的工作有點笨重。 – Ryan

+0

生病讓我試試,現在我有解決方案,我有大量的宏工作,沒有足夠的時間在一天。謝謝大家的幫助,生病讓你知道它是怎麼回事。 – Ryan