【问题标题】:VBA to handle errors if opening source file was not successful如果打开源文件不成功,VBA 处理错误
【发布时间】:2020-03-19 22:02:13
【问题描述】:

我修改了 youtube 教程中的代码(https://www.youtube.com/watch?v=h_sC6Uwtwxk,谢谢)以从其他 excel 文件中导入数据。

Sub get_data_from_source_file()

Dim FileToOpen As Variant
Dim SrcWB As Workbook
Dim SrcWS As Worksheet
Dim SrcRng As String
Let SrcRng = "A2:I501"
Dim DesWB As Workbook
Dim DesWS As Worksheet
Set DesWS = Worksheets("MAIN")
Dim DesLR As Long
DesLR = Application.WorksheetFunction.CountA(DesWS.Range("A1:A50001"))
Dim DesRng As String  
Let DesRng = "A" & DesLR + 1 & ":" & "I" & DesLR + 500
Dim sFileName As String

Application.ScreenUpdating = False

FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", filefilter:="Excel Files (*.xlsx;.*.csv*),*xlsx;csv*")
If FileToOpen <> False Then
On Error GoTo WrongPWD
Set SrcWB = Application.Workbooks.Open(FileToOpen)
ThisWorkbook.Worksheets("MAIN").Range(DesRng) = SrcWB.Sheets(1).Range(SrcRng).Value
SrcWB.Close False
MsgBox "Data import was successful."
End If

密码错误:

        If Err.Number = 1004 Then

        Dim MsgPrompt As String
        MsgPrompt = "The file could not be opened. Try again?"
        Select Case MsgBox(prompt:=MsgPrompt, Buttons:=vbYesNoCancel, Title:="Decision")
        Case Is = vbYes: 'Do nothing and let the code loop
        Case Is = vbNo: Exit Sub
        Case Else: Exit Sub 'User canceled (includes VbCancel and pressing the x top right corner)
        End Select


        Exit Sub

        End If

Application.ScreenUpdating = True

End Sub

代码运行良好。但是,我的源文件可能以某种方式受密码保护。当我输入错误的密码时,代码终止。请教我处理这个错误的代码,比如提示一个msgbox,通知用户再次运行命令并退出子等?

【问题讨论】:

    标签: excel vba handleerror


    【解决方案1】:

    下面是一个例子:

    Dim wb As Workbook
    
    Do While wb Is Nothing
        On Error Resume Next
            Set wb = Workbooks.Open(FilePath)
        On Error GoTo 0
        If wb Is Nothing Then
            Dim MsgPrompt As String
            MsgPrompt = "The file could not be opened. Try again?"
            Select Case MsgBox(prompt:=MsgPrompt, Buttons:=vbYesNoCancel, Title:="Decision")
                Case Is = vbYes: 'Do nothing and let the code loop
                Case Is = vbNo: Exit Sub
                Case Else: Exit Sub 'User canceled (includes VbCancel and pressing the x top right corner)
            End Select
        End If
    Loop
    

    【讨论】:

    • 您好 DecimalTurn。感谢您的代码。我试图将代码与我的原始帖子相匹配,并最终得出我编辑的代码,如图所示。我唯一的问题是,无论我在提示的消息框中按“是”还是“否”,它的行为就像子退出一样。是否也符合您的预期?
    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多