Страницы: 1
RSS
Как запретить принудительное закрытие userform до истечения определенного времени?
 
Доброго времен, уважаемые!
Есть некоторые пользователи, которые на автомате закрывают важные сообщения, которые пытается донести книга.
Как запретить принудительное закрытие msgbox до того, как истечет определенное время, чтобы пользователь волей-неволей вчитался?
Спасибо!
Улыбнись.
 
Думаю с msgbox ничего не сделать. Но можно создать свою форму, похожую на msgbox, с своим функционалом.
 
Hugo, userfrom Вы имеете в виду? Подскажите, возможно ли создать функцию, создающую однообразную, унифицированную userform, которой необходимо будет лишь передавать необходимый текст ?
Улыбнись.
 
Цитата
Hugo написал: Но можно создать свою форму, похожую на msgbox, с своим функционалом.
Вариант
Согласие есть продукт при полном непротивлении сторон
 
Sanja, код не фурычит.

Ошибка на
Код
Option Explicit

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
Улыбнись.
 
Код фурычит на 32х разрядных версиях Excel
Согласие есть продукт при полном непротивлении сторон
 
Sanja, а что мне возможно сделать для его работы?
Улыбнись.
 
Написать подобный код под свою версию
Различие в вызовах функций WinAPI в зависимости от версий Windows и Office
Изменено: Sanja - 31.07.2019 10:39:14
Согласие есть продукт при полном непротивлении сторон
 
Зачем вообще эти строки, и без них работает... если ещё и Private Sub UserForm_Initialize() отключить. Ну и форму чуть подправить.
P.S. Понял, это чтоб убрать возможность выключить крестом... Ну можно вызвать ещё раз, если например юзер выключил не кнопкой, а крестом - пусть опять ждёт :)
Изменено: Hugo - 31.07.2019 10:46:15
 
Попробуйте так
Изменено: Sanja - 31.07.2019 11:15:39
Согласие есть продукт при полном непротивлении сторон
 
Sanja, ошибка в Private Sub UserForm_Initialize()
   
не хочет восприниматься - FindWindow(vbNullString, Me.Caption)
Улыбнись.
 
Перезалил файл выше
Согласие есть продукт при полном непротивлении сторон
 
Можно с преждевременным закрытием формы через нажатие "крестика" или контекстное меню формы (или Alt+F4) побороться и так:
Код
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
   If CloseMode = 0 Then
     If Me.CommandButton1.Caption <> "Закрыть" Then
       Cancel = 1
     End If
   End If
End Sub
Владимир
 
Sanja, спасибо!
Улыбнись.
 
Цитата
falmrom написал:
чтобы пользователь волей-неволей вчитался
заставить пользователя вчитаться в ваше сообщение может только наличие контрольного вопроса для продолжения работы макроса, ответ на который срыт в тексте самого сообщения
все остальное заставит пользователя только выматериться в адрес программиста, создавшего сложности в привычных действиях (в окне есть крестик для закрытия окна, но нажатие на крестик не приводит к этому!!!)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх