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

Вход

Регистрация

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

 

= Мир MS Excel/Закрыть форму при бездействии - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Закрыть форму при бездействии (Макросы/Sub)
Закрыть форму при бездействии
w00t Дата: Пятница, 11.03.2016, 22:10 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 3 ±
Замечаний: 0% ±

Простая формочка ввода логина/пароля (выбор из комбобокса). И единственная кнопочка "Ok" + "стандартный крестик" закрыть.
Вызывается стандартно:
[vba]
Код

Sub LoadForm()
UserForm3.Show
End Sub
[/vba]
Как закрыть форму принудительно (выгрузить), если пользователь не ввел данные, в течение, допустим, 15 секунд?


Сообщение отредактировал w00t - Пятница, 11.03.2016, 22:12
 
Ответить
СообщениеПростая формочка ввода логина/пароля (выбор из комбобокса). И единственная кнопочка "Ok" + "стандартный крестик" закрыть.
Вызывается стандартно:
[vba]
Код

Sub LoadForm()
UserForm3.Show
End Sub
[/vba]
Как закрыть форму принудительно (выгрузить), если пользователь не ввел данные, в течение, допустим, 15 секунд?

Автор - w00t
Дата добавления - 11.03.2016 в 22:10
Udik Дата: Пятница, 11.03.2016, 22:21 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Наверное подвесить на активацию макрос. А в нём цикл while c doevent и выходом по изменению флага. Флаг менять либо по истечение времени, либо по заполнению формы.
Без файла только на словах. :p .


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеНаверное подвесить на активацию макрос. А в нём цикл while c doevent и выходом по изменению флага. Флаг менять либо по истечение времени, либо по заполнению формы.
Без файла только на словах. :p .

Автор - Udik
Дата добавления - 11.03.2016 в 22:21
Апострофф Дата: Пятница, 11.03.2016, 22:23 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 123 ±
Замечаний: 0% ±

Excel 1997
Почитайте про ONTIME.
А
закрыть форму принудительно

[vba]
Код
unload UserForm3
[/vba]
 
Ответить
СообщениеПочитайте про ONTIME.
А
закрыть форму принудительно

[vba]
Код
unload UserForm3
[/vba]

Автор - Апострофф
Дата добавления - 11.03.2016 в 22:23
doober Дата: Пятница, 11.03.2016, 22:30 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Так можно
К сообщению приложен файл: 10_.xlsm (19.7 Kb)


 
Ответить
СообщениеТак можно

Автор - doober
Дата добавления - 11.03.2016 в 22:30
Udik Дата: Пятница, 11.03.2016, 22:36 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Так можно

У меня ругается, переопределите объявления для 64 битной системы :) .


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
Так можно

У меня ругается, переопределите объявления для 64 битной системы :) .

Автор - Udik
Дата добавления - 11.03.2016 в 22:36
Gustav Дата: Пятница, 11.03.2016, 22:47 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2731
Репутация: 1132 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Я бы с учетом сказанного до меня совсем простенько что-нибудь в таком духе сделал (всё в одном модуле):
[vba]
Код
Option Explicit
Dim formShow As Boolean
Sub macro1()
    Application.OnTime Now + TimeValue("00:00:15"), "macro2"
    formShow = True
    UserForm1.Show
    formShow = False
End Sub
Sub macro2()
    If formShow Then
        Unload UserForm1
    End If
End Sub
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеЯ бы с учетом сказанного до меня совсем простенько что-нибудь в таком духе сделал (всё в одном модуле):
[vba]
Код
Option Explicit
Dim formShow As Boolean
Sub macro1()
    Application.OnTime Now + TimeValue("00:00:15"), "macro2"
    formShow = True
    UserForm1.Show
    formShow = False
End Sub
Sub macro2()
    If formShow Then
        Unload UserForm1
    End If
End Sub
[/vba]

Автор - Gustav
Дата добавления - 11.03.2016 в 22:47
w00t Дата: Пятница, 11.03.2016, 23:01 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 3 ±
Замечаний: 0% ±

Сорри, что туплю, но все закрывается?
UPD: поправил, но если после закрытия нажать второй раз на кнопку - то закрытие формы по таймеру не происходит?

Так можно

Круто, но очень мощно, хотелось бы без обращения к api. Сохранил, полезно, но в данном случае лучше короче.
А так, на 64 бит, там просто дописать

[vba]
Код
#If VBA7 Then
    #If Win64 Then
        Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
    #Else
        Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    #End If
#Else
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
[/vba]
К сообщению приложен файл: uf.xlsb (19.7 Kb)


Сообщение отредактировал w00t - Пятница, 11.03.2016, 23:15
 
Ответить
СообщениеСорри, что туплю, но все закрывается?
UPD: поправил, но если после закрытия нажать второй раз на кнопку - то закрытие формы по таймеру не происходит?

Так можно

Круто, но очень мощно, хотелось бы без обращения к api. Сохранил, полезно, но в данном случае лучше короче.
А так, на 64 бит, там просто дописать

[vba]
Код
#If VBA7 Then
    #If Win64 Then
        Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
    #Else
        Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    #End If
#Else
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
[/vba]

Автор - w00t
Дата добавления - 11.03.2016 в 23:01
Gustav Дата: Пятница, 11.03.2016, 23:14 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2731
Репутация: 1132 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Потому что Hide форму не выгружает, а просто прячет. Соответственно, при очередном Show процедура UserForm_Initialize просто не выполняется. А вот если выгрузить форму, то всё становится нормально:
[vba]
Код
Sub SExit()
Unload UserForm1 '.Hide
End Sub
[/vba]
Либо Application.OnTime выносите из формы и располагайте непосредственно перед UserForm1.Show.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Пятница, 11.03.2016, 23:16
 
Ответить
СообщениеПотому что Hide форму не выгружает, а просто прячет. Соответственно, при очередном Show процедура UserForm_Initialize просто не выполняется. А вот если выгрузить форму, то всё становится нормально:
[vba]
Код
Sub SExit()
Unload UserForm1 '.Hide
End Sub
[/vba]
Либо Application.OnTime выносите из формы и располагайте непосредственно перед UserForm1.Show.

Автор - Gustav
Дата добавления - 11.03.2016 в 23:14
w00t Дата: Пятница, 11.03.2016, 23:21 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 3 ±
Замечаний: 0% ±

Ага, понял, спасибо!
 
Ответить
СообщениеАга, понял, спасибо!

Автор - w00t
Дата добавления - 11.03.2016 в 23:21
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Закрыть форму при бездействии (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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