Страницы: 1
RSS
Вернуть фокус на UserForm_(?)
 
Здравствуйте уважаемые форумчане.
Есть экранная форма отображаемая на экране инструкцией : UserForm.Show vbModalless , режим vbModalless обязателен.
На ней есть пара кнопок. По нажатию на кнопку отрабатывает макрос, но форма, оставаясь отображённой на экране, теряет фокус.
Для продолжения работы с формой приходится кликать мышкой на окне формы для её активации.

Пробовал, но не помогло  :
UserForm.ActiveControl.SetFocus
 и
UserForm.Enabled=True  

Подскажите, пож-та :  как при отображённой, но не активной,  UseForm  программно её активировать, т.е. вернуть на неё фокус?
Спасибо за помощь / совет.
Изменено: AndyGrouve - 24.01.2014 14:41:27
 
Самое простое - Hide и снова Show
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Вариант:
Код
Sub Test()
    UserForm1.Hide
    UserForm1.Show 0
End Sub
 
 
The_Prist
Т.к. перед окончанием работы макроса у меня идёт информационный MsgBox , то получается не очень красиво для визуального восприятия пользователя :
1. Гаснет UserForm
2. Выводится MsgBox
3. Опять появляется UserForm
Предложенный вами вариант конечно рабочий, спасибо.
Может есть VBA-альтернатива сделать это одной командной?
 
Тогда поиском по форуму: API окно поверх всех
Но это куда более сложный вариант.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
че то мне кажется что там не так все просто.
от обычного  MsgBox фокус не теряется.
че там ваш макрос чудит?
 
Dima S
Вы правы. Причина в коде самого макроса : работа с ячейками, функции активации рабочих листов и т.д.
Собственно говоря, причина потери фокуса экранной формой именно в vba-коде макроса.
Думалось мне,  что проще найти решение по принудительнй установки фокуса чем переписывать "узкие" места vba-кода - оказалось иначе.
Посмотрел рекомендации уважаемого The_Prist - достаточно сложное для меня решение.  
Теперь склоняюсь к мысли, что может оставить предложенный вариант с
   UserForm1.Hide
   UserForm1.Show
 
все равно у меня фокус не теряется.
клавишу таб пробовали?
 
Dima S
Цитата
клавишу таб пробовали?
Нет не пробовал.
Хочется что бы после нажатия Ок в MsgBox оставалась активной UserForm, но этого не происходит, фокус уходит на рабочий лист Экселя.
Спасибо.
 
Цитата
1. Гаснет UserForm
2. Выводится MsgBox
3. Опять появляется UserForm
Меняем местами п.п. 1 и 2 ))
 
Цитата

Юрий М
Меняем местами п.п. 1 и 2 ))
Отличный рецепт, попробовал - то что нужно!  :)  
БОЛЬШОЕ всем спасибо за помощь! Тему считаем закрытой.
Изменено: AndyGrouve - 24.01.2014 16:09:18
 
Цитата
фокус уходит на рабочий лист Экселя.
а с чего вы взяли, что фокус уходит на лист?
 
Dima S, уходит по-любому. Т.к. для MsgBox родитель Excel, а не форма. И фокус возвращается родителю после закрытия Msgbox. Увы, неизлечимо.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
блин, то ли лыжи не едут...
вот переделал пример из форума.
по событию клика на форме делаются вышеперечисленные действия и фокус в комбобоксе простым SetFocus.
или не так?
 
Dima S
На моей UserForm только кнопки, ComboBox-ов нет.
Я так понял, что воспользоваться инструкцией SetFocus в моём случае не получится  :cry:  
Остановился на методе предложенном The_Prist и Юрий М
MsgBox " "
UserForm.Hide
UserForm.Show
Оказался не сложный и вполне рабочий вариант. Спасибо!
 
Код
Private Sub CommandButton1_Click()
MsgBox ("")
Me.CommandButton1.SetFocus
End Sub

Private Sub CommandButton2_Click()
MsgBox ("")
Me.CommandButton2.SetFocus
End Sub
 
Цитата
Т.к. для MsgBox родитель Excel, а не форма. И фокус возвращается родителю после закрытия Msgbox
Может, я что-то не так делаю, - но у меня фокус с немодальной формы никуда не уходит.

Создал файл Excel, добавил форму, в стандартном модуле написал макрос:

Код
Sub test()
    UserForm1.Show
    MsgBox 1
End Sub 
после выполнения кода - фокус на форме.
 
Теперь осталось выделить лист и ячейку на нем. После этого показать MsgBox. Фокус уйдет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я думаю что переписать основной код, убрав лишние селекшены и активейты - в любом случае полезно :)
Да и работы там обычно не очень много.
 
Михаил С.
Цитата
Me.CommandButton2.SetFocus
Михаил, предложенный вами метод у меня тоже работает, спасибо вам большое !  :)
Изменено: AndyGrouve - 04.01.2018 12:09:44
 
UserForm.Hide - не надо
Работает и так:
Код
UserForm.Show
UserForm.TextBox.SetFocus 
Страницы: 1
Наверх