VBA - 为什么这会给我一个错误?

时间:2012-04-26 10:33:59

标签: vba excel-vba excel

以下代码是从日志文件中删除重复行的子的开头,因此是名称。但是,在测试了我到目前为止的内容后,我无法理解为什么这会给我一个错误。这是代码:

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

错误消息框也没有给我太多信息; <{1}}显示为“0”,而err.Number的相应说明不存在。

有什么想法吗?

谢谢, QF。

2 个答案:

答案 0 :(得分:2)

您在errHandler:label。

之前缺少一个Exit Sub语句

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

答案 1 :(得分:0)

您可以通过最初尝试运行有效的方法进行故障排除。如果它没有运行空的With ... End With然后错误在外面。否则你会知道它在里面。然后在With ... End With中添加一行,看看错误弹出的时间,然后尝试修改该行。

希望这有帮助。