2010-12-17 21 views
1

は、ファイル名属性に "GetFullNamePDFを()" 合格しようとするが、次のエラーを取得: "エラーコンパイル:予想End Subの" 私が知っているVBAエラー: "コンパイルエラー:予想End Subの"

Sub PrintPDF() 

    Function GetFullNamePDF() As String 
     GetFullNameCSV = Replace(ThisWorkbook.FullName, ".xlsm", ".pdf") 
    End Function 

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
     "GetFullNamePDF()", Quality:=xlQualityStandard, IncludeDocProperties _ 
     :=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 

End Sub 

をVBAについては何も言わず、上記のコードをquestion I asked yesterdayから手に入れましたが、当時はテストできませんでした。関数が追加されずにコードが機能し、ファイルパス/名前がハードコードされているので、エラーを推測することは関数と関係しています。

コードのアイデアは、PDFのパスとファイルに名前を付けるために、ファイル名を動的に使用することです。ご質問がありましたら、ただコメントしてください - ありがとう!

答えて

3

ネストすることはできませんプロシージャ内の機能。あなたは上に移動する必要があります:

Function GetFullNamePDF() As String 
    GetFullNameCSV = Replace(ThisWorkbook.FullName, ".xlsm", ".pdf") 
    'This should be 
    GetFullNamePDF = Replace(ThisWorkbook.FullName, ".xlsm", ".pdf") 
End Function 

Sub PrintPDF() 

    'Remove the quotes from GetFullNamePDF 
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
     GetFullNamePDF(), Quality:=xlQualityStandard, IncludeDocProperties _ 
     :=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 

End Sub 
+0

コードを読んで、すべてが正しいことを確認する時間をとってくれてありがとう。私のコードは私のコードが優れていると言うが、ExcelのVBAは一度も使用していなかった。 – blunders

+0

作品、ちょうどそれを試して、感謝! – blunders

1

サブ内に関数を宣言することはできません。 それは次のようになります。このよう

Function GetFullNamePDF() As String 
    GetFullNamePDF = Replace(ThisWorkbook.FullName, ".xlsm", ".pdf") 
End Function 


Sub PrintPDF() 
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
     "GetFullNamePDF()", Quality:=xlQualityStandard, IncludeDocProperties _ 
     :=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 
End Sub 
1

Function GetFullNamePDF() As String 
    GetFullNamePDF = Replace(ThisWorkbook.FullName, ".xlsm", ".pdf") 
End Function 

Sub PrintPDF() 
    Dim sFileName As Variable 

    sFileName=GetFullNamePDF() 

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

End Sub 
+0

@Remou:コードには「sFilename」への参照はありませんが、動作するとは思わないでしょう。 – blunders

+0

@Blunder私はこの機能を書いたことを忘れていますか?私はVBAに非常に精通しています(VBAタグのユーザーをチェックしてください)。関数の結果に変数を設定することは決して珍しいことではなく、デバッグをはるかに容易にします。関数の書き換えにエラーがありますが、これを修正します。 – Fionnuala

+0

@Remou:正しいです、それはうまくいくでしょう - 関数の結果に変数を設定する理由は何でしょうか? – blunders

関連する問題