2017-08-16 253 views
0

我在Excel中有一個宏,它循環選項卡並將選項卡保存爲PDF文件。Excel VBA:運行時錯誤5 - 無效的過程調用或參數

宏觀部分的工作,它創建了幾個PDF文件,但隨後停止並拋出這個錯誤:

Run Time Error 5 - Invalid Procedure Call or Argument 

這裏是我的代碼:

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

那麼你在哪裏得到錯誤? :) – Vityata

+0

^^和'Debug.Print myFile'打印的最後一件東西是什麼? – YowE3K

回答

0

可能錯誤是在這裏: If myFile <> "False" Then

我想它應該是這樣 - >If myFile ThenIf len(myFile) >8 Then


但是,代碼看起來可行。剛剛嘗試與選擇案例來重建它,它看起來的方式更好,速度稍快:

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 

也許你會發現錯誤,則。

+1

@ YowE3K - 它看起來像我得到了三個正確的1:D – Vityata

相關問題