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”,而相应的描述 fromerr.Description不存在。

有任何想法吗?

谢谢,QF。

4

2 回答 2

2

您在 errHandler: 标签之前缺少 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
于 2012-04-26T10:47:02.367 回答
0

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

希望这可以帮助。

于 2012-04-26T10:49:48.723 回答