2010-12-17 9 views
1

Trying "GetFullNamePDF()" in der Dateinamen Attribut übergeben, aber die folgende Fehlermeldung erhalten: "Fehler Kompilieren: Erwartete End Sub"VBA-Fehler: "Kompilierfehler: Erwartete 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 

Ich weiß, nichts über VBA, und bekam den obigen Code von einem question I asked yesterday, war aber nicht in der Lage, zu der Zeit zu testen. Das Erraten des Fehlers hat mit der Funktion zu tun, da der Code ohne die Funktion hinzugefügt und der Dateipfad/Name fest codiert ist.

Idee des Codes ist die dynamische Verwendung des Dateinamens von sich selbst, um den Pfad und die Datei für das PDF zu benennen. Wenn Sie Fragen haben, kommentieren Sie einfach - danke!

Antwort

3

können nicht verschachtelt eine Funktion innerhalb einer Prozedur. Sie müssen es oben verschieben:

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

Danke, dass Sie sich die Zeit genommen haben, den Code zu lesen und sicherzustellen, dass alles richtig ist; weise ich Code sagen mein Code war besser, aber nie verwendet Excel VBA. – blunders

+0

Works, nur getestet, danke! – blunders

1

Es ist illegal, eine Funktion innerhalb eines Subs zu deklarieren. Es sollte wie folgt aussehen:

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

So:

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: Es gibt keinen Verweis auf "sFilename" im Code, glaube nicht, dass das funktionieren würde. – blunders

+0

@Blunder Vergisst du, dass ich diese Funktion geschrieben habe? Ich bin sehr, sehr vertraut mit VBA (überprüfen Sie die Benutzer auf dem VBA-Tag). Es ist nicht ungewöhnlich, eine Variable auf das Ergebnis einer Funktion zu setzen, es erleichtert das Debugging erheblich. Beim Umschreiben der Funktion ist ein Fehler aufgetreten, den ich korrigieren werde. – Fionnuala

+0

@Remou: Sie sind richtig, es würde funktionieren - was wäre der Grund, eine Variable auf das Ergebnis einer Funktion zu setzen? – blunders