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