On Error GoTo ... помогите найти ошибку

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Уважаемые господа программеры!
Подскажите где я ошибаюсь, ситуация такая:
есть приложение Excel, из него я открываю поочередно две книги и удаляю листы "БазаОбщая" (затем вставятся обновленные). В случае, если листа с таким названием нет, нужно пропустить код удаления и перейти дальше. Так вот, при открытии первой книги все работает как надо, а при открытии второй на строке Sheets("БазаОбщая").Select выскакивает ошибка

Код: Выделить всё

 
With Application
     .EnableEvents = False
     .Workbooks.Open Filename:=ТПFullName
     .EnableEvents = True
End With
On Error GoTo ErrorHandler
    Sheets("БазаОбщая").Select
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete 'удаление листа
    Application.DisplayAlerts = True
ErrorHandler:
With Application
     .EnableEvents = False
     .Workbooks.Open Filename:=БТFullName
     .EnableEvents = True
End With
On Error GoTo ErrorHandler2
    Sheets("БазаОбщая").Select 'вот здесь выскакивает ошибка
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete 'удаление листа
    Application.DisplayAlerts = True
ErrorHandler2:

в чем может быть дело? че-то я не догоняю :confused:
Спасибо.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Получается вот что:
как-то один On Error GoTo мешает другому (не знаю, не разобрался).
Может и не правильно, но выход нашелся в выделении

Код: Выделить всё

On Error GoTo ErrorHandler
    Sheets("БазаОбщая").Select
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete 'удаление листа
    Application.DisplayAlerts = True
ErrorHandler:
в отдельную процедуру и вызов этих процедур вместо указанного кода.
Все заработало.
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте VictorM.
"GoTo " не мешает, я думаю проблема в активном окне к которому идет обращение, в котором листа с таким именем уже нет.
Обращайтесь не к активному документу, а к предварительно созданному объекту, и подобные проблемы возникать не будут.

Код: Выделить всё

Sub delSheetsName()
    delSheet "C:\Книга2.xls", "БазаОбщая"
End Sub
Function delSheet(sWorkBook$, sSheets$) As Boolean
Dim XL As Object, XS As Object
On Error Resume Next
With Application
    Set XL = .Workbooks.Open(sWorkBook)
    Set XS = XL.Sheets(sSheets)
    .DisplayAlerts = False
    If Not XS Is Nothing Then
        XS.Delete
        Set XS = Nothing
        delSheet = True
    End If
    .DisplayAlerts = True
End With
Set XL = Nothing:
End Function
Евгений.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Teslenko_EA, спасибо за подробный ответ.
Ответить