Страницы: 1
RSS
Как сделать так чтобы форма VBA созданная в excel была поверх всех окон?
 
вопрос собственно в теме. еще хотелось спросить как привязать горячие клавиши к созданным на форме кнопкам? спасибо за внимание)
 
это вообще возможно хоть?
 
1 над всеми окнами или только в икселе?  
 
2 object.Accelerator [= String](или на странице свойств)
 
поверх всех окон и с возможностью сворачивания
 
а как сделать так чтобы на форме была кнопка свернуть в заголовке?
 
Все же есть ли возможность сделать UserForm поверх ВСЕХ окон? И попутно - как форму, созданную в Access использовать (импортировать) в Excel?
 
форма в немодальном режиме и так поверх окон иксель  
 
а сворачивание или ontop - это надо уже свои окна создавать  
 
не windows os, конечно, но с использованием евонного API
 
Слэн, поверх ВСЕХ окон. Если Excel  в данный момент на заднем плане, а впереди какое-либо приложение.
 
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _    
     (ByVal lpClassName As String, _    
     ByVal lpWindowName As String) As Long    
Private Declare 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    
Private Const HWND_NOTOPMOST = -2    
Private Const HWND_TOPMOST = -1    
Private Const SWP_NOMOVE = &H2    
Private Const SWP_NOSIZE = &H1    
 
Вот сам нашел. Может кому-нибудь понадобится.  
 
 
Private Sub UserForm_Activate()    
Dim hWnd As Long    
  hWnd = FindWindow(vbNullString, Me.Caption)    
      Call SetWindowPos(hWnd, HWND_TOPMOST, 100, 0, 100, 0,WP_NOMOVE Or SWP_NOSIZE)    
 
'*******Форма в нормальное положение**************    
'       Call SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)    
'**********************************************    
End Sub
 
Panic, попробовал - ругается на метод Me.Caption.  
Не работает. Если у тебя ОК выложи пример пожалуйста.
 
Сергей. Прошу!)
 
А вот как привязать горячие клавиши к созданным на форме кнопкам?
 
Panic, спасибо. Насчет горячих - когда рекордером пишешь макрос у тебя ведь есть возможность назначить этому макросу горячие клавиши. Так? Если подвесишь свой записанный макрос на кнопки формы - они и горячими будут управляться. Вроде так.
 
{quote}{login=Panic}{date=21.04.2008 09:43}{thema=Как сделать так чтобы форма VBA созданная в excel была поверх всех окон?}{post}А вот как привязать горячие клавиши к созданным на форме кнопкам?{/post}{/quote}  
 
вы ответы хоть читаете?
 
Я выделил кнопку, свойства, акселератор и там указал желаемую букву.
 
{quote}{login=слэн}{date=22.04.2008 12:45}{thema=Re: Как сделать так чтобы форма VBA созданная в excel была поверх всех окон?}{post}{quote}{login=Panic}{date=21.04.2008 09:43}{thema=Как сделать так чтобы форма VBA созданная в excel была поверх всех окон?}{post}А вот как привязать горячие клавиши к созданным на форме кнопкам?{/post}{/quote}  
 
вы ответы хоть читаете?{/post}{/quote}  
 
сорри тупанул маленько.))) как сквозь пальцы гляжу и ничего не вижу. я в VB просто ноль и сразу не въехал что и как.    
после комментария юрия м . стало понятно что и ка
 
а можно каким-то образом убрать из формы которая поверх всех окон убрать кнопки свернуть и закрыть?
 
Для того, чтобы убрать кнопку Закрыть, представляющую собой небольшой крестик, расположенный в правом углу заголовка формы, достаточно скопировать весь нижеприведённый код в модуль нужной формы.    
   
Private Declare Function FindWindow _    
       Lib "user32.dll" Alias "FindWindowA" ( _    
       ByVal lpClassName As String, _    
       ByVal lpWindowName As String) As Long    
Private Declare Function GetWindowLong _    
       Lib "user32.dll" Alias "GetWindowLongA" ( _    
       ByVal hWnd As Long, _    
       ByVal nIndex As Long) As Long    
Private Declare Function SetWindowLong _    
       Lib "user32.dll" Alias "SetWindowLongA" ( _    
       ByVal hWnd As Long, _    
       ByVal nIndex As Long, _    
       ByVal dwNewLong As Long) As Long    
 
Private Sub UserForm_Initialize()    
   Dim ihWnd As Long, iStyle As Long    
 
   ihWnd = FindWindow(vbNullString, Me.Caption)    
   iStyle = GetWindowLong(ihWnd, -16&)    
   SetWindowLong ihWnd, -16&, iStyle And Not &H80000    
End Sub    
Подсмотрено на дружественном сайте
 
Для того, чтобы убрать заголовок формы, достаточно скопировать весь нижеприведённый код в модуль нужной формы.    
   
Private Declare Function FindWindow _    
       Lib "user32.dll" Alias "FindWindowA" ( _    
       ByVal lpClassName As String, _    
       ByVal lpWindowName As String) As Long    
Private Declare Function GetWindowLong _    
       Lib "user32.dll" Alias "GetWindowLongA" ( _    
       ByVal hWnd As Long, _    
       ByVal nIndex As Long) As Long    
Private Declare Function SetWindowLong _    
       Lib "user32.dll" Alias "SetWindowLongA" ( _    
       ByVal hWnd As Long, _    
       ByVal nIndex As Long, _    
       ByVal dwNewLong As Long) As Long    
Private Declare Function DrawMenuBar Lib "user32.dll" ( _    
       ByVal hWnd As Long) As Long    
 
Private Sub UserForm_Initialize()    
   Dim ihWnd As Long, iStyle As Long    
 
   ihWnd = FindWindow(vbNullString, Me.Caption)    
   iStyle = GetWindowLong(ihWnd, -16&)    
   SetWindowLong ihWnd, -16&, iStyle And Not &HC00000    
   DrawMenuBar ihWnd    
End Sub
 
столкнулся с одной проблемой. при скрытии заголовка окна невозможно переместить форму :(
 
как лучше создать форму, вручную или макросом? може геометрия формы и ее содержимого изменяться при открытии на разных машинх?
eltekhproekt.com.ua
 
> как лучше создать форму, вручную или макросом?  
Как вам удобнее. В 99.99% случаев формы создаются вручную.  
 
 
> може геометрия формы и ее содержимого изменяться при открытии на разных машинх?  
Да, может изменяться.  
например, при нестандартных разрешениях экрана, при включении режимов для слабовидящих, при изменении системных шрифтов, и т.д.
 
Спасибо всем, очень полезная информация.
 
Помогите добавить на UserForm кнопку "свернуть" (типа полосочка в правом верхнем углу)!!!.
 

И почему же Вы поиском не пользуетесь? http://www.msoffice.nm.ru/faq/macros/winapi.htm#faq439

 
Вот ещё один пример с кнопками Свернуть/развернуть
Страницы: 1
Читают тему
Наверх