1

次のコードは、ログファイルから重複行を削除するためのサブの始まりであるため、この名前が付けられています。しかし、私がこれまでに持っているものをテストした後、これがなぜ私にエラーを与えているのか理解できません。コードは次のとおりです。

Sub cleanUpLogFile()

Dim logFileStr As String

Dim newBook As Workbook
Dim fd1 As FileDialog

MsgBox "Select your log file.", vbInformation, "Important Info"
Set fd1 = Application.FileDialog(msoFileDialogFilePicker)
With fd1
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "*.xl* Files", "*.xl*", 1
    'if user selects a file then
    If .Show Then
        'assign selection to variable
        logFileStr = fd1.SelectedItems.Item(1)
        Else 'display prompt and exit sub
            MsgBox "You didn't select your indexation file. Exiting...", _
                vbCritical, "Important Info"
            Exit Sub
    End If
End With

Set newBook = Workbooks.Open(logFileStr, 0)
newBook.Close (0)
Set newBook = Nothing

MsgBox "finished"

errHandler:
MsgBox "Encountered an error: " & Err.Number & " -> " & Err.Description, _
        vbExclamation, "Error! - from cleanUpLogFile() sub"
Err.Clear
Exit Sub
End Sub

エラーメッセージボックスにも多くの情報は表示されません。err.Numberからの対応する説明がない場合は、「0」と表示されますerr.Description

何か案は?

ありがとう、QF。

4

2 に答える 2

2

errHandler:ラベルの前にExitSubステートメントがありません。

VBのラベルは、実際にはコード内の位置の単なるブックマークであるため、ラベルの下のコードに到達する前に関数を終了する場合は、そうするように指示する必要があります。

あなたの場合、エラーがない場合でも、errHandler:ラベルの下のコードが実行され、出力は実際には「エラーはありませんでした」と表示されます。

したがって、コードを次のように変更します。

... more code
Set newBook = Nothing

MsgBox "finished"
Exit Sub
errHandler:
MsgBox "Encountered an error: " & Err.Number & " -> " & Err.Description, _
        vbExclamation, "Error! - from cleanUpLogFile() sub"
Err.Clear
Exit Sub
End Sub
于 2012-04-26T10:47:02.367 に答える
0

最初に機能するものを実行しようとすることで、トラブルシューティングを行うことができます。空のWith...End Withで実行されない場合、エラーは外部にあります。そうでなければ、あなたはそれが中にあることを知るでしょう。次に、With ... End With内に一度に行を追加し、エラーが表示されるタイミングを確認してから、その行を変更してみます。

お役に立てれば。

于 2012-04-26T10:49:48.723 に答える