Страницы: 1
RSS
Как в "оконном режиме" закрепить одно окно - поверх других окон для того же файла.
 
Добрый вечер, друзья.
Помогите разобраться с проблемой.
В эксель есть такая функция - как оконный режим, когда один открытый файл разбивается на два или несколько окон.
Я сделал макрос при помощи макрорекордера, который должен создавать дополнительное окно, но он что-то не хочет работать. Окно новое создает, но выравнивать его под нужные размеры и располагать в определенном месте листа отказывается.
У меня возникло два вопроса:
1) Почему макрос не выравнивает созданное окно под заданные размеры?
2) Как закрепить это экселевское окно - поверх другого экселевского окна того же файла?
Изменено: visors16 - 27.11.2016 16:49:35
 
На первый вопрос - добавьте строчку установки WindowState
Код
Sub Макрос2()

ActiveWindow.NewWindow
   With Application
   .WindowState = xlNormal
   
    .Left = 865
    .Top = 180
    .Width = 183
    .Height = 293
   
   End With
End Sub

Арфы - нет, возьмите бубен.
 
Udik,да все работает.
Большое спасибо.
А насчет закрепления - как думаете, в принципе - существует ли функция закрепления одного из окон?
 
Смотря что Вы под закреплением подразумеваете. Если просто однократно вывести на передний план это довольно просто, а если надо что-то вроде всегда поверх других окон, то это надо через API -ки решать. В частности SetWindowPos, только у меня она не хочет работать.  :D    
Код
Option Explicit

#If VBA7 And Win64 Then

Public Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare PtrSafe Function GetForegroundWindow Lib "user32" () As Long

#Else

Public Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetForegroundWindow Lib "user32" () As Long
#End If
Sub Макрос2()
Dim hndW&, buf1&

Dim str1 As String

ActiveWindow.NewWindow
   With Application
   .WindowState = xlNormal
   
    .Left = 865
    .Top = 180
    .Width = 183
    .Height = 293
   End With
   str1 = ActiveWindow.Caption
  ''hndW = FindWindow(vbNullString, str1) 'FindWindow - получаем хендлер по заголовку
    hndW = GetForegroundWindow() 'хендлер активного окна

buf1 = SetWindowPos(hndW, -1, 0, 0, 0, 0, 0)
'-1 поверх всех окон,
End Sub 
где ошибка не знаю, может подскажут
Изменено: Udik - 27.11.2016 18:35:11
Арфы - нет, возьмите бубен.
 
Udik, ясно, буду разбираться.
Спасибо за помощь.
 
Цитата
Udik написал:
В частности SetWindowPos, только у меня она не хочет работать.
Кстати нельзя сказать что этот макрос не работает.
В Е2013 - при запуске - никакого закрепления окна не происходит (только вызов).
А вот когда я его открыл и запустил в Е2007 - то поверх окон закрепилось, не частное, а общее окно программы эксель. В Е2003 та же картина.
Так что макрос работает, но частично.
Страницы: 1
Читают тему
Наверх