2017-08-16 8 views
0

Ich habe ein Makro in Excel, das über die Registerkarten springt und die Registerkarten als PDFs in einem bestimmten Ordner speichert.Excel VBA: Laufzeitfehler 5 - Ungültiger Prozeduraufruf oder Argument

Das Makro teilweise funktioniert, ist es ein paar PDFs erzeugt, aber dann stoppt und wirft diesen Fehler:

Run Time Error 5 - Invalid Procedure Call or Argument 

Hier ist mein Code:

Option Explicit 

Sub WorksheetLoop() 

Dim wsA As Worksheet 
Dim wbA As Workbook 
Dim strTime As String 
Dim strName As String 
Dim strPath As String 
Dim strFile As String 
Dim strPathFile As String 
Dim myFile As Variant 
Dim rng As Range 

' Prevents screen refreshing. 
Application.ScreenUpdating = False 

Set wbA = ActiveWorkbook 

strPath = wbA.Path 
strTime = Format(Now(), "yyyymmdd") 

'get active workbook folder, if saved 
strPath = wbA.Path 
If strPath = "" Then 
    strPath = Application.DefaultFilePath 
End If 
strPath = strPath & "\" 

' Begin the loop. 
For Each wsA In ActiveWorkbook.Worksheets 

    'replace spaces and periods in sheet name 
    strName = Replace(wsA.Name, " ", "") 
    strName = Replace(strName, ".", "_") 

    If strName = "Macro" Then 
     MsgBox "That's all folks! :)" 
     Exit Sub 
    End If 

    If strName = "TOUCHPOINTS" Then 
     strName = "Touchpoints by markets" 
    End If 

    If strName = "VIDEOHOURS" Then 
     strName = "Viewing Hours by markets" 
    End If 

    If strName = "TARGETS" Then 
     strName = "Shares by markets" 
    End If 

    If strName = "SHARESCHANNELS" Then 
     strName = "IGNORE ME" 
    End If 

    If strName = "TOP10PREMIERES" Then 
     strName = "Top 10 Premieres by markets" 
    End If 

    If strName = "SHARETREND" Then 
     strName = "Share trends last 13 months" 
    End If 

    If strName = "COMPETITION" Then 
     strName = "Share overview international media companies" 
    End If 

    If strName = "COMPETITIONSHARETREND" Then 
     strName = "Share trends factual competitors last 13 months" 
    End If 

    If strName = "PUT" Then 
     strName = "PUT level" 
    End If 

    If strName = "CHANNELRANKER" Then 
     strName = "Top 20 Channels by Market" 
    End If 

    'create default name for savng file 
    strFile = strName & "_" & strTime & ".pdf" 
    myFile = strPath & strFile 

    Debug.Print myFile 

    'export to PDF if a folder was selected 
    If myFile <> "False" Then 
     wsA.ExportAsFixedFormat _ 
       Type:=xlTypePDF, _ 
       Filename:=myFile, _ 
       Quality:=xlQualityStandard, _ 
       IncludeDocProperties:=True, _ 
       IgnorePrintAreas:=False, _ 
       OpenAfterPublish:=False 
    End If 

Next wsA 

' Enables screen refreshing. 
Application.ScreenUpdating = True 

End Sub 
+2

Woher bekommen Sie den Fehler? :) – Vityata

+0

^^ und was ist das Letzte, was von 'Debug.Print myFile' gedruckt wird? – YowE3K

Antwort

0

Wahrscheinlich ist der Fehler hier: If myFile <> "False" Then

Ich denke, dass es einfach so sein sollte ->If myFile Then oder If len(myFile) >8 Then


Der Code sieht jedoch funktioniert. Probieren Sie es mit Select Case neu zu erstellen, sieht es viel besser und etwas schneller:

Select Case strName 
    Case "Macro" 
     MsgBox "That's all" 
     Exit Sub 
    Case "TOUCHPOINTS" 
     strName = "Touchpoints by markets" 
    Case Else 
     Debug.Print "I don't know -> "; strName 
End Select 

Wahrscheinlich werden Sie dann den Fehler finden.

+1

@ YowE3K - es sieht so aus, als hätte ich 1 von 3 richtigen: D – Vityata

Verwandte Themen