То, что Вы активировали окно приложение методом AppActivate не означает, что теперь все строки кода ниже будут обращаться к нему. Эта строка не делает ничего, кроме активации окна, если таковое будет найдено. Никакого подключения к приложению этого окна не происходит. Поэтому строки вроде X=Application.Width относятся все равно к Excel. Но у Application нет свойства Width, оно есть у объекта Window.
По сути, для получения размеров любого окна надо использовать API(что вероятно, будет не всегда просто). Сначала по заголовку приложения искать его дескриптор(а-ля FindWindow), потом уже на основании дескриптора считывать данные по размеру окна. примерно это будет выглядеть так:
Код |
---|
Option Explicit
Type Rect
left As Long
top As Long
right As Long
bottom As Long
End Type
Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As Any, _
ByVal lpWindowName As Any) As Long
Declare Function GetWindowRect Lib "user32" _
(ByVal hwnd As Long, _
lpRect As Rect) As Long
Sub GetWindowSize()
Dim hwnd As Long ' дескриптор окна
Dim retval As Long ' возвращаемое значение
Dim winrect As Rect ' прямоугольник окна
' пытаемся найти окно Калькулятора
hwnd = FindWindow(vbNullString, "Калькулятор")
'если Калькулятор запущен
If hwnd <> 0 Then
retval = GetWindowRect(hwnd, winrect)
MsgBox "Ширина =" & winrect.right - winrect.left & _
vbNewLine & "Высота =" & winrect.bottom - winrect.top
End If
End Sub |
но здесь мне лениво было учитывать разную разрядность ОС(для 64 бит придется допиливать типы, впрочем, темы подобные обсуждались).
Да и для примера взят Калькулятор, заголовок которого не изменяется. Но тот же Блокнот(как и многие другие приложения) добавляют в заголовок разные дописки(например, блокнот выглядит при создании примерно так: "Безымянный - Блокнот"). И если хоть один символ будет отличаться - код не сработает.