3

外部マクロでエラー処理を行うことが可能かどうか疑問に思っています。基本的に私が達成したいのは、毎日入ってくる何千ものExcelワークブックがあり、それぞれを開いてマクロを実行したいということです(Application.run機能を使用するだけで簡単に実行できます)

Application.Run ("'" & ActiveWorkbook & "'!Export")

私が達成したいのは、その外部マクロでエラーが発生した場合にエラー解決機能を実行したいということです。

これは私がこれまでに持っているものです

Dim str_SearchFile, str_FileName, str_SearchPath As String
Dim wb_WorkBook As Workbook


    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    str_ThisBook = ActiveWorkbook.Name 'Set the current workbook for later reference
        str_SearchPath = Sheets("Control Panel").Range("E2")
        str_SearchFile = Sheets("Control Panel").Range("E2") & "\*.xls*" 'Sets the file type to search for
        str_NextFile = Dir(str_SearchFile, vbDirectory) 'Sets the amount of files in the directory matching the criterea (.xls)

        Do While Len(str_NextFile) > 0
            On Error Resume Next
            Set wb_WorkBook = Workbooks.Open(Filename:=str_SearchPath & "\" & str_NextFile, Password:="")
            If Err.Number = 0 Then
                On Error GoTo 0
                Application.Run ("'" & str_NextFile & "'!Export")
                str_FileName = str_SearchPath & "\Done" & "\" & str_NextFile
                wb_WorkBook.Save
                wb_WorkBook.Close
                FileCopy (str_SearchPath & "\" & str_NextFile), str_FileName
                Kill (str_SearchPath & "\" & str_NextFile)
            End If
            str_NextFile = Dir
        Loop

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub

どんなアドバイスでも大歓迎です!

前もって感謝します

4

2 に答える 2

3

これをあなたが試みているように機能させることはできません。

On Error Statementに関するMSDNは、次のことを示しています(強調が追加されています)。

エラー処理ルーチンを有効にし、プロシージャ内のルーチンの場所を指定します。エラー処理ルーチンを無効にするためにも使用できます。

VBE用語集では、手順を次のように定義しています。

ユニットとして実行されるステートメントの名前付きシーケンス。たとえば、Function、Property、およびSubはプロシージャのタイプです。プロシージャ名は常にモジュールレベルで定義されます。すべての実行可能コードは、プロシージャに含まれている必要があります。プロシージャを他のプロシージャ内にネストすることはできません。

これは、他の本のマクロを呼び出す前にエラー処理を呼び出すことは、呼び出されたマクロでは無視されることを意味します(テストによって確認されました)。

エラー処理を有効にできる唯一の方法は、マクロを呼び出す前にワークブックのコードを実際に変更することです...これは非常に複雑です。参考までに、VBAからプロジェクトコードを編集する例を示すWebページを次に示します。

于 2012-10-26T13:30:49.203 に答える
2

これに対処する最も簡単な方法は、外部ワークブックの「エクスポート」サブを、値を返す関数に変更することです-整数と言います。

次にできることは、エラートラップをその関数に配置し、プロシージャの結果に基づいて、次のように返すことができます。

0 = All Went Well
1 = Failed to do XXX
2 = Failed to do YYY

次に、コードを次のように変更できます。

Select Case Application.Run ("'" & str_NextFile & "'!Export")
Case 0
   MsgBox "All Went Well"

Case 1
   MsgBox "Failed to do XXX"

Case 2
   MsgBox "Failed to do YYY"

End Select

これにより、エラートラップをそれが属する場所に配置し、プロシージャがどのように実行されたかを知ることができます。

お役に立てれば

于 2012-10-26T13:33:32.923 に答える