Вопрос состоит в общем в следующем. Как определить видна ли книга на экране в данный момент. Именно видна, а не активна и следовательно ActiveWorkbook и ActiveWindow не подходят так как если открыты допустим несколько книг, то они могут быть открыты не в полноэкранном режиме, а например как было бы по команде "Вид" > "Упорядочить" > "Рядом" и интересующая книга может быть скрыта за другими Вроде бы по логике должна подойти следующая команда [vba]
Код
MsgBox Application.Windows("Книга1").Visible
[/vba] но она всегда дает Истину если книга открыта.
Добрый день.
Вопрос состоит в общем в следующем. Как определить видна ли книга на экране в данный момент. Именно видна, а не активна и следовательно ActiveWorkbook и ActiveWindow не подходят так как если открыты допустим несколько книг, то они могут быть открыты не в полноэкранном режиме, а например как было бы по команде "Вид" > "Упорядочить" > "Рядом" и интересующая книга может быть скрыта за другими Вроде бы по логике должна подойти следующая команда [vba]
Код
MsgBox Application.Windows("Книга1").Visible
[/vba] но она всегда дает Истину если книга открыта.and_evg
Sub op() MsgBox Application.Windows("мероприятия.xlsx").Visible Application.Windows("мероприятия.xlsx").Visible = False MsgBox Application.Windows("мероприятия.xlsx").Visible Application.Windows("мероприятия.xlsx").Visible = True MsgBox Application.Windows("мероприятия.xlsx").WindowState Application.Windows("мероприятия.xlsx").WindowState = xlMinimized 'свернуто MsgBox Application.Windows("мероприятия.xlsx").WindowState Application.Windows("мероприятия.xlsx").WindowState = xlMaximized 'на весь экран MsgBox Application.Windows("мероприятия.xlsx").WindowState Application.Windows("мероприятия.xlsx").WindowState = xlNormal 'нормальный режим End Sub
[/vba] вот так у меня работает корректно а чтобы определить видит ли пользователь в данный момент окно на экране, нужно определять все запущенные приложения и их положение на экране...
Sub op() MsgBox Application.Windows("мероприятия.xlsx").Visible Application.Windows("мероприятия.xlsx").Visible = False MsgBox Application.Windows("мероприятия.xlsx").Visible Application.Windows("мероприятия.xlsx").Visible = True MsgBox Application.Windows("мероприятия.xlsx").WindowState Application.Windows("мероприятия.xlsx").WindowState = xlMinimized 'свернуто MsgBox Application.Windows("мероприятия.xlsx").WindowState Application.Windows("мероприятия.xlsx").WindowState = xlMaximized 'на весь экран MsgBox Application.Windows("мероприятия.xlsx").WindowState Application.Windows("мероприятия.xlsx").WindowState = xlNormal 'нормальный режим End Sub
[/vba] вот так у меня работает корректно а чтобы определить видит ли пользователь в данный момент окно на экране, нужно определять все запущенные приложения и их положение на экране...K-SerJC
Благими намерениями выстелена дорога в АД.
Сообщение отредактировал K-SerJC - Вторник, 07.05.2019, 08:35
я тоже так думаю, определять все запущенные приложения, потом перебором определять какие окна загораживают нужное... может еще есть варианты, но я с ними пока не знаком.
я тоже так думаю, определять все запущенные приложения, потом перебором определять какие окна загораживают нужное... может еще есть варианты, но я с ними пока не знаком.K-SerJC
Представим, что открыта книга "Основная" (она всегда активна и из неё запускается макрос) и несколько "других" книг, но в конкретный момент времени на экране видны только книга "Основная" (активная) и одна из других книг (она не активная). Вот нужно определить имя этой неактивной книги.
Представим, что открыта книга "Основная" (она всегда активна и из неё запускается макрос) и несколько "других" книг, но в конкретный момент времени на экране видны только книга "Основная" (активная) и одна из других книг (она не активная). Вот нужно определить имя этой неактивной книги.and_evg
если основная активная она должна быть верхней с индексом 1 а вот вторая тогда не активная видимая но она может быть и невидимой, если свернуты все кроме основной или я ошибаюсь?
если основная активная она должна быть верхней с индексом 1 а вот вторая тогда не активная видимая но она может быть и невидимой, если свернуты все кроме основной или я ошибаюсь?K-SerJC
boa, K-SerJC, Насколько я понял индексы книгам присваиваются следующим образом: у активной книги всегда индекс "1" Индекс "2" у книги которая была активная до этого Индекс "3" у книги которая была активная ещё ранее.... и т.д.
Тогда получается, что "Основная" книга активная, значит индекс у неё "1" и если другие книги не свернуты, то видимая книга будет иметь индекс "2"?
boa, K-SerJC, Насколько я понял индексы книгам присваиваются следующим образом: у активной книги всегда индекс "1" Индекс "2" у книги которая была активная до этого Индекс "3" у книги которая была активная ещё ранее.... и т.д.
Тогда получается, что "Основная" книга активная, значит индекс у неё "1" и если другие книги не свернуты, то видимая книга будет иметь индекс "2"?and_evg
Проверил. Все верно! Если учесть , что при закрытии доп. книг индексация пересчитывается в соответствии с порядком активации книг, то считаю что задача решена! Всем СПАСИБО!
Проверил. Все верно! Если учесть , что при закрытии доп. книг индексация пересчитывается в соответствии с порядком активации книг, то считаю что задача решена! Всем СПАСИБО!and_evg
Поторопился... Выясняется что у Workbooks и Windows индексы разные. Похоже что у Windows индексация происходит в зависимости от активации окон (как и писал раньше), а у Workbooks в зависимости от открытия книги... Я верно думаю? Не подскажите где про это почитать?
Поторопился... Выясняется что у Workbooks и Windows индексы разные. Похоже что у Windows индексация происходит в зависимости от активации окон (как и писал раньше), а у Workbooks в зависимости от открытия книги... Я верно думаю? Не подскажите где про это почитать?and_evg
and_evg, на сапорте все расписано: Workbooks Номер индекса указывает порядок открытия или создания книг. Workbooks(1)— Это первая созданная книга, Workbooks(Workbooks.Count) -последняя создана. При активации книги номер индекса не изменяется. Все книги включаются в число индексов, даже если они скрыты. Windows всегда активное окно = Windows(1)
and_evg, на сапорте все расписано: Workbooks Номер индекса указывает порядок открытия или создания книг. Workbooks(1)— Это первая созданная книга, Workbooks(Workbooks.Count) -последняя создана. При активации книги номер индекса не изменяется. Все книги включаются в число индексов, даже если они скрыты. Windows всегда активное окно = Windows(1)boa