Имя листа не существует, если оно существует - PullRequest
0 голосов
/ 30 сентября 2019

Я разрабатывал программу VBA, UserForm1 в течение последних нескольких недель, и я провел множество тестов, и у меня никогда не было этой проблемы. Код, показанный ниже, является частью процедуры инициализации. Я сделал некоторые улучшения в программе, гораздо глубже в коде, чем обсуждаемый код. Теперь я не могу пройти через этот пункт в программе. Я заменил «Активировать» на «Выбрать», но это не повлияло на результат, то есть на прерванный прогон.

Пожалуйста, кто-то может подсказать, что я делаю неправильно? Или как программа, которая была протестирована десятки раз, внезапно обнаружила неисправность из воздуха?

    '======================================================================
    Dim WPA() As Variant             'Workbook path for Category Class
    Dim WBA() As Variant             'Workbook name for Category Class
    Dim WSA() As Variant             'Worksheet name for Category Class
    '======================================================================
    Dim WBK() As Workbook

    ..........
    Set WBK(S) = Workbooks.Open(WPA(S))
    Workbooks(WBA(S)).Worksheets(WSA(S)).Activate   'Activate Worksheet
    NWS(S) = CheckSheetExists(WSA(S))               'Check for Worksheet
    ..........

   Function CheckSheetExists(SheetName) As Boolean
   CheckSheetExists = Evaluate("ISREF('" & SheetName & "'!A1)")
   If CheckSheetExists = False Then
       MsgBox "Worksheet " & SheetName & " does not exist. Run aborted."
       End                        '<==================Run aborts
   End If
   End Function

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Похоже, вы используете глобальные переменные?

Если это так, вы должны знать, что они не так постоянны, как вы могли ожидать. Есть ряд вещей, которые приводят к тому, что глобальные переменные сбрасываются и становятся неопределенными.

См. Этот ответ для получения дополнительной информации: https://stackoverflow.com/a/7043901/1473412

Использование «Конца»

Необработанная ошибка времени выполнения

Редактирование кода

Закрытие рабочей книги, содержащей проект VB

Возможно ли, что "усовершенствования программы" намного глубже вкод, чем обсуждаемый код ", вызывает одно из этих событий и сбрасывает глобальные переменные?

Если вам нужно использовать глобальные переменные, вы можете безопасно хранить их на рабочем листе. Или каждый раз, когда вы пытаетесь его использовать, вы можете проверить, что он определен, а если нет, переопределить его?

0 голосов
/ 30 сентября 2019

Это хороший вопрос, хотя ответ Storaxs должен был исправить это, насколько мне известно.

Однако, когда что-то подобное происходит, я пытаюсь создать новую книгу целиком и вставить в нее весь этот код (только для рассматриваемого листа), а затем скопируйте все данные ячеек в новые листы.

Это спасло меня один раз и может помочь вам и в этом случае.

Я такжене рекомендуется удалять старую рабочую книгу, если вы не перенесли все заново.

Если это не помогло, сообщите нам об этом, и мы продолжим изучение этого вопроса.

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