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

Вход

Регистрация

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

 

= Мир MS Excel/Определить видна ли книга на экране - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Определить видна ли книга на экране
and_evg Дата: Понедельник, 06.05.2019, 14:38 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
Добрый день.

Вопрос состоит в общем в следующем. Как определить видна ли книга на экране в данный момент.
Именно видна, а не активна и следовательно ActiveWorkbook и ActiveWindow не подходят так как если открыты допустим несколько книг, то они могут быть открыты не в полноэкранном режиме, а например как было бы по команде "Вид" > "Упорядочить" > "Рядом" и интересующая книга может быть скрыта за другими
Вроде бы по логике должна подойти следующая команда [vba]
Код
MsgBox Application.Windows("Книга1").Visible
[/vba] но она всегда дает Истину если книга открыта.
 
Ответить
СообщениеДобрый день.

Вопрос состоит в общем в следующем. Как определить видна ли книга на экране в данный момент.
Именно видна, а не активна и следовательно ActiveWorkbook и ActiveWindow не подходят так как если открыты допустим несколько книг, то они могут быть открыты не в полноэкранном режиме, а например как было бы по команде "Вид" > "Упорядочить" > "Рядом" и интересующая книга может быть скрыта за другими
Вроде бы по логике должна подойти следующая команда [vba]
Код
MsgBox Application.Windows("Книга1").Visible
[/vba] но она всегда дает Истину если книга открыта.

Автор - and_evg
Дата добавления - 06.05.2019 в 14:38
anvg Дата: Понедельник, 06.05.2019, 16:30 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток
Вроде бы по логике должна подойти следующая команда
По логике какой? Дайте, пожалуйста, определение - что такое видимая книга.
 
Ответить
СообщениеДоброе время суток
Вроде бы по логике должна подойти следующая команда
По логике какой? Дайте, пожалуйста, определение - что такое видимая книга.

Автор - anvg
Дата добавления - 06.05.2019 в 16:30
K-SerJC Дата: Вторник, 07.05.2019, 08:18 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
но она всегда дает Истину если книга открыта.

[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 - Вторник, 07.05.2019, 08:35
 
Ответить
Сообщение
но она всегда дает Истину если книга открыта.

[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
Дата добавления - 07.05.2019 в 08:18
and_evg Дата: Вторник, 07.05.2019, 09:03 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
нужно определять все запущенные приложения и их положение на экране.

Я так понимаю, что тут нужно как то с API ?


Сообщение отредактировал and_evg - Вторник, 07.05.2019, 09:07
 
Ответить
Сообщение
нужно определять все запущенные приложения и их положение на экране.

Я так понимаю, что тут нужно как то с API ?

Автор - and_evg
Дата добавления - 07.05.2019 в 09:03
K-SerJC Дата: Вторник, 07.05.2019, 09:26 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
Я так понимаю, что тут нужно как то с API

я тоже так думаю, определять все запущенные приложения, потом перебором определять какие окна загораживают нужное...
может еще есть варианты, но я с ними пока не знаком.


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщение
Я так понимаю, что тут нужно как то с API

я тоже так думаю, определять все запущенные приложения, потом перебором определять какие окна загораживают нужное...
может еще есть варианты, но я с ними пока не знаком.

Автор - K-SerJC
Дата добавления - 07.05.2019 в 09:26
and_evg Дата: Вторник, 07.05.2019, 09:30 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
K-SerJC, Спасибо. Будем дальше копать
 
Ответить
СообщениеK-SerJC, Спасибо. Будем дальше копать

Автор - and_evg
Дата добавления - 07.05.2019 в 09:30
RAN Дата: Вторник, 07.05.2019, 10:55 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Не знаю, зачем это может быть нужно, но так
[vba]
Код
aw = ThisWorkbook.Parent.ActiveWindow.Parent.Name
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНе знаю, зачем это может быть нужно, но так
[vba]
Код
aw = ThisWorkbook.Parent.ActiveWindow.Parent.Name
[/vba]

Автор - RAN
Дата добавления - 07.05.2019 в 10:55
and_evg Дата: Вторник, 07.05.2019, 11:54 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
но так

К сожалению нет. Помоему вот это
[vba]
Код
ThisWorkbook.Parent.ActiveWindow.Parent.Name
[/vba]
идентично
[vba]
Код
Application.ActiveWorkbook.Name
[/vba]
зачем это может быть нужно

Представим, что открыта книга "Основная" (она всегда активна и из неё запускается макрос) и несколько "других" книг, но в конкретный момент времени на экране видны только книга "Основная" (активная) и одна из других книг (она не активная). Вот нужно определить имя этой неактивной книги.
 
Ответить
Сообщение
но так

К сожалению нет. Помоему вот это
[vba]
Код
ThisWorkbook.Parent.ActiveWindow.Parent.Name
[/vba]
идентично
[vba]
Код
Application.ActiveWorkbook.Name
[/vba]
зачем это может быть нужно

Представим, что открыта книга "Основная" (она всегда активна и из неё запускается макрос) и несколько "других" книг, но в конкретный момент времени на экране видны только книга "Основная" (активная) и одна из других книг (она не активная). Вот нужно определить имя этой неактивной книги.

Автор - and_evg
Дата добавления - 07.05.2019 в 11:54
boa Дата: Вторник, 07.05.2019, 12:16 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 559
Репутация: 167 ±
Замечаний: 0% ±

365
and_evg,
можно так:
[vba]
Код
Sub test()
Dim w: For Each w In Application.Windows
    Debug.Print w.Index & " - " & w.Caption
Next
End Sub
[/vba]
окно с индексом = 1 будет верхним.


 
Ответить
Сообщениеand_evg,
можно так:
[vba]
Код
Sub test()
Dim w: For Each w In Application.Windows
    Debug.Print w.Index & " - " & w.Caption
Next
End Sub
[/vba]
окно с индексом = 1 будет верхним.

Автор - boa
Дата добавления - 07.05.2019 в 12:16
K-SerJC Дата: Вторник, 07.05.2019, 12:21 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
если основная активная она должна быть верхней с индексом 1 а вот вторая тогда не активная видимая
но она может быть и невидимой, если свернуты все кроме основной
или я ошибаюсь?


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщениеесли основная активная она должна быть верхней с индексом 1 а вот вторая тогда не активная видимая
но она может быть и невидимой, если свернуты все кроме основной
или я ошибаюсь?

Автор - K-SerJC
Дата добавления - 07.05.2019 в 12:21
and_evg Дата: Вторник, 07.05.2019, 12:41 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
boa, K-SerJC, Насколько я понял индексы книгам присваиваются следующим образом:
у активной книги всегда индекс "1"
Индекс "2" у книги которая была активная до этого
Индекс "3" у книги которая была активная ещё ранее.... и т.д.

Тогда получается, что "Основная" книга активная, значит индекс у неё "1" и если другие книги не свернуты, то видимая книга будет иметь индекс "2"?
 
Ответить
Сообщениеboa, K-SerJC, Насколько я понял индексы книгам присваиваются следующим образом:
у активной книги всегда индекс "1"
Индекс "2" у книги которая была активная до этого
Индекс "3" у книги которая была активная ещё ранее.... и т.д.

Тогда получается, что "Основная" книга активная, значит индекс у неё "1" и если другие книги не свернуты, то видимая книга будет иметь индекс "2"?

Автор - and_evg
Дата добавления - 07.05.2019 в 12:41
and_evg Дата: Вторник, 07.05.2019, 13:13 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
Проверил. Все верно!
Если учесть , что при закрытии доп. книг индексация пересчитывается в соответствии с порядком активации книг, то считаю что задача решена!
Всем СПАСИБО!
 
Ответить
СообщениеПроверил. Все верно!
Если учесть , что при закрытии доп. книг индексация пересчитывается в соответствии с порядком активации книг, то считаю что задача решена!
Всем СПАСИБО!

Автор - and_evg
Дата добавления - 07.05.2019 в 13:13
and_evg Дата: Вторник, 07.05.2019, 14:05 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
Поторопился... %)
Выясняется что у Workbooks и Windows индексы разные.
Похоже что у Windows индексация происходит в зависимости от активации окон (как и писал раньше), а у Workbooks в зависимости от открытия книги...
Я верно думаю? Не подскажите где про это почитать?
 
Ответить
СообщениеПоторопился... %)
Выясняется что у Workbooks и Windows индексы разные.
Похоже что у Windows индексация происходит в зависимости от активации окон (как и писал раньше), а у Workbooks в зависимости от открытия книги...
Я верно думаю? Не подскажите где про это почитать?

Автор - and_evg
Дата добавления - 07.05.2019 в 14:05
boa Дата: Вторник, 07.05.2019, 14:24 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 559
Репутация: 167 ±
Замечаний: 0% ±

365
and_evg,
на сапорте все расписано:
Workbooks
Номер индекса указывает порядок открытия или создания книг.
Workbooks(1)— Это первая созданная книга, Workbooks(Workbooks.Count) -последняя создана. При активации книги номер индекса не изменяется. Все книги включаются в число индексов, даже если они скрыты.
Windows
всегда активное окно = Windows(1)


 
Ответить
Сообщениеand_evg,
на сапорте все расписано:
Workbooks
Номер индекса указывает порядок открытия или создания книг.
Workbooks(1)— Это первая созданная книга, Workbooks(Workbooks.Count) -последняя создана. При активации книги номер индекса не изменяется. Все книги включаются в число индексов, даже если они скрыты.
Windows
всегда активное окно = Windows(1)

Автор - boa
Дата добавления - 07.05.2019 в 14:24
and_evg Дата: Вторник, 07.05.2019, 15:02 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
boa, Спасибо.
Значит мои выводы верны :)
 
Ответить
Сообщениеboa, Спасибо.
Значит мои выводы верны :)

Автор - and_evg
Дата добавления - 07.05.2019 в 15:02
  • Страница 1 из 1
  • 1
Поиск:

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