【问题标题】:Error handling not working on run-time Error 9 in excel-vba错误处理不适用于 excel-vba 中的运行时错误 9
【发布时间】:2019-01-23 18:54:48
【问题描述】:

我想在 Excel VBA 中应用错误处理机制,我想捕捉这个“运行时错误 9”,但它不起作用。
我一遍又一遍地使用这个 userform_initialize() 方法/子,每次我不想打开这个“SAMPLE UPDATE FILE.xlsm”工作簿时,我想检查它是否已经打开。如果是,则切换到该窗口或打开该工作簿。

我也尝试过on error resume next 语句,但它仍然在切换到窗口"Windows("SAMPLE UPDATE FILE.xlsm "). Select" 时中断

Private Sub UserForm_Initialize()
Application.DisplayAlerts = False
    On Error GoTo OPEN_WB_ERR
    Windows("SAMPLE UPDATE FILE.xlsm").Select
    UserForm1.ComboBox1.RowSource = ("'X:\SAMPLE UPDATE FILE.xlsm'!SEARCH")
    Windows("PROFORMA_INVOICE.xlsm").Activate
    On Error GoTo 0
    Exit Sub
OPEN_WB_ERR:
    Workbooks.Open Filename:="X:\SAMPLE UPDATE FILE.xlsm"
    UserForm1.ComboBox1.RowSource = ("'X:\SAMPLE UPDATE FILE.xlsm'!SEARCH")

    Windows("PROFORMA_INVOICE.xlsm").Activate
Resume Next
End Sub

任何建议都会有所帮助...

【问题讨论】:

  • "Workbooks.Open" 将选择已经打开的文件,或者打开一个新文件。

标签: excel vba


【解决方案1】:

检查您在 VB 编辑器中的设置(工具 >> 选项 >> 常规选项卡 >> 错误捕获),了解如何处理错误 - 如果您选择了“中断所有错误”,那么它将无论您设置了任何错误处理,总是会中断。 “Break in Class 模块”是一个不错的选择。

【讨论】:

    【解决方案2】:

    试试,

    Private Sub UserForm_Initialize()
        Dim path As String, Fn As String
        Dim Wb As Workbook
    
        Fn = "X:\SAMPLE UPDATE FILE.xlsm"
    
        Set Wb = Workbooks.Open(Filename:=Fn)
        UserForm1.ComboBox1.RowSource = "'" & Fn & "'" & "!SEARCH"
        ThisWorkbook.Activate
    End Sub
    

    【讨论】:

      【解决方案3】:

      Initialize 事件过程在首次创建表单时运行,在显示之前。您应该在创建表单之前打开您的工作簿,而不是作为该过程的一部分。尝试如下过程,将其安装在标准代码模块中。

      Sub OpenUserForm()
      
          Dim MyForm As UserForm1
      
          ' open your workbook here
          Set MyForm = New UserForm1          ' this fires the Initialize event
          UserForm1.Show
      
          ' the code below runs when MyForm is closed
          Unload MyForm
          Set MyForm = Nothing
      End Sub
      

      请注意,名称为 UserForm1 的表单必须存在。我建议给它另一个更具描述性的名称。如果你这样做,你给出的任何名称都是在声明 MyForm 的 Dim 语句中使用的名称。

      【讨论】:

        【解决方案4】:

        我使用 WorkbookIsOpen 函数

        Public function WorkbookIsOpen(byval strFile as string) as Boolean
        
        Dim wbkCurr as excel.workbook
        
        WorkbookIsOpen = false
        For each wbkCurr in application.Workbooks
            If wbkCurr.name = strfile then
                WorkbookIsOpen = true
                Exit for
            Endif
        Next wbkCurr 
        
        End function 
        

        只传递文件名和扩展名,即 myworkbook.xlsx

        然后我只是相应地调整我的逻辑

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-15
          • 1970-01-01
          相关资源
          最近更新 更多