Добрый день. Имеется VBA программа, предполагающая интерактивную работу с Excel файлами. По непонятной мне причине, книга с исполняемым макросом иногда вылетает, становясь не видимой. Восстановить ее видимость можно через меню вид\отобразить. Код, который бы явно скрывал книгу я даже специально написать не могу, потому что не понимаю, какое из свойств будет делать невидимой всю книгу, а не ее отдельный лист. И как это свойство проверить через VBA я тоже недопонимаю, и это уже вопрос! Мне удалось локализовать код, при исполнении которого обозначенная проблема возникает. [vba]
Код
AppActivate (ge170) On Error Resume Next Set dudufos = GetObject(rced10 & rced12) 'Вариант Workbooks.Open Filename:=rced10 & rced12 использовался ранее, но оказался забракован в силу ряда причин. dfb = Err.Number If dfb = 13 Then Stop ' Для контроля прописано было. Но никогда не срабатывало. Set rced = dudufos.Worksheets(rced1) On Error GoTo 0 AppActivate (ge170) 'На этой строке происходит ошибка времени выполнения. Ранее открытая книга ge170 оказывается вдруг скрытой. (открыть можно пунктом меню Вид\отобразить и тогда ошибка исчезнет.
[/vba] Первая и последняя строки кода добавлены уже специально, для контроля проблемы. Открыто четыре файла через workbooks.open. Один из которых - ge170 - содержит исполняемый код.Еще несколько файлов одномоментно являются открытыми через Getobject. Последние являются скрытыми и открываются\закрываются периодически в интерактивном режиме, в зависимости от действий пользователя. (Не имею возможности прикрепить книгу с ошибкой, так как программа довольно сложная и контекст в виде открытых файлов образуется на лету - интерактивно и заранее не предустановлен.) Обратим внимание на две идентичных строки кода - первую и последнюю. Код в явной форме не трогал книгу ge170. Однако в результате его выполнения ge170 иногда (в каких случаях, я так и не смог понять) теряет видимость и становится скрытой. В результате последняя строка приведенного кода уже дает ошибку runtime error '5' время от времени.
У меня два вопроса. 1. Какого фига? Ошибка вылезает далеко не всегда. Код то работает, то дает указанный сбой. вызывающий runtime error '5' Причем, выяснил, что в момент перед сбоем активной является одна из книг, открытая до этого через getobject. Однако ge170 в этот момент, хоть и не активна, но не скрыта. А вот после исполнения getobject для совершенно постороннего файла ge170 вдруг оказывается скрытой! 2. Какое свойство книги программно можно просматривать или менять, чтобы понять, видима ли вся книга или скрыта? Я нашел только visible. Но это свойство листа, а не книги. Тем временем пункт меню Вид\скрыть, скрывает книгу, а не лист.
Добрый день. Имеется VBA программа, предполагающая интерактивную работу с Excel файлами. По непонятной мне причине, книга с исполняемым макросом иногда вылетает, становясь не видимой. Восстановить ее видимость можно через меню вид\отобразить. Код, который бы явно скрывал книгу я даже специально написать не могу, потому что не понимаю, какое из свойств будет делать невидимой всю книгу, а не ее отдельный лист. И как это свойство проверить через VBA я тоже недопонимаю, и это уже вопрос! Мне удалось локализовать код, при исполнении которого обозначенная проблема возникает. [vba]
Код
AppActivate (ge170) On Error Resume Next Set dudufos = GetObject(rced10 & rced12) 'Вариант Workbooks.Open Filename:=rced10 & rced12 использовался ранее, но оказался забракован в силу ряда причин. dfb = Err.Number If dfb = 13 Then Stop ' Для контроля прописано было. Но никогда не срабатывало. Set rced = dudufos.Worksheets(rced1) On Error GoTo 0 AppActivate (ge170) 'На этой строке происходит ошибка времени выполнения. Ранее открытая книга ge170 оказывается вдруг скрытой. (открыть можно пунктом меню Вид\отобразить и тогда ошибка исчезнет.
[/vba] Первая и последняя строки кода добавлены уже специально, для контроля проблемы. Открыто четыре файла через workbooks.open. Один из которых - ge170 - содержит исполняемый код.Еще несколько файлов одномоментно являются открытыми через Getobject. Последние являются скрытыми и открываются\закрываются периодически в интерактивном режиме, в зависимости от действий пользователя. (Не имею возможности прикрепить книгу с ошибкой, так как программа довольно сложная и контекст в виде открытых файлов образуется на лету - интерактивно и заранее не предустановлен.) Обратим внимание на две идентичных строки кода - первую и последнюю. Код в явной форме не трогал книгу ge170. Однако в результате его выполнения ge170 иногда (в каких случаях, я так и не смог понять) теряет видимость и становится скрытой. В результате последняя строка приведенного кода уже дает ошибку runtime error '5' время от времени.
У меня два вопроса. 1. Какого фига? Ошибка вылезает далеко не всегда. Код то работает, то дает указанный сбой. вызывающий runtime error '5' Причем, выяснил, что в момент перед сбоем активной является одна из книг, открытая до этого через getobject. Однако ge170 в этот момент, хоть и не активна, но не скрыта. А вот после исполнения getobject для совершенно постороннего файла ge170 вдруг оказывается скрытой! 2. Какое свойство книги программно можно просматривать или менять, чтобы понять, видима ли вся книга или скрыта? Я нашел только visible. Но это свойство листа, а не книги. Тем временем пункт меню Вид\скрыть, скрывает книгу, а не лист.LVM
[/vba] Все это проходит без ошибок. Однако не дает никакого эффекта. Книга как была скрыта так и остается скрытой вместе с листом ge18. последующая попытка ее активировать строкой [vba]
Код
AppActivate (ge170)
[/vba] вызывает все ту же ошибку '5' до тех пор, пока вручную через меню вид\отобразить не "вытащить" книгу.
Дополнение. Попытка преодолеть "затыку" добавлением строки кода [vba]
Код
Windows(ge170).Visible = True
[/vba] дает ошибку '9', что вполне предсказуемо. Код [vba]
[/vba] Все это проходит без ошибок. Однако не дает никакого эффекта. Книга как была скрыта так и остается скрытой вместе с листом ge18. последующая попытка ее активировать строкой [vba]
Код
AppActivate (ge170)
[/vba] вызывает все ту же ошибку '5' до тех пор, пока вручную через меню вид\отобразить не "вытащить" книгу.LVM
Сообщение отредактировал LVM - Воскресенье, 21.03.2021, 09:23
Еще немного приоткрыл особенности проблемы. Я обнаружил, что строка кода: [vba]
Код
If "Логпрог тест ql.xlsm" <> ge170 Then Stop
[/vba] вызывает останов. При этом, "Логпрог тест ql.xlsm" - это название книги с исполняемым кодом, скопированное из Total Commander А ge170 установлено было так: [vba]
Код
ge170 = Application.Caption
[/vba] Application.Caption понадобилось мне, чтобы отслеживать текущее Application.Caption и сравнивать с ge170 в отдельных подпрограммах, в том числе управляющих пересохранением книги с макросами. Так вот, из Watches ge170 = "Логпрог тест ql.xlsm - Excel" как видим, это действительно не одно и то же с "Логпрог тест ql.xlsm" Однако, это не проливает свет на вопрос, почему код AppActivate (ge170) то срабатывает то не срабатывает, в зависимости от того, видима ли книга с исполняющимся кодом. Так же и не проливает на то, какое же свойство и какого объекта все таки меняется при выборе пункта меню Вид\отобразить и далее выбора книги в данном окне?
Еще немного приоткрыл особенности проблемы. Я обнаружил, что строка кода: [vba]
Код
If "Логпрог тест ql.xlsm" <> ge170 Then Stop
[/vba] вызывает останов. При этом, "Логпрог тест ql.xlsm" - это название книги с исполняемым кодом, скопированное из Total Commander А ge170 установлено было так: [vba]
Код
ge170 = Application.Caption
[/vba] Application.Caption понадобилось мне, чтобы отслеживать текущее Application.Caption и сравнивать с ge170 в отдельных подпрограммах, в том числе управляющих пересохранением книги с макросами. Так вот, из Watches ge170 = "Логпрог тест ql.xlsm - Excel" как видим, это действительно не одно и то же с "Логпрог тест ql.xlsm" Однако, это не проливает свет на вопрос, почему код AppActivate (ge170) то срабатывает то не срабатывает, в зависимости от того, видима ли книга с исполняющимся кодом. Так же и не проливает на то, какое же свойство и какого объекта все таки меняется при выборе пункта меню Вид\отобразить и далее выбора книги в данном окне?LVM
Сообщение отредактировал LVM - Воскресенье, 21.03.2021, 10:48
Возможно, я не о том. По фрагменту кода не видно, как объявлена ge170, но если это именно книга, то Windows и AppActivate, требует в качестве аргумента ge170.Name Другими словами, если открыто несколько книг, то срабатывает такой код [vba]
Возможно, я не о том. По фрагменту кода не видно, как объявлена ge170, но если это именно книга, то Windows и AppActivate, требует в качестве аргумента ge170.Name Другими словами, если открыто несколько книг, то срабатывает такой код [vba]
If Application.Caption <> ge170 Then Windows(ge49).Visible = True
[/vba] Где переменная ge49 при открытии книги с макросом принимает значение имени открываемого файла. Такой код восстанавливает потерянную видимость книги, однако остается не ясным ответ на вопрос, почему эта потеря видимости в отдельных случаях происодит?
На данный момент сделал заплатку: [vba]
Код
If Application.Caption <> ge170 Then Windows(ge49).Visible = True
[/vba] Где переменная ge49 при открытии книги с макросом принимает значение имени открываемого файла. Такой код восстанавливает потерянную видимость книги, однако остается не ясным ответ на вопрос, почему эта потеря видимости в отдельных случаях происодит?LVM