Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Неявное скрытие активной книги при вызовом Getobject - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Неявное скрытие активной книги при вызовом Getobject (Макросы/Sub)
Неявное скрытие активной книги при вызовом Getobject
LVM Дата: Воскресенье, 21.03.2021, 07:24 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Добрый день.
Имеется 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
Дата добавления - 21.03.2021 в 07:24
LVM Дата: Воскресенье, 21.03.2021, 08:43 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Дополнение.
Попытка преодолеть "затыку" добавлением строки кода
[vba]
Код
Windows(ge170).Visible = True
[/vba]
дает ошибку '9', что вполне предсказуемо.
Код
[vba]
Код
ThisWorkbook.Worksheets(ge18).Visible = True
ThisWorkbook.Worksheets(ge18).Activate
ActiveWindow.Visible = True
ThisWorkbook.Application.Visible = True'ge18 - существующий лист книги.
[/vba]
Все это проходит без ошибок. Однако не дает никакого эффекта. Книга как была скрыта так и остается скрытой вместе с листом ge18.
последующая попытка ее активировать строкой
[vba]
Код
AppActivate (ge170)
[/vba]
вызывает все ту же ошибку '5' до тех пор, пока вручную через меню вид\отобразить не "вытащить" книгу.


Сообщение отредактировал LVM - Воскресенье, 21.03.2021, 09:23
 
Ответить
СообщениеДополнение.
Попытка преодолеть "затыку" добавлением строки кода
[vba]
Код
Windows(ge170).Visible = True
[/vba]
дает ошибку '9', что вполне предсказуемо.
Код
[vba]
Код
ThisWorkbook.Worksheets(ge18).Visible = True
ThisWorkbook.Worksheets(ge18).Activate
ActiveWindow.Visible = True
ThisWorkbook.Application.Visible = True'ge18 - существующий лист книги.
[/vba]
Все это проходит без ошибок. Однако не дает никакого эффекта. Книга как была скрыта так и остается скрытой вместе с листом ge18.
последующая попытка ее активировать строкой
[vba]
Код
AppActivate (ge170)
[/vba]
вызывает все ту же ошибку '5' до тех пор, пока вручную через меню вид\отобразить не "вытащить" книгу.

Автор - LVM
Дата добавления - 21.03.2021 в 08:43
LVM Дата: Воскресенье, 21.03.2021, 10:40 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Еще немного приоткрыл особенности проблемы.
Я обнаружил, что строка кода:
[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 - Воскресенье, 21.03.2021, 10:48
 
Ответить
СообщениеЕще немного приоткрыл особенности проблемы.
Я обнаружил, что строка кода:
[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
Дата добавления - 21.03.2021 в 10:40
Pelena Дата: Воскресенье, 21.03.2021, 10:49 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 17442
Репутация: 3876 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Возможно, я не о том. По фрагменту кода не видно, как объявлена ge170, но если это именно книга, то Windows и AppActivate, требует в качестве аргумента ge170.Name
Другими словами, если открыто несколько книг, то срабатывает такой код
[vba]
Код
Windows(ThisWorkbook.Name).Visible = True
AppActivate (ThisWorkbook.Name)
[/vba]


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеВозможно, я не о том. По фрагменту кода не видно, как объявлена ge170, но если это именно книга, то Windows и AppActivate, требует в качестве аргумента ge170.Name
Другими словами, если открыто несколько книг, то срабатывает такой код
[vba]
Код
Windows(ThisWorkbook.Name).Visible = True
AppActivate (ThisWorkbook.Name)
[/vba]

Автор - Pelena
Дата добавления - 21.03.2021 в 10:49
LVM Дата: Воскресенье, 21.03.2021, 10:59 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

На данный момент сделал заплатку:
[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
Дата добавления - 21.03.2021 в 10:59
LVM Дата: Воскресенье, 21.03.2021, 11:00 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

По фрагменту кода не видно, как объявлена ge170, но если это именно книга, то Windows и AppActivate, требует в качестве аргумента ge170.Name

Объявлена как переменная типа String.
 
Ответить
Сообщение
По фрагменту кода не видно, как объявлена ge170, но если это именно книга, то Windows и AppActivate, требует в качестве аргумента ge170.Name

Объявлена как переменная типа String.

Автор - LVM
Дата добавления - 21.03.2021 в 11:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Неявное скрытие активной книги при вызовом Getobject (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования Jobsora jooble
© 2010-2021 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!