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

Вход

Регистрация

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

 

= Мир MS Excel/Как узнать положение (состояние) окна рабочей книги - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Как узнать положение (состояние) окна рабочей книги
and_evg Дата: Суббота, 29.06.2019, 11:09 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
Всем доброго времени суток.
Столкнулся со следующей проблемой.
Необходимо при открытии другой книги узнать состояние текущей (уже открытой книги) и в случае если данная (текущая) книга не развернута на весь экран то расположить открываемую книгу по заданным координатам.
Для этого в модуле книги расположил следующий код:
[vba]
Код
Private WithEvents App As Application   ' объявляем объект Application для того, чтобы можно было отлавливать события других книг

Private Sub Workbook_Open()
        Set App = Application   ' назначаем объект Application для того, чтобы можно было отлавливать события других книг
End Sub

Private Sub App_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
    If Wn.Caption <> Me.Name Then
        If Application.Windows(ThisWorkbook.Name).WindowState = xlNormal Then
            With ActiveWindow
                .Top = 1.75
                .Left = 835
                .Width = 606.75
                .Height = 643.5
            End With
        End If
    End If
End Sub
[/vba]

Но проблема в том, что
[vba]
Код
Application.Windows(ThisWorkbook.Name).WindowState = xlNormal
[/vba]
всегда выдает Истина
К сообщению приложен файл: 9120693.xls (34.0 Kb)


Сообщение отредактировал and_evg - Суббота, 29.06.2019, 11:15
 
Ответить
СообщениеВсем доброго времени суток.
Столкнулся со следующей проблемой.
Необходимо при открытии другой книги узнать состояние текущей (уже открытой книги) и в случае если данная (текущая) книга не развернута на весь экран то расположить открываемую книгу по заданным координатам.
Для этого в модуле книги расположил следующий код:
[vba]
Код
Private WithEvents App As Application   ' объявляем объект Application для того, чтобы можно было отлавливать события других книг

Private Sub Workbook_Open()
        Set App = Application   ' назначаем объект Application для того, чтобы можно было отлавливать события других книг
End Sub

Private Sub App_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
    If Wn.Caption <> Me.Name Then
        If Application.Windows(ThisWorkbook.Name).WindowState = xlNormal Then
            With ActiveWindow
                .Top = 1.75
                .Left = 835
                .Width = 606.75
                .Height = 643.5
            End With
        End If
    End If
End Sub
[/vba]

Но проблема в том, что
[vba]
Код
Application.Windows(ThisWorkbook.Name).WindowState = xlNormal
[/vba]
всегда выдает Истина

Автор - and_evg
Дата добавления - 29.06.2019 в 11:09
krosav4ig Дата: Суббота, 29.06.2019, 21:06 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
Здравствуйте. Пробуйте winapi GetWindowPlacement тут и тут пример


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
СообщениеЗдравствуйте. Пробуйте winapi GetWindowPlacement тут и тут пример

Автор - krosav4ig
Дата добавления - 29.06.2019 в 21:06
and_evg Дата: Понедельник, 01.07.2019, 13:49 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 465
Репутация: 79 ±
Замечаний: 0% ±

Excel 2007
спасибо
 
Ответить
Сообщениеспасибо

Автор - and_evg
Дата добавления - 01.07.2019 в 13:49
anvg Дата: Понедельник, 01.07.2019, 15:19 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток.
GetWindowPlacement

Тёзка, можно же и без тяжёлой артиллерии :)
Версия для 2016 и выше. (а 2010 и ниже, там оконная модель другая - не на чем тестировать).
[vba]
Код
Private Declare PtrSafe Function GetWindowLongA Lib "User32" (ByVal HWnd As LongPtr, ByVal infoType As Long) As LongPtr
Public Function isWindowMaximized(ByVal thisWindow As Window) As Boolean
    isWindowMaximized = Not (GetWindowLongA(thisWindow.HWnd, -16) And &H1000000) = 0
End Function
[/vba]
 
Ответить
СообщениеДоброе время суток.
GetWindowPlacement

Тёзка, можно же и без тяжёлой артиллерии :)
Версия для 2016 и выше. (а 2010 и ниже, там оконная модель другая - не на чем тестировать).
[vba]
Код
Private Declare PtrSafe Function GetWindowLongA Lib "User32" (ByVal HWnd As LongPtr, ByVal infoType As Long) As LongPtr
Public Function isWindowMaximized(ByVal thisWindow As Window) As Boolean
    isWindowMaximized = Not (GetWindowLongA(thisWindow.HWnd, -16) And &H1000000) = 0
End Function
[/vba]

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

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