Excel VBA:运行时错误5 - 无效的过程调用或参数

时间:2017-08-16 16:15:50

标签: excel vba excel-vba pdf

我在Excel中有一个宏,它循环显示选项卡并将标签保存为给定文件夹中的PDF格式。

宏部分工作,它会创建一些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

1 个答案:

答案 0 :(得分:0)

可能错误在这里: If myFile <> "False" Then

我想它应该就像这样 - &gt; If myFile ThenIf len(myFile) >8 Then

然而,代码看起来很有效。只是尝试使用Select Case重建它,它看起来更好,更快:

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

然后你可能会发现错误。