Как закрыть форму в vba

Как закрыть форму в vba

Метод Close выполняет действие закрытия в Visual Basic. The Close method carries out the Close action in Visual Basic.

Синтаксис Syntax

выражение.Close (ObjectType, ObjectName, Save) expression.Close (ObjectType, ObjectName, Save)

выражение: переменная, представляющая объект DoCmd. expression A variable that represents a DoCmd object.

Параметры Parameters

Имя Name Обязательный или необязательный Required/Optional Тип данных Data type Описание Description
ObjectType ObjectType Необязательный Optional AcObjectType AcObjectType Константа AcObjectType, представляющая тип закрываемого объекта. An AcObjectType constant that represents the type of object to close.
ObjectName ObjectName Необязательный Optional Variant Variant Строковое выражение, которое является допустимым именем объекта типа, выбранного аргументом ObjectType. A string expression that’s the valid name of an object of the type selected by the ObjectType argument.
Save Save Необязательный Optional AcCloseSave AcCloseSave Константа AcCloseSave, указывающая, нужно ли сохранять изменения в объекте. An AcCloseSave constant that specifies whether to save changes to the object. Значение по умолчанию — acSavePrompt. The default value is acSavePrompt.

Примечания Remarks

С помощью метода Close можно закрыть указанное окно Microsoft Access или активное окно, если не указано определенное окно. You can use the Close method to close either a specified Microsoft Access window or the active window if none is specified.

Если оставить аргументы ObjectType и ObjectName пустыми (для аргумента ObjectType предполагается константа по умолчанию acDefault), Access закрывает активное окно. If you leave the ObjectType and ObjectName arguments blank (the default constant, acDefault, is assumed for ObjectType), Access closes the active window. Если указать аргумент Save и оставить аргументы_ObjectType_ и ObjectName пустыми, необходимо включить запятые аргументов ObjectType и ObjectName. If you specify the Save argument and leave the ObjectType and ObjectName arguments blank, you must include the ObjectType and ObjectName arguments’ commas.

Если у формы есть элемент управления, привязанный к полю, для свойства Required которого задано значение "Да", а форма закрыта с помощью метода Close без ввода данных для этого поля, сообщение об ошибке не отображается. If a form has a control bound to a field that has its Required property set to Yes, and the form is closed by using the Close method without entering any data for that field, an error message is not displayed. Все изменения, внесенные в запись, будут отменены. Any changes made to the record will be aborted. Когда форма закрывается с помощью пользовательского интерфейса, Access отображает оповещение. When the form is closed by using the user interface, Access displays an alert.

Читайте также:  Включается режим не беспокоить сам по себе

Чтобы отобразить сообщение об ошибке, используйте метод RunCommand для вызова команды acCmdSaveRecord перед вызовом метода Close. To display an error message, use the RunCommand method to invoke the acCmdSaveRecord command before calling the Close method. Это приведет к ошибке во время выполнения, если одно или несколько обязательных полей имеют значение NULL. This will cause a run-time error if one or more required fields are Null. Этот способ показан в следующем примере. This technique is illustrated in the following example.

Пример Example

В следующем примере используется метод Close, чтобы закрыть форму Order Review (Проверка заказа), сохранив все изменения в форме, не выполняя запрос. The following example uses the Close method to close the form Order Review, saving any changes to the form without prompting.

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Excel vba закрыть форму

Автор Manunich задал вопрос в разделе Другие языки и технологии

Какой командой можно закрыть форму в Visual basic. и получил лучший ответ

Ответ от Andre Van Herz[гуру]
команда Unload имя_формы, наример: Unload Form2

Иногда при разработке интерфейсов программы с помощью форм пользователя(UserForm) бывает необходимо запретить закрытие формы крестиком. Причин много: например на форме много элементов выбора и пользователь не должен просто закрывать форму крестиком, не выбрав что-то конкретное. Или может форма должна висеть постоянно на листе до тех пор, пока программа не сделает все необходимые действия и т.д.
Варианта два
Вариант 1
Можно просто запретить закрывать форму. Это значит, что после нажатия на крестик ничего не произойдет. Для этого надо перейти в модуль формы и на событие QueryClose прописать такой код:

Читайте также:  Как установить картинку на ярлык

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then ‘CloseMode = 0 — попытка закрыть форму крестиком Cancel = True ‘даем VBA понять, что надо отменить закрытие формы End If End Sub

данный код не даст закрыть форму нажатием на крестик, но если форма выгружается другими методами(вроде Unload) — форма закроется. За это отвечает параметр CloseMode, который может принимать следующие значения:

  • или vbFormControlMenu — попытка закрытия формы пользователем через элемент управления крестик
  • 1 или vbFormCode — закрытие формы через выгрузку методом Unload
  • 2 или vbAppWindows — завершение сеанса Windows(в кодах VBA практически не используется)
  • 3 или vbAppTaskManager — завершение программы через диспетчер задач(в кодах VBA практически не используется)

Можно(скорее даже нужно!) дать понять пользователю, что он должен сделать что-то конкретное для закрытия формы и что крестиком это сделать нельзя, чтобы он не нервничал и не пытался завершить работу Excel через Clt+Alt+Delete;

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then ‘CloseMode = 0 — попытка закрыть форму крестиком MsgBox "Вы должны нажать на кнопку в центре, чтобы закрыть форму", vbInformation, "www.excel-vba.ru" Cancel = True ‘даем VBA понять, что надо отменить закрытие формы End If End Sub

Теперь при попытке закрыть форму крестиком пользователь увидит сообщение с инструкцией.

Вариант 2
Но порой надо не просто запретить закрывать форму — но и для эстетики убрать заголовок с крестиком вообще — чтобы не смущал пользователя. Здесь чуть посложнее — придется применить функции API. Код надо будет помещать уже на инициализацию формы(событие Initialize), а не на закрытие(QueryClose). Следующий код необходимо будет поместить в самое начало модуля той формы, меню которой требуется убрать(первой строкой или сразу после строк деклараций, таких как Option Explicit, Option Base, Option Compare Text):

‘константы для функций API Private Const GWL_STYLE As Long = -16& ‘для установки нового вида окна Private Const GWL_EXSTYLE = -20& ‘для расширенного стиля окна Private Const WS_CAPTION As Long = &HC00000 ‘определяет заголовок Private Const WS_BORDER As Long = &H800000 ‘определяет рамку формы ‘Функции API, применяемые для поиска окна и изменения его стиля #If VBA7 Then Private Declare PtrSafe Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr Private Declare PtrSafe Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr Private Declare PtrSafe Function DrawMenuBar Lib "User32" (ByVal hwnd As LongPtr) As Long #Else Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function DrawMenuBar Lib "user32.dll" (ByVal hwnd As Long) As Long #End If

Читайте также:  Филиппов сборник задач по диф уравнениям

Это константы и функции API, которые и будут делать основную работу по удалению меню. Теперь останется на событие инициализации формы применить все эти функции:

Private Sub UserForm_Initialize() Dim ihWnd, hStyle ‘ищем окно формы среди всех открытых окон If Val(Application.Version) С легкой руки моего старого друга и модератора нашего форума ЮрияМ дополняю статью еще одним кодом. Если на запуск формы применить такой код:

Private Sub UserForm_Initialize() Dim ihWnd, hStyle ‘ищем окно формы среди всех открытых окон If Val(Application.Version) ВАЖНО: Применяя любой из подходов советую заранее продумать как форма будет вообще закрываться, в том числе в режиме отладки программы. Т.к. если просто вставить этот код, то сами же не сможете закрыть форму — только завершением выполнения кода через RunReset.

Во вложении найдете все описанные варианты отображения форм:

Tips_Macro_DontCloseFormOnMenu.xls (77,5 KiB, 1 240 скачиваний)

Статья помогла? Поделись ссылкой с друзьями!

Ссылка на основную публикацию
Как добавить алису в панель задач
Вслед за ассистентами от Google, Apple (Siri) и Microsoft (Кортана) свою версию голосового поиска представила и компания Яндекс. Однако из-за...
Как выйти из яндекса на андроиде
Все большее количество пользователей предпочитает использовать мобильные устройства для выхода в интернет. Создатели интернет-проектов, в свою очередь, делают все возможное,...
Как выключить спящий режим на телефоне хуавей
Спящий режим на Хонор. На этой странице вы найдете инструкцию, как настроить спящий режим Huawei Honor 9 и подобных Андроид...
Как добавить маркеры в ворде
Microsoft Word 2016 имеет много нумерованных списков. Они могут принимать форму цифр или букв, которые следуют друг за другом, но...
Adblock detector