Наверное подвесить на активацию макрос. А в нём цикл while c doevent и выходом по изменению флага. Флаг менять либо по истечение времени, либо по заполнению формы. Без файла только на словах. .
Наверное подвесить на активацию макрос. А в нём цикл while c doevent и выходом по изменению флага. Флаг менять либо по истечение времени, либо по заполнению формы. Без файла только на словах. .Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Я бы с учетом сказанного до меня совсем простенько что-нибудь в таком духе сделал (всё в одном модуле): [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]
Я бы с учетом сказанного до меня совсем простенько что-нибудь в таком духе сделал (всё в одном модуле): [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
Круто, но очень мощно, хотелось бы без обращения к 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]
Сорри, что туплю, но все закрывается? 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
Потому что Hide форму не выгружает, а просто прячет. Соответственно, при очередном Show процедура UserForm_Initialize просто не выполняется. А вот если выгрузить форму, то всё становится нормально: [vba]
Код
Sub SExit() Unload UserForm1 '.Hide End Sub
[/vba] Либо Application.OnTime выносите из формы и располагайте непосредственно перед UserForm1.Show.
Потому что Hide форму не выгружает, а просто прячет. Соответственно, при очередном Show процедура UserForm_Initialize просто не выполняется. А вот если выгрузить форму, то всё становится нормально: [vba]
Код
Sub SExit() Unload UserForm1 '.Hide End Sub
[/vba] Либо Application.OnTime выносите из формы и располагайте непосредственно перед UserForm1.Show.Gustav