Использование функции MsgBox в VBA Excel, ее синтаксис и параметры. Значения, возвращаемые функцией MsgBox. Примеры использования.
Функция MsgBox предназначена в VBA Excel для вывода сообщения в диалоговом окне, ожидания нажатия кнопки и возврата значения типа Integer, указывающего на то, какая кнопка была нажата. Для упрощения восприятия информации, в этой статье не рассматриваются параметры, связанные с контекстной справкой и модальностью диалогового окна MsgBox.
Синтаксис функции
MsgBox ( Prompt [, Buttons ] [, Title ])
Обязательным параметром функции MsgBox является Prompt, если Buttons и Title явно не указаны, используются их значения по умолчанию. Кроме того, если необязательные параметры не указаны и возвращаемое значение не присваивается переменной, сообщение не заключается в скобки:
Пример 1
Sub Test1() MsgBox «Очень важное сообщение!» End Sub |
Параметры функции
Параметр | Описание | Значение по умолчанию |
---|---|---|
Prompt* | Обязательный параметр. Выражение типа String, отображаемое в диалоговом окне в виде сообщения. Разделить на строки можно с помощью константы vbNewLine. | Нет |
Buttons | Необязательный параметр. Числовое выражение, которое представляет собой сумму значений, задающих номер и тип отображаемых кнопок, стиль используемого значка, тип кнопки по умолчанию. | 0 |
Title | Необязательный параметр. Выражение типа String, отображаемое в заголовке диалогового окна. | Имя приложения** |
*Максимальная длина параметра Prompt составляет примерно 1024 знака и зависит от их ширины.
**В Excel по умолчанию в заголовке MsgBox выводится надпись «Microsoft Excel».
Константы параметра «Buttons»
Тип и количество кнопок
Константа | Описание | Значение |
---|---|---|
vbOKOnly | Отображается только кнопка OK. | 0 |
vbOKCancel | Отображаются кнопки OK и Cancel (Отмена). | 1 |
vbAbortRetryIgnore | Отображаются кнопки Abort (Прервать), Retry (Повторить) и Ignore (Пропустить). | 2 |
vbYesNoCancel | Отображаются кнопки Yes (Да), No (Нет) и Cancel (Отмена). | 3 |
vbYesNo | Отображаются кнопки Yes (Да) и No (Нет). | 4 |
vbRetryCancel | Отображаются кнопки Retry (Повторить) и Cancel (Отмена). | 5 |
Стиль значка
Константа | Описание | Значение |
---|---|---|
vbCritical | Отображается значок Critical — Критичное сообщение, сообщение об ошибке. | 16 |
vbQuestion | Отображается значок Question — Сообщение с вопросом. | 32 |
vbExclamation | Отображается значок Exclamation — Предупреждающее сообщение. | 48 |
vbInformation | Отображается значок Information — Информационное сообщение. | 64 |
Для просмотра отображаемых значков, скопируйте код в свой модуль и запустите на выполнение:
Пример 2
Sub Test2() Dim a As Integer a = MsgBox(«Критичное сообщение, сообщение об ошибке», 16) a = MsgBox(«Сообщение с вопросом», 32) a = MsgBox(«Предупреждающее сообщение», 48) a = MsgBox(«Информационное сообщение», 64) End Sub |
Кнопка по умолчанию
Константа | Описание | Значение |
---|---|---|
vbDefaultButton1 | По умолчанию активна первая кнопка. | 0 |
vbDefaultButton2 | По умолчанию активна вторая кнопка. | 256 |
vbDefaultButton3 | По умолчанию активна третья кнопка. | 512 |
Возвращаемые значения
Константа | Кнопка | Значение |
---|---|---|
vbOK | OK | 1 |
vbCancel | Отмена | 2 |
vbAbort | Прервать | 3 |
vbRetry | Повторить | 4 |
vbIgnore | Пропустить | 5 |
vbYes | Да | 6 |
vbNo | Нет | 7 |
Значение, возвращаемое функцией MsgBox, используется для выбора дальнейших действий исполняемой программы в зависимости от нажатой кнопки.
Для третьего примера зададим следующие параметры первой функции MsgBox:
- Prompt = «Выберите кнопку!»
- Buttons = 323 (3 (vbYesNoCancel) + 64 (vbInformation) + 256 (vbDefaultButton2))
- Title = «Выбор кнопки»
Вторая функция MsgBox используется как простое информационное сообщение с параметрами по умолчанию.
Пример 3
Sub Test3() Dim a As Integer a = MsgBox(«Выберите кнопку!», 323, «Выбор кнопки») If a = 6 Then MsgBox «Вы нажали кнопку: Да» ElseIf a = 7 Then MsgBox «Вы нажали кнопку: Нет» Else MsgBox «Вы нажали кнопку: Отмена» End If End Sub |
В этом примере, в зависимости от нажатой кнопки в первом диалоговом окне, во втором сообщении выводится название нажатой кнопки. Обратите внимание, что вторая кнопка в открывшемся первом окне MsgBox выделена по умолчанию и срабатывает при нажатии клавиши «Enter».
А что будет, если первое диалоговое окно из третьего примера закрыть крестиком? Проверьте сами.
In VBA, using the message box, we can create a yes no msgbox, used to record user input based on clicking yes or no. The syntax to make a yes-no message box is as follows variable = MsgBox(“Text”, vbQuestion + vbYesNo + vbDefaultButton2, “Message Box Title”) where one must declare variable as an integer.
In VBA coding, we often need to collect the input values from the users to perform some tasks. One of such tasks is collecting the users’ yes or no responses. By using VBA MsgBox Yes No method, we can write the code to proceed further in the code.
In certain situations, we may need to present a “Yes” or “No” option in front of the user to give their response based on them. Then, we can run the VBA codeVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more.
For example, look at the below image of the MsgBox in VBAVBA MsgBox function is an output function which displays the generalized message provided by the developer. This statement has no arguments and the personalized messages in this function are written under the double quotes while for the values the variable reference is provided.read more.
If the user says Yes, “we can write code to perform a specific task,” and if the user says “No,” we can write code to perform another set of tasks.
Table of contents
- Excel VBA MsgBox (Yes/No)
- How to Work with MsgBox Yes/No Response?
- Example #1 – Copy and Paste based on Response
- Example #2 – Hide & Unhide Sheets Based on the Response
- Recommended Articles
- How to Work with MsgBox Yes/No Response?
How to Work with MsgBox Yes/No Response?
You can download this VBA Message Box Yes or No Excel Template here – VBA Message Box Yes or No Excel Template
Example #1 – Copy and Paste based on Response
Look at the below code.
Code:
Sub MessageBox_Yes_NO_Example1() Dim AnswerYes As String Dim AnswerNo As String AnswerYes = MsgBox("Do you Wish to Copy?", vbQuestion + vbYesNo, "User Repsonse") If AnswerYes = vbYes Then Range("A1:A2").Copy Range("C1") Else Range("A1:A2").Copy Range("E1") End If End Sub
Explanation:
The above has declared the variable as String i.e.
Dim AnswerYes As String
In the next line, we have assigned the value through a message box asking, “Do you wish to copy?”.
AnswerYes = MsgBox("Do You Wish to Copy?", vbQuestion + vbYesNo, "User Repsonse")
Now, the IF statement evaluates the response given through the message box. For example, if the message box result is vbYes, it will copy the range A1 to A2 and paste it into cell C1.
If AnswerYes = vbYes Then Range("A1:A2").Copy Range("C1")
If the response given by the message box is No, then it will copy the range A1 to A2 and paste it into cell E1.
Else Range("A1:A2").Copy Range("E1") End If
We have entered a few values in cells A1 and A2 now.
Now, we will run the code using the F5 key, or through the run option, a message box will appear in front of us and ask for our response.
If we click “Yes,” it will copy the range A1 to A2 and paste it into the C1 cell. Now, we will click on “Yes” and see the result.
So, it has performed the task assigned if the response is YES.
Now again, we will run the code.
This time we will select No and see what happens.
Yes, it performed the task assigned in the code i.e.
Else
Range("A1:A2").Copy Range("E1")
Example #2 – Hide & Unhide Sheets Based on the Response
The below code will hide all the sheets except the active sheet if the response is yes.
Code:
Sub HideAll() Dim Answer As String Dim Ws As Worksheet Answer = MsgBox("Do you Wish to Hide All?", vbQuestion + vbYesNo, "Hide") If Answer = vbYes Then For Each Ws In ActiveWorkbook.Worksheets If Ws.Name <> ActiveSheet.Name Then Ws.Visible = xlSheetVeryHidden Next Ws ElseIf Answer = vbNo Then MsgBox "You have selected not to hide the sheets", vbInformation, "No Hide" End If End Sub
The above code will hide all the worksheets except the sheet we are in right now if the response from the message box is YES.
If the response from the message box is NO, it will display the message box saying, “You have selected not to hide the sheets.”
Similarly, the below code will unhide the sheet if the response is Yes.
Code:
Sub UnHideAll() Dim Answer As String Dim Ws As Worksheet Answer = MsgBox("Do you Wish to Unhide All?", vbQuestion + vbYesNo, "Hide") If Answer = vbYes Then For Each Ws In ActiveWorkbook.Worksheets Ws.Visible = xlSheetVeryHidden Next Ws ElseIf Answer = vbNo Then MsgBox "You have selected not to Unhide the sheets", vbInformation, "No Hide" End If End Sub
It works the same as the hide sheet code. If yes, it will unhide. If not, it will not unhide.
Recommended Articles
This article has been a guide to VBA Message Box. Here, we discuss creating a Yes or No response in the Excel VBA using MsgBox, practical examples, and a downloadable Excel template. Below you can find some useful Excel VBA articles: –
- VBA Find Next
- VBA ISERROR
- VBA Collection Object
- VBA Text Function
- VBA Save As
In this Article
- VBA MsgBox Function
- VBA YesNo Message Box
- VBA Message Box Options
- Syntax of MsgBox Function
- Customize Message Box Title and Prompt
- MessageBox LineBreaks
- MsgBox Icons
- MsgBox Icons – Information
- MsgBox Icons – Critical
- MsgBox Icons – Question
- MsgBox Icons – Exclamation
- MsgBox Variables
- OK Message Box – vbOKOnly
- OK Cancel Message Box – vbOKCancel
- Yes No Message Box – vbYesNo
- Yes No Cancel Message Box – vbYesNoCancel
- Abort Retry Ignore Message Box – vbAbortRetryIgnore
- Retry Cancel Message Box – vbRetryCancel
- VBA MessageBox Examples
- Message Box Confirmation Before Running Macro
- Yes / No Message Box – Exit Sub
- VBA Message Box in Access VBA
This tutorial will cover how to use the VBA MsgBox Function to display messageboxes to users (including the YesNo Messagebox). You might also be interested in our article on InputBoxes.
VBA MsgBox Function
In VBA, it’s easy to display a simple MsgBox:
MsgBox "This is a Message Box"
However you can do a lot more than display a simple OK message box. Let’s quickly look at complicated example before we dive into specifics…
VBA YesNo Message Box
Below we will create a message box with:
- A title “Message Box Title” and prompt “Text”
- A question mark icon
- Yes / No options instead of a simple “OK”
- Default button = ‘No’
Dim answer As Integer
answer = MsgBox("Text", vbQuestion + vbYesNo + vbDefaultButton2, "Message Box Title")
The messagebox will return vbYes or vbNo depending on the user’s choice. You can then then perform different actions based on the choice:
If answer = vbYes Then
MsgBox "Yes"
Else
MsgBox "No"
End If
In the next section we will show you all of the options available to you when creating message boxes. Then we will introduce you to the syntax of the MsgBox Function and finally go over other message box examples.
VBA Message Box Options
Take a look at the image below. Here you will see (almost) all of the options available to you when creating message boxes. Take notice of the icons and the different buttons.
This is a screenshot of the “MessageBox Builder” from our Premium VBA Add-in: AutoMacro. The MessageBox Builder allows you to quickly design your desired messagebox and insert the code into your code module. It also contains many other code builders, an extensive VBA code library, and an assortment of coding tools. It’s a must-have for any VBA developer.
Syntax of MsgBox Function
MsgBox( prompt [, buttons ] [, title ] [, helpfile, context ] )
prompt (Required) – This is the primary message box text.
buttons – Choose which buttons to display. If omitted, ‘OKonly’. Here you can also specify what icon to show and the default button.
title – The title at the top of the message box. If omitted, the name of the current application is displayed (ex. Microsoft Excel).
helpfile – Specify help file that can be accessed when user clicks on the ‘Help’ button. If specified, then you must also add context (below)
context – Numeric expression representing the Help context number assigned to the appropriate Help topic.
You can probably ignore the helpfile and context arguments. I’ve never seen them used.
Customize Message Box Title and Prompt
The MsgBox function allows you to customize the title and prompt messages like so:
Msgbox "Prompt",,"Title"
Another example:
Sub MsgBoxPromptTitle()
MsgBox "Step 1 Complete. Click OK to run step 2.",, "Step 1 of 5"
End Sub
Important! You must remember to surround your text with quotations.
MessageBox LineBreaks
You can also add line breaks to your message box prompts with ‘vbNewLine’.
Sub MsgBoxPromptTitle_NewLine()
MsgBox "Step 1 Complete." & vbNewLine & "Click OK to Run Step 2.", , "Step 1 of 5"
End Sub
Notice we use the & symbol to join text together. You can learn more about using & with text and other options for inserting linebreaks in our article on joining text.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More
MsgBox Icons
VBA gives you the ability to add one of four pre-built icons to your message boxes:
Icon Constant | Icon |
---|---|
vbInformation | |
vbCritical | |
vbQuestion | |
vbExclamation |
The Icon constant should be placed within the button argument:
Sub MsgBoxQuestionIcon()
MsgBox "Question Example", vbQuestion
End Sub
This will generate the default ‘OK’ message box with the Question icon:
Notice how when you type, the VBA Editor will show you the options available to you:
This is helpful because you don’t need to remember the exact syntax or names of icons or buttons.
Now we will demo each message box icon:
MsgBox Icons – Information
Sub MsgBoxInformationIcon()
MsgBox "Information Example", vbInformation
End Sub
MsgBox Icons – Critical
Sub MsgBoxCriticalIcon()
MsgBox "Critical Example", vbCritical
End Sub
VBA Programming | Code Generator does work for you!
MsgBox Icons – Question
Sub MsgBoxQuestionIcon()
MsgBox "Question Example", vbQuestion
End Sub
MsgBox Icons – Exclamation
Sub MsgBoxExclamationIcon()
MsgBox "Exclamation Example", vbExclamation
End Sub
Below we will talk about generating message boxes with different button layouts. If you do choose a different message box type, you will need to append the icon type after the buttons using a “+”:
Sub MsgBoxQuestionIcon()
MsgBox "Do you want to continue?", vbOKCancel + vbQuestion
End Sub
MsgBox Variables
So far we have worked primarily with the default ‘OK’ message box. The OK message box only has one option: Pressing ‘OK’ allows the code to continue. However, you can also specify other button groupings: OK / Cancel, Yes / No, etc.
In which case you will want to perform different actions based on which button is pressed. Let’s look at an example.
Here is the message box we will generate:
This is the entire code (we will break it down next):
Sub MsgBoxVariable()
Dim answer As Integer
answer = MsgBox("Do you want to Continue?", vbQuestion + vbYesNo)
If answer = vbYes Then
MsgBox "Yes"
Else
MsgBox "No"
End If
End Sub
First we assign the messagebox output to an integer variable.
Dim answer As Integer
answer = MsgBox("Do you want to Continue?", vbQuestion + vbYesNo)
Next we use an If-Else to determine what to do based on which button is pressed:
If answer = vbYes Then
MsgBox "Yes"
Else
MsgBox "No"
End If
The MsgBox function returns an integer value (between 1-7) so we define the variable as an integer type. However, instead of referring to the integer number, you can refer to a constant (ex. vbOK, vbCancel, etc.). Look at this table to see all of the options:
Button | Constant | Value |
---|---|---|
OK | vbOK | 1 |
Cancel | vbCancel | 2 |
Abort | vbAbort | 3 |
Retry | vbRetry | 4 |
Ignore | vbIgnore | 5 |
Yes | vbYes | 6 |
No | vbNo | 7 |
Now we will demo each button grouping:
OK Message Box – vbOKOnly
This is the standard VBA messagebox.
Sub MsgBox_OKOnly()
Dim answer As Integer
answer = MsgBox("OKOnly Example", vbOKOnly)
End Sub
OK Cancel Message Box – vbOKCancel
Sub MsgBox_OKCancel()
Dim answer As Integer
answer = MsgBox("OK Cancel Example", vbOKCancel)
If answer = vbOK Then
MsgBox "OK"
Else
MsgBox "Cancel"
End If
End Sub
AutoMacro | Ultimate VBA Add-in | Click for Free Trial!
Yes No Message Box – vbYesNo
Sub MsgBox_YesNo()
Dim answer As Integer
answer = MsgBox("Yes No Example", vbYesNo)
If answer = vbYes Then
MsgBox "Yes"
Else
MsgBox "No"
End If
End Sub
Yes No Cancel Message Box – vbYesNoCancel
Sub MsgBox_YesNoCancel()
Dim answer As Integer
answer = MsgBox("Yes No Cancel Example", vbYesNoCancel)
If answer = vbYes Then
MsgBox "Yes"
ElseIf answer = vbNo Then
MsgBox "No"
Else
MsgBox "Cancel"
End If
End Sub
Abort Retry Ignore Message Box – vbAbortRetryIgnore
Sub MsgBox_AbortRetryIgnore()
Dim answer As Integer
answer = MsgBox("Abort Retry Ignore Example", vbAbortRetryIgnore)
If answer = vbAbort Then
MsgBox "Abort"
ElseIf answer = vbRetry Then
MsgBox "Retry"
Else
MsgBox "Ignore"
End If
End Sub
Retry Cancel Message Box – vbRetryCancel
Sub MsgBox_RetryCancel()
Dim answer As Integer
answer = MsgBox("Retry Cancel Example", vbRetryCancel)
If answer = vbRetry Then
MsgBox "Retry"
Else
MsgBox "Cancel"
End If
End Sub
AutoMacro | Ultimate VBA Add-in | Click for Free Trial!
VBA MessageBox Examples
Message Box Confirmation Before Running Macro
This code will display a Yes No Message box before calling a macro. If Yes is clicked the macro is called, if No is clicked, the Macro does not run.
Sub Msgbox_BeforeRunning()
Dim answer As Integer
answer = MsgBox("Do you want to run Macro1?", vbQuestion + vbYesNo)
If answer = vbYes Then Call Macro1
End Sub
Yes / No Message Box – Exit Sub
Here we will confirm with the user whether to continue running a macro. If No is clicked, the code will exit the sub, otherwise the procedure will continue.
Sub Msgbox_BeforeRunning()
Dim answer As Integer
answer = MsgBox("Do you want to continue?", vbQuestion + vbYesNo)
If answer = vbNo Then Exit Sub
'Some Code
End Sub
VBA Message Box in Access VBA
All of the above examples work exactly the same in Access VBA as in Excel VBA.
На чтение 10 мин. Просмотров 38.4k.
В Excel VBA вы можете использовать функцию MsgBox для отображения окна сообщения (как показано ниже):
MsgBox — это не что иное, как диалоговое окно, которое вы можете использовать для информирования своих пользователей, показывая пользовательское сообщение или получая некоторые основные входные данные (такие как Да / Нет или OK / Отмена).
Пока отображается диалоговое окно MsgBox, ваш код VBA останавливается. Вам нужно нажать любую из кнопок в MsgBox, чтобы запустить оставшийся код VBA.
Примечание: в этом уроке я буду использовать слова «окно сообщения» и MsgBox взаимозаменяемо. При работе с Excel VBA вам всегда нужно использовать MsgBox.
Содержание
- Анатомия VBA MsgBox в Excel
- Синтаксис функции VBA MsgBox
- Константы кнопки Excel VBA MsgBox (примеры)
- Константы значков Excel VBA MsgBox (примеры)
- Настройка заголовка и приглашения в MsgBox
- Присвоение значения MsgBox переменной
Анатомия VBA MsgBox в Excel
Окно сообщения состоит из следующих частей:
- Title — заголовок: обычно используется для отображения содержания окна сообщения. Если вы ничего не указали, отображается имя приложения, в данном случае Microsoft Excel.
- Prompt — подсказка: это сообщение, которое вы хотите отобразить. Вы можете использовать это пространство, чтобы написать пару строк или даже отобразить таблицы / данные здесь.
- Button(s) — кнопка(-и): хотя кнопка «ОК» является кнопкой по умолчанию, ее можно настроить таким образом, чтобы отображать такие кнопки, как «Да / Нет»; «Да / Нет / Отмена», «Повторить» / «Пропустить» и т.д.
- Close Icon — значок закрытия: Вы можете закрыть окно сообщения, нажав на значок закрытия.
Синтаксис функции VBA MsgBox
Как я уже упоминал, MsgBox является функцией и имеет синтаксис, аналогичный другим функциям VBA.
MsgBox( prompt [, buttons ] [, title ] [, helpfile, context ] )
- prompt — это обязательный аргумент. Он отображает сообщение, которое вы видите в MsgBox. В нашем примере текст «Это образец MsgBox» — это «подсказка». В приглашении можно использовать до 1024 символов, а также использовать его для отображения значений переменных. Если вы хотите показать подсказку, состоящую из нескольких строк, вы можете сделать это также (подробнее об этом позже в этом руководстве).
- [buttons ] — определяет, какие кнопки и значки отображаются в MsgBox. Например, если я использую vbOkOnly, на нем будет отображаться только кнопка OK, а если я использую vbOKCancel, на нем будут отображаться кнопки OK и Отмена. Я расскажу о различных видах кнопок позже в этом уроке.
- [title] — здесь вы можете указать заголовок в диалоговом окне сообщения. Отображается в строке заголовка MsgBox. Если вы ничего не укажете, будет показано название приложения.
- [helpfile] — вы можете указать файл справки, к которому можно получить доступ, когда пользователь нажимает кнопку «Справка». Кнопка справки появится только тогда, когда вы используете для нее код кнопки. Если вы используете файл справки, вам также необходимо указать аргумент context.
- [context] — это числовое выражение, которое является номером контекста справки, назначенным соответствующему разделу справки.
Если вы новичок в концепции Msgbox, не стесняйтесь игнорировать аргументы [helpfile] и [context]. Они редко используются.
Примечание. Все аргументы в квадратных скобках являются необязательными. Только аргумент «подсказка» является обязательным.
Константы кнопки Excel VBA MsgBox (примеры)
В этом разделе я расскажу о различных типах кнопок, которые вы можете использовать с VBA MsgBox.
Прежде чем я покажу вам код VBA для него и то, как выглядит MsgBox, вот таблица, в которой перечислены все различные константы кнопок, которые вы можете использовать.
Константа кнопки | Описание |
vbOKOnly | Показывает только кнопку ОК |
vbOKCancel | Показывает кнопки ОК и Отмена |
vbAbortRetryIgnore | Показывает кнопки «Прервать», «Повторить» и «Игнорировать» |
vbYesNo | Показывает кнопки Да и Нет |
vbYesNoCancel | Показывает кнопки Да, Нет и Отмена |
vbRetryCancel | Показывает кнопки «Повторить» и «Отменить» |
vbMsgBoxHelpButton | Показывает кнопку справки. Чтобы это работало, вам нужно использовать аргументы справки и контекста в функции MsgBox |
vbDefaultButton1 | Делает первую кнопку по умолчанию. Вы можете изменить номер, чтобы изменить кнопку по умолчанию. Например, vbDefaultButton2 делает вторую кнопку по умолчанию |
Примечание. Просматривая примеры создания различных кнопок, вы можете задаться вопросом, какой смысл использовать эти кнопки, если они не влияют на код.
Влияют! В зависимости от выбора вы можете кодировать то, что вы хотите, чтобы код делал. Например, если вы выберете «ОК», код должен продолжиться, а если вы нажмете «Отмена», код должен прекратиться. Это можно сделать с помощью переменных и присвоения значения окна сообщения переменной. Мы рассмотрим это в последующих разделах этого урока.
Теперь давайте рассмотрим несколько примеров того, как различные кнопки могут отображаться в MsgBox и как они выглядят.
Кнопки MsgBox — vbOKOnly (по умолчанию)
Если вы используете только приглашение и не указываете ни один из аргументов, вы получите окно сообщения по умолчанию, как показано ниже:
Ниже приведен код, который выдаст это окно сообщения:
Sub DefaultMsgBox() MsgBox "This is a sample box" End Sub
Обратите внимание, что текстовая строка должна быть в двойных кавычках.
Вы также можете использовать постоянную кнопку vbOKOnly, но даже если вы ничего не указали, она используется по умолчанию.
Кнопки MsgBox — ОК и Отмена
Если вы хотите показать только ОК и кнопку Отмена, вам нужно использовать константу vbOKCancel
Sub MsgBoxOKCancel() MsgBox "Want to Continue?", vbOKCancel End Sub
Кнопки MsgBox — Отмена, Повтор и Игнорирование
Вы можете использовать константу vbAbortRetryIgnore для отображения кнопок «Отмена», «Повторить» и «Игнорировать».
Sub MsgBoxAbortRetryIgnore() MsgBox "What do you want to do?", vbAbortRetryIgnore End Sub
Кнопки MsgBox — Да и Нет
Вы можете использовать константу vbYesNo для отображения кнопок Да и Нет.
Sub MsgBoxYesNo() MsgBox "Should we stop?", vbYesNo End Sub
Кнопки MsgBox — Да, Нет и Отмена
Вы можете использовать константу vbYesNoCancel для отображения кнопок «Да», «Нет» и «Отмена».
Sub MsgBoxYesNoCancel() MsgBox "Should we stop?", vbYesNoCancel End Sub
Кнопки MsgBox — повторить попытку и отменить
Вы можете использовать константу vbRetryCancel для отображения кнопок «Повторить» и «Отмена».
Sub MsgBoxRetryCancel() MsgBox "What do you want to do next?", vbRetryCancel End Sub
Кнопки MsgBox — Кнопка справки
Вы можете использовать константу vbMsgBoxHelpButton для отображения кнопки справки. Вы можете использовать его с другими константами кнопок.
Sub MsgBoxRetryHelp() MsgBox "What do you want to do next?", vbRetryCancel + vbMsgBoxHelpButton End Sub
Обратите внимание, что в этом коде мы объединили две разные константы кнопки (vbRetryCancel + vbMsgBoxHelpButton). Первая часть показывает кнопки «Повторить» и «Отмена», а вторая часть показывает кнопку «Справка».
MsgBox Buttons — Настройка кнопки по умолчанию
Вы можете использовать константу vbDefaultButton1 для установки первой кнопки по умолчанию. Это означает, что кнопка уже выбрана, и если вы нажмете Enter, она выполнит эту кнопку.
Ниже приведен код, который установит в качестве кнопки по умолчанию вторую кнопку (кнопка «Нет»).
Sub MsgBoxOKCancel() MsgBox "What do you want to do next?", vbYesNoCancel + vbDefaultButton2 End Sub
В большинстве случаев крайняя левая кнопка является кнопкой по умолчанию. Вы можете выбрать другие кнопки, используя vbDefaultButton2, vbDefaultButton3 и vbDefaultButton4.
Константы значков Excel VBA MsgBox (примеры)
Помимо кнопок, вы также можете настроить значки, отображаемые в диалоговом окне MsgBox. Например, у вас может быть красный критический значок или синий информационный значок.
Ниже приведена таблица со списком кода, который будет отображать соответствующий значок.
Константа значка | Описание |
vbCritical | Показывает значок критического сообщения |
vbQuestion | Показывает значок вопроса |
vbExclamation | Показывает значок предупреждения |
vbInformation | Показывает значок информации |
Иконки MsgBox — Критические
Если вы хотите показать критический значок в своем MsgBox, используйте константу vbCritical. Вы можете использовать ее вместе с другими константами кнопки (поставив знак + между кодами).
Например, ниже приведен код, который будет показывать кнопку ОК по умолчанию с критическим значком.
Sub MsgBoxCriticalIcon() MsgBox "This is a sample box", vbCritical End Sub
Если вы хотите показать критический значок с кнопками Да и Нет, используйте следующий код:
Sub MsgBoxCriticalIcon() MsgBox "This is a sample box", vbYesNo + vbCritical End Sub
Иконки MsgBox — Вопрос
Если вы хотите показать иконку вопроса в своем MsgBox, используйте константу vbQuestion.
Sub MsgBoxQuestionIcon() MsgBox "This is a sample box", vbYesNo + vbQuestion End Sub
Иконки MsgBox — Восклицательный знак
Если вы хотите показать восклицательный значок в вашем MsgBox, используйте константу vbExclamation.
Sub MsgBoxExclamationIcon() MsgBox "This is a sample box", vbYesNo + vbExclamation End Sub
Иконки MsgBox — Информация
Если вы хотите отобразить информационный значок в вашем MsgBox, используйте константу vbInformation.
Sub MsgBoxInformationIcon() MsgBox "This is a sample box", vbYesNo + vbInformation End Sub
Настройка заголовка и приглашения в MsgBox
При использовании MsgBox вы можете настроить заголовок и сообщения подсказок.
До сих пор в примерах, которые мы видели, использовался Microsoft Excel в качестве заголовка. Если вы не указали аргумент title, MsgBox автоматически использует заголовок приложения (в данном случае это был Microsoft Excel).
Вы можете настроить заголовок, указав его в коде, как показано ниже:
Sub MsgBoxInformationIcon() MsgBox "Do you want to continue?", vbYesNo + vbQuestion, "Step 1 of 3" End Sub
Точно так же вы также можете настроить сообщение подсказки.
Вы также можете добавить разрывы строк в сообщении подсказки.
В приведенном ниже коде я добавил разрыв строки, используя «vbNewLine».
Sub MsgBoxInformationIcon() MsgBox "Do you want to continue?" & vbNewLine & "Click Yes to Continue", vbYesNo + vbQuestion, "Step 1 of 3" End Sub
Вы также можете использовать символ возврата каретки — Chr (13) или перевод строки — Chr (10), чтобы вставить новую строку в сообщение с подсказкой.
Обратите внимание, что вы можете добавить новую строку только к сообщению, а не к заголовку.
Присвоение значения MsgBox переменной
До сих пор мы видели примеры, где мы создавали окна сообщений и настраивали кнопки, значки, заголовок и приглашение.
Однако нажатие кнопки ничего не сделало.
С помощью функции MsgBox в Excel вы можете решить, что вы хотите делать, когда пользователь нажимает определенную кнопку. И это возможно, поскольку каждая кнопка имеет значение, связанное с ней.
Поэтому, если я нажимаю кнопку «Да», функция MsgBox возвращает значение (6 или константа vbYes), которое я могу использовать в своем коде. Аналогично, если пользователь выбирает кнопку «Нет», он возвращает другое значение ((7 или константа vbNo)), которое я могу использовать в коде.
Ниже приведена таблица, которая показывает точные значения и константу, возвращаемую функцией MsgBox. Вам не нужно запоминать их, просто помните об этом, и вы можете использовать константы, которые проще в использовании.
При нажатии кнопки | Константа | Значение |
Ok | vbOk | 1 |
Cancel | vbCancel | 2 |
Abort | vbAbort | 3 |
Retry | vbRetry | 4 |
Ignore | vbIgnore | 5 |
Yes | vbYes | 6 |
No | vbNo | 7 |
Теперь давайте посмотрим, как мы можем контролировать макрос-код VBA в зависимости от того, на какую кнопку нажимает пользователь.
В приведенном ниже коде, если пользователь нажимает кнопку «Да», отображается сообщение «Вы нажали кнопку «Да», а если пользователь нажимает кнопку «Нет», отображается сообщение «Вы нажали кнопку «Нет»».
Sub MsgBoxInformationIcon() Result = MsgBox("Do you want to continue?", vbYesNo + vbQuestion) If Result = vbYes Then MsgBox "You clicked Yes" Else: MsgBox "You clicked No" End If End Sub
В приведенном выше коде я присвоил значение функции MsgBox переменной Result. Когда вы нажимаете кнопку «Да», переменная Result получает константу vbYes (или число 6), а когда вы нажимаете «Нет», переменная Result получает константу vbNo (или число 7).
Затем я использовал конструкцию If Then Else, чтобы проверить, содержит ли переменная Result значение vbYes. Если это так, отображается запрос «Вы нажали Да», в противном случае — «Вы нажали Нет».
Вы можете использовать ту же концепцию для запуска кода, если пользователь нажимает Да, и выход из подпрограммы, когда он нажимает Нет.
Примечание. Когда вы присваиваете выход MsgBox переменной, вы должны поместить аргументы функции MsgBox в круглые скобки. Например, в строке Result = MsgBox («Хотите продолжить?», VbYesNo + vbQuestion) вы можете видеть, что аргументы находятся в скобках.
Если вы хотите в дальнейшем углубиться в функцию Message Box, вот официальный документ по ней.
Хитрости »
19 Октябрь 2014 101454 просмотров
Работа с диалогами
Несомненно каждый разработчик делает работу простого пользователя хоть немного, но проще. И конечно, порой просто необходима обратная связь от пользователя при выполнении некоторых программ. О ней и хочу сегодня рассказать.
Что я имею ввиду: есть ситуации, когда необходимо:
- сообщить пользователю о выполнении кода;
- получить от пользователя подтверждение на выполнение того или иного действия;
- запросить какие-то данные(число, текст для поиска, диапазон поиска и т.п.).
Простейшие запросы и подтверждения можно сделать при помощи уже встроенных диалоговых окон.
Из основных можно выделить три типа:
MsgBox — окно информирования пользователя с возможностью запроса действия (Да, Нет, Отмена и т.п.);
InputBox — окно запроса текстовой информации от пользователя (текст для поиска, дата, число и т.п.);
Application.InputBox — чуть более расширенная версия InputBox с возможностью указания не только текста и чисел, но и выделения диапазона ячеек (например для указания ячеек, в которых осуществлять поиск значения или которые необходимо закрасить).
- Информационный диалог MsgBox
- MsgBox, автоматически закрываемый по истечении указанного времени
- Диалог ввода информации пользователем InputBox
- Диалог выбора диапазона Application.InputBox
Самый простой тип. Используется для информирования пользователя. Как правило применяется по окончании выполнения кода:
MsgBox Promt, [Buttons], [Title], [HelpFile], [Context]
Обязательным к указанию является только первый параметр —
Promt
, в котором указывается непосредственно сообщение для вывода:
MsgBox "Обработка завершена"
Все остальные параметры указывать не обязательно, но их использование несколько расширяет возможности данного диалогового окна.
Buttons — указывается тип выводимых кнопок и стиль окна. По умолчанию применяется vbOKOnly — одна только кнопка Ок:
'показываем окно с кнопкой по умолчанию и типом важного сообщения MsgBox "Обработка завершена", vbCritical
Доступны значения:
Значение | Числовая константа | Описание |
---|---|---|
vbOKOnly | 0 | Отображает только кнопку OK |
vbOKCancel | 1 | Отображает кнопки ОК и Отмена |
vbAbortRetryIgnore | 2 | Отображает кнопки Прервать, Повтор и Пропустить |
vbYesNoCancel | 3 | Отображает кнопки Да, Нет и Отмена |
vbYesNo | 4 | Отображает кнопки Да и Нет |
vbRetryCancel | 5 | Отображает кнопки Повтор и Отмена |
vbCritical | 16 | Отображает значок важного сообщения |
vbQuestion | 32 | Отображает значок важного запроса |
vbExclamation | 48 | Отображает значок предупреждающего сообщения |
vbInformation | 64 | Отображает значок информационного сообщения |
vbDefaultButton1 | 0 | По умолчанию выделена первая кнопка |
vbDefaultButton2 | 256 | По умолчанию выделена вторая кнопка |
vbDefaultButton3 | 512 | По умолчанию выделена третья кнопка |
vbDefaultButton4 | 768 | По умолчанию выделена четвертая кнопка |
vbApplicationModal | 4098 | Все приложения приостанавливают свою работу до момента, пока пользователь ответит на запрос в окне сообщения (работает не во всех случаях) |
vbMsgBoxHelpButton | 16384 | Показываются кнопки Ок и Help |
Константы Buttons могут быть объединены между собой. Ниже приведен код, который показывает диалоговое окно с возможностью выбора одного из трех вариантов — Прервать, Повтор, Пропустить:
'--------------------------------------------------------------------------------------- ' Procedure : test ' DateTime : 19.10.2014 19:24 ' Author : The_Prist(Щербаков Дмитрий) ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' http://www.excel-vba.ru ' Purpose : Процедура показывает диалоговое окно с возможностью выбора одного из трех вариантов: ' Прервать, Повтор, Пропустить ' По умолчанию выделена кнопка Прервать, т.к. иное не указано '--------------------------------------------------------------------------------------- Sub test() Dim lRetVal As Long 'для получения выбранного значения Retry_: lRetVal = MsgBox("Обработка завершена", vbAbortRetryIgnore + vbQuestion) Select Case lRetVal Case vbAbort '3/Прервать/Abort Exit Sub 'выходим из процедуры Case vbRetry '4/Повтор/Retry GoTo Retry_ 'переход на метку Retry_ Case vbIgnore '5/Пропустить/Ignore End Select End Sub
Следующий код показывает то же окно, но по умолчанию выделяет кнопку Пропустить
'--------------------------------------------------------------------------------------- ' Procedure : test ' DateTime : 19.10.2014 19:24 ' Author : The_Prist(Щербаков Дмитрий) ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' http://www.excel-vba.ru ' Purpose : Процедура показывает диалоговое окно с возможностью выбора одного из трех вариантов: ' Прервать, Повтор, Пропустить ' По умолчанию выделена кнопка Пропустить(3-я по счету - значит vbDefaultButton3) '--------------------------------------------------------------------------------------- Sub test() Dim lRetVal As Long 'для получения выбранного значения Retry_: lRetVal = MsgBox("Обработка завершена", vbAbortRetryIgnore + vbQuestion + vbDefaultButton3) Select Case lRetVal Case vbAbort '3/Прервать/Abort Exit Sub 'выходим из процедуры Case vbRetry '4/Повтор/Retry GoTo Retry_ 'переход на метку Retry_ Case vbIgnore '5/Пропустить/Ignore End Select End Sub
Вместо текстового представления констант можно применить их числовые значения:
Sub test() Dim lRetVal As Long 'для получения выбранного значения Retry_: lRetVal = MsgBox("Обработка завершена", 2 + 32 + 512) Select Case lRetVal Case 3 'vbAbort Exit Sub 'выходим из процедуры Case 4 'vbRetry GoTo Retry_ 'переход на метку Retry_ Case 5 'vbIgnore End Select End Sub
Нетрудно после этого предположить, что можно указать просто сумму данных чисел:
MsgBox "Обработка завершена", 546
Доступные константы значений возврата:
Константа | Значение | Нажатая кнопка |
---|---|---|
vboK | 1 | ОК |
vbCancel | 2 | Отмена |
vbAbort | 3 | Прервать |
vbRetry | 4 | Повтор |
vblgnore | 5 | Пропустить |
vbYes | 6 | Да |
vbNo | 7 | Нет |
Title — указывается текст заголовка окна. Например, можно указать либо что это ошибка, либо имя своего приложения:
MsgBox "Обработка завершена", vbOKOnly, "Мое приложение"
HelpFile — указывается имя файла-справки в формате HLP. Применяется, если параметр Buttons указан как vbMsgBoxHelpButton. Файл справки должен существовать.
Context — целое число. Указывается индекс страницы файла-справки, которую необходимо открыть. Указывается только если указан параметр HelpFile.
Небольшой практический пример применения простого диалогового окна MsgBox.
Цель процедуры(макроса): очистить все ячейки листа.
Согласитесь, что неплохо бы перед этим запросить у пользователя решение — он согласен с этим и это является обдуманным решением или случайностью?
'--------------------------------------------------------------------------------------- ' Procedure : ClearRange ' DateTime : 19.10.2014 20:06 ' Author : The_Prist(Щербаков Дмитрий) ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' http://www.excel-vba.ru ' Purpose : '--------------------------------------------------------------------------------------- Sub ClearRange() Dim lRetVal As Long 'для получения выбранного значения lRetVal = MsgBox("Все данные выделенных ячеек будут удалены." & _ Chr(10) & "Действительно хотите продолжить?", _ vbYesNo + vbQuestion, "Запрос на выполнение") If lRetVal = vbNo Then Exit Sub 'выходим из процедуры без выполнения End If Selection.Clear End Sub
Так же на странице Полезные программы для Excel и VBA можно найти программу MsgBox Generator, которая просто и наглядно формирует коды показа MsgBox.
Диалог MsgBox удобен, если надо проинформировать пользователя о каких-то событиях или предоставить ему выбор Да или Нет. Но в тоже время есть один недостаток: этот диалог не закроется, пока пользователь не нажмет хоть какую-то кнопку. Но бывает необходимо просто проинформировать и закрыть окно независимо от реакции пользователя. Показали окно, подождали секунд 5-7 и даже если пользователь ничего не нажал — закрыли окно и продолжили выполнение кода. Стандартно такой опции в MsgBox нет. Однако можно использовать функции API(это встроенные в ОС Windows функции, которые можно вызывать из любого языка программирования).
Код такого диалога:
Declare Function MessageBoxTimeOut Lib "User32" Alias "MessageBoxTimeoutA" _ (ByVal hwnd As Long, ByVal lpText As String, _ ByVal lpCaption As String, ByVal uType As VbMsgBoxStyle, _ ByVal wLanguageId As Long, ByVal dwMilliseconds As Long) As Long Sub AutoCloseMsgBox() Const lSeconds As Long = 5 MessageBoxTimeOut 0, "Отчет сформирован. Это окно закроется автоматически через 5 секунд", "www.excel-vba.ru", _ vbInformation + vbOKOnly, 0&, lSeconds * 1000 End Sub
Основную роль здесь играет строка:
Declare Function MessageBoxTimeOut Lib "User32" Alias "MessageBoxTimeoutA" _ (ByVal hwnd As Long, ByVal lpText As String, _ ByVal lpCaption As String, ByVal uType As VbMsgBoxStyle, _ ByVal wLanguageId As Long, ByVal dwMilliseconds As Long) As Long
это и есть сама функция, создающая MsgBox.
Главное: эта строка должна располагаться в самом верху стандартного модуля(в области объявлений, перед всеми процедурами и функциями).
Так же следует помнить, что это функция API и в некоторых версиях Excel именно в таком виде может не работать — вся строка будет подсвечена красным. Если проявился такой эффект, то можно просто добавить ключевое слово PtrSafe, отвечающее за совместимость функции с 64-битными ОС:
Declare PtrSafe Function MessageBoxTimeOut Lib "User32" Alias "MessageBoxTimeoutA" _ (ByVal hwnd As Long, ByVal lpText As String, _ ByVal lpCaption As String, ByVal uType As VbMsgBoxStyle, _ ByVal wLanguageId As Long, ByVal dwMilliseconds As Long) As Long
Помимо очевидного текста сообщения и заголовка, который можно заменить на свой, главное внимание уделим константе lSeconds. Она отвечает за количество секунд показа сообщения. В примере выше сообщение будет показано на 5 секунд, после чего закроется само собой, если ранее не была нажата кнопка Ок.
Если необходимо показать сообщение на 10 секунд, то надо лишь заменить 5 на 10:
Const lSeconds As Long = 10
Параметр uType работает точно так же, как параметр Buttons у стандартного MsgBox. Т.е. можно комбинировать различные виды кнопок и использовать этот MsgBox как стандартный, но при этом закрыть его автоматически, если пользователь случайно «уснул» или ему лень/некогда что-то нажимать:
Sub AutoCloseMsgBox() Const lSeconds As Long = 10 Dim retval retval = MessageBoxTimeOut(0, "Файлы обработаны. Вывести список?" & vbNewLine & _ "Если действие не будет выбрано окно закроется через 10 секунд", "www.excel-vba.ru", _ vbInformation + vbYesNo, 0&, lSeconds * 1000) If retval = 6 Then 'была нажата кнопка Да(Yes) 'выводим отчет Else 'была нажата кнопка Нет(No) или окно закрылось само 'другое действие End If End Sub
InputBox
позволяет запросить от пользователя любую текстовую информацию.
InputBox Promt, [Title], [DefaultValue], [XPos], [YPos], [HelpFile], [Context]
Так же как и с MsgBox обязательным аргументом для указания является только
Promt
— это тот текст, который будет расположен непосредственно на самой форме диалога. Как правило это пояснение, что должен ввести пользователь.
Dim vRetVal 'для получения выбранного значения vRetVal = InputBox("Укажите значение для поиска:", "Запрос данных", "") If vRetVal = "" Then Exit Sub 'завершаем процедуру, если строка пуста
Title — текст, отображаемый в заголовке окна. В приведенном выше примере это «Запрос данных».
DefaultValue — значение, которое будет показано в поле ввода до указания значения пользователем. Как правило оно указывается в случаях, когда требуемое значение изменяется редко по запросу пользователя, но возможность такую оставить все же требуется.
Пример: необходимо по нажатию кнопки удалять всегда столбец 5. Но иногда столбец в отчете смещается и требуется запрашивать у пользователя реальный номер столбца:
Sub DelCols() Dim vRetVal 'для получения выбранного значения vRetVal = InputBox("Укажите номер столбца для удаления(целое число):", "Запрос данных", 5) 'используем Val для преобразования текста vRetVal в число 'Val() преобразует число как текст в число. 'Если указан текст(например "третий") - он будет преобразован в 0 vRetVal = Val(vRetVal) If Val(vRetVal) = 0 Then MsgBox "Номер столбца должен быть целым числом больше нуля!", vbCritical, "DelCols" Exit Sub End If Columns(vRetVal).Delete End Sub
Важно знать: InputBox всегда возвращает только текст. Даже если указать — 5 — он вернет «5». В некоторых случаях это может привести к ошибке типов данных, поэтому я привел выше один из примеров преобразования типов данных к нужному.
Так же по прошествии какого-то времени появится вопрос, как отследить нажатие кнопки Отмена. Ведь ориентир на vRetVal = «» не всегда верен, иногда надо принять пустое значение(в случаях, скажем, замены значений) и отследить именно нажатие Отмена. Сделать это можно так:
vRetVal = InputBox("Укажите номер столбца для удаления(целое число):", "Запрос данных", "") If StrPtr(vRetVal) = 0 Then MsgBox "Нажата кнопка Отмена. Процедура прервана", vbCritical, "DelCols" Exit Sub End If
Больше всего вопросов здесь явно вызовет StrPtr. Эта специальная функция VBA, которая указывает, что переданы некие строковые данные. Если никаких данных не передавалось(а в случае с нажатием кнопки Отмена так и есть) указатель вернет 0. Если какие-то данные были переданы или нажата кнопка Ок(автоматом будет передана строка нулевой длины) — указатель StrPtr вернет значение отличное от нуля.
XPos — положение окна InputBox в твипах по горизонтали относительно левого края экрана. Следует учитывать, что именно относительно экрана, а не окна Excel.
YPos — положение окна InputBox в твипах по вертикали относительно верхнего края экрана.
HelpFile — указывается имя файла-справки в формате HLP. В отличие от MsgBox указание файла допускается при любых значениях. При этом к уже имеющимся в InputBox кнопкам добавляется еще одна — Help, которая и отвечает за вызов справки.
Context — целое число. Указывается индекс страницы файла-справки, которую необходимо открыть при нажатии кнопки Help. Указывается только если указан параметр HelpFile.
В дополнение приведу классический пример применения InputBox — выполнение процедуры только после введения пароля:
Sub ClearAllCells() Dim vRetVal vRetVal = InputBox("Введите пароль:", "Авторизация", "") If StrPtr(vRetVal) = 0 Then 'Нажата кнопка Отмена Exit Sub End If 'если пароль неверный - завершаем процедуру без выполнения действий If vRetVal <> "1234" Then MsgBox "Введенный пароль неверный", vbCritical, "ClearAllCells" Exit Sub End If 'будет выполнено только если введен правильный пароль - 1234 'полная очистка всех ячеек активного листа ActiveSheet.Cells.Clear End Sub
А вот еще один пример применения — запрос имени пользователя и запись его в лист LOG, чтобы можно было отследить кто и когда открывал файл. При этом если пользователь нажал Отмена, то книга закроется, а если не укажет имя пользователя — появится сообщение и заново запрос. И так до тех пор, пока имя пользователя не будет введено или не будет нажата кнопка Отмена:
Private Sub Workbook_Open() 'ThisWorkbook - Обращение к книге с кодом 'Но из модуля самой книги можно обращаться и проще - Me ThisWorkbook.Visible = False Dim user As String, lastrow As Long 'цикл, пока не будут указаны данные пользователя Do While user = "" user = InputBox("Введите имя пользователя:", "Авторизация", "") If StrPtr(user) = 0 Then MsgBox "Приложение будет закрыто", vbCritical, "Авторизация" ThisWorkbook.Close Exit Sub End If If user = "" Then MsgBox "Не указано имя пользователя!", vbCritical, "Авторизация" End If Loop With ThisWorkbook.Worksheets("LOG") 'получаем последнюю заполненную ячейку на листе "LOG" lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row 'записываем имя пользователя .Cells(lastrow + 1, 1) = user 'записываем время входа .Cells(lastrow + 1, 2) = Now End With End Sub
Что важно: этот код записывается в модуль ЭтаКнига(ThisWorkbook) и тогда при любом открытии книги будет появляться запрос на имя пользователя.
Так же некоторые примеры применения InputBox можно найти в статьях на сайте. Например:
Как удалить строки по условию?
Как массово изменить гиперссылки?
ДИАЛОГ ВВОДА ИНФОРМАЦИИ ПОЛЬЗОВАТЕЛЕМ — APPLICATION.INPUTBOX
В общем-то данный диалог мало отличается от обычного InputBox, за исключением типов возвращаемых данных. У данного диалога намного богаче функционал определения типов данных.
InputBox Promt, [Title], [DefaultValue], [Left], [Top], [HelpFile], [HelpContextID], [Type]
почти все параметры аналогичны таким же параметрам в InputBox.
Promt — текст, отображаемый на самой форме. Иначе говоря — сама суть показа диалога.
Title — текст, отображаемый в заголовке окна. В приведенном выше примере это «Запрос данных».
DefaultValue — значение, которое будет показано в поле ввода до указания значения пользователем.
Left — положение окна InputBox в поинтах по горизонтали относительно левого края экрана. В отличие от простого InputBox положение определяется на основании расположения самого окна Excel, а не экрана.
Top — положение окна InputBox в твипах по вертикали относительно верхнего края экрана.
HelpFile — указывается имя файла-справки в формате HLP. В отличие от MsgBox указание файла допускается при любых значениях. При этом к уже имеющимся в InputBox кнопкам добавляется еще одна — Help, которая и отвечает за вызов справки. Сам вызов справки осуществляется путем нажатия на иконку со знаком вопроса в заголовке диалога.
HelpContextID — целое число. Указывается индекс страницы файла-справки, которую необходимо открыть при нажатии кнопки Help. Указывается только если указан параметр HelpFile.
Type — целое число. Указывается одно из предустановленных значений, указывающих диалогу Application.InputBox тип данных, которые предполагается получить от пользователя. Ниже приведен листинг кода, демонстрирующий запрос данных всех типов с описанием ограничений и нюансов.
Dim vRetVal 'для получения выбранного значения 'запрос формулы - Type:=0 'возвращает либо произвольный текст, указанный в поле или ссылку на указанную ячейку в стиле R1C1 vRetVal = Application.InputBox("Укажите формулу:", "Запрос данных", "", Type:=0) 'запрос числа - Type:=1 'возвращает число. Не даст ввести текст, выдав сообщение об ошибке vRetVal = Application.InputBox("Укажите любое число:", "Запрос данных", "", Type:=1) 'запрос текст - Type:=2 'возвращает указанный текст. При указании числа оно будет в виде текста: 1="1" vRetVal = Application.InputBox("Укажите любой текст:", "Запрос данных", "", Type:=2) 'запрос логического значения True или False - Type:=4 'значение указывает в текущей локализации офиса 'для русской это ИСТИНА или ЛОЖЬ 'так же можно указать универсальные числовые константы - 1 или 0. 1 - ИСТИНА; 0 - ЛОЖЬ 'Не даст ввести иные значения, выдав сообщение об ошибке 'возвращает указанное логическое значение в английской локализации vRetVal = Application.InputBox("Укажите ИСТИНА или ЛОЖЬ:", "Запрос данных", "", Type:=4) 'запрос диапазона - Type:=8 'возвращает ссылку на диапазон 'При получении такого значения обязательно следует использовать оператор Set 'В противном случае вернет значение массива(Array), содержащего значения указанных ячеек 'при указании через Set и нажатии Отмена будет ошибка VBA Set vRetVal = Application.InputBox("Укажите диапазон для очистки ячеек:", "Запрос данных", "", Type:=8) 'запрос значения ошибки #Н/Д - Type:=16 'всегда возвращает значение ошибки #Н/Д независимо от введенного значения vRetVal = Application.InputBox("Укажите диапазон для очистки ячеек:", "Запрос данных", "", Type:=16) 'запрос диапазона ячеек для создания массива - Type:=64 'возвращает массив ячеек с границами начала от 1(Option Base 1) 'если указать всего одну ячейку vRetVal будет содержать значение этой ячейки, а не массив vRetVal = Application.InputBox("Укажите диапазон для создания массива:", "Запрос данных", "", Type:=64)
Конечно, чаще всего используют Type:=8, т.к. это избавляет от необходимости рисования своих форм и прочих заморочек для запроса указания диапазона от пользователя. Еще раз обращаю внимание, что для Type:=8 необходим ключевой оператор присвоения Set, т.к. в результате необходимо получить именно диапазон(т.е. объект). Ниже приведена процедура, которая запрашивает диапазон для очистки и корректно обрабатывает ситуацию при нажатии кнопки Отмена(т.е. не показывает никаких ошибок пользователю, а просто не выполняется). Стандартно при нажатии Отмена процедура завершается с ошибкой VBA вида Type Mismatch, что не очень грамотно с точки зрения взаимодействия с пользователем — он не должен видеть внутренние ошибки:
'--------------------------------------------------------------------------------------- ' Procedure : ClearCells ' DateTime : 19.10.2014 22:53 ' Author : The_Prist(Щербаков Дмитрий) ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' http://www.excel-vba.ru ' Purpose : ' Запрашиваем диапазон ячеек для очистки. ' По умолчанию заносится диапазон выделенных на момент запуска ячеек '--------------------------------------------------------------------------------------- Sub ClearCells() Dim vRetVal 'для получения выбранного значения On Error Resume Next Set vRetVal = Application.InputBox("Укажите диапазон для очистки ячеек:", "Запрос данных", Selection.Address, Type:=8) If vRetVal Is Nothing Then 'нажата кнопка Отмена - диапазон не выбран MsgBox "Отмена выполнения", vbCritical, "Нет данных" Exit Sub 'завершаем процедуру, т.к. ячейки не выбраны End If 'диапазон выбран - очищаем ячейки vRetVal.Clear End Sub
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика