Обработка ошибок не работает во время выполнения Ошибка 9 в Excel-VBA - PullRequest
0 голосов
/ 08 января 2019

Я хочу применить механизм обработки ошибок в Excel VBA, я хочу уловить эту «ошибку времени выполнения 9», но она не работает.
Я использую этот метод / sub 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

любой совет будет полезен ...

Ответы [ 4 ]

0 голосов
/ 08 января 2019

Я использую функцию 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

Тогда я просто настраиваю свою логику соответственно

0 голосов
/ 08 января 2019

Процедура события 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 должна существовать. Я рекомендую дать ему другое, более описательное имя. Если вы сделаете это, то любое имя, которое вы дадите, будет использоваться в выражении Dim, объявляющем MyForm .

0 голосов
/ 08 января 2019

Попробуйте,

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
0 голосов
/ 08 января 2019

Проверьте настройки в редакторе VB ( Инструменты >> Параметры >> вкладка Общие >> Перехват ошибок ), чтобы узнать, как обрабатываются ошибки - если вы выбрали «Разбить все ошибки», то всегда будет перерыв независимо от установленной вами обработки ошибок. "Break in Class module" - хороший вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...