Содержание
- Метод Application.InputBox (Excel)
- Синтаксис
- Параметры
- Возвращаемое значение
- Примечания
- Пример
- Поддержка и обратная связь
- VBA Excel. Функции для работы с датой и временем
- Функция Date
- Функция DateAdd
- Функция DateDiff
Метод Application.InputBox (Excel)
Отображает диалоговое окно для данных, вводимых пользователями. Возвращает данные, введенные в диалоговом окне.
Синтаксис
expression.InputBox (Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)
выражение: переменная, представляющая объект Application.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Prompt | Обязательно | String | Сообщение, которое отображается в диалоговом окне. Это может быть строка, число, дата или логическое значение (Microsoft Excel автоматически переводит значение в тип String перед отображением). Максимальная длина сообщения составляет 255 символов, в противном случае запрос не выводится, а метод приложения сразу же возвращает ошибку 2015. |
Title | Необязательный | Variant | Название поля для ввода. Если этот аргумент пропущен, используется заголовок по умолчанию «Ввод». |
Default | Optional | Variant | Задает значение, которое будет отображаться в текстовом поле при первоначальном отображении диалогового окна. Если этот аргумент пропущен, текстовое поле остается пустым. Это значение может представлять собой объект Range объекта. |
Left | Необязательный | Variant | Указывает положение по оси x для диалогового окна по отношению к левому верхнему углу экрана в пунктах. |
Top | Необязательный | Variant | Указывает положение по оси y для диалогового окна по отношению к левому верхнему углу экрана в пунктах. |
HelpFile | Optional | Variant | Имя файла справки для этого поля ввода. При наличии аргументов HelpFile и HelpContextID, кнопка «Справка» будет отображаться в диалоговом окне. |
HelpContextID | Optional | Variant | Номер идентификатора контекста раздела справки в HelpFile. |
Type | Необязательный | Variant | Задает тип возвращаемых данных. Если этот аргумент опущен, диалоговое окно возвращает текст. |
Возвращаемое значение
Примечания
В таблице ниже перечислены значения, которые можно передать в аргументе Type. Это может быть одиночное значение или сумма значений. К примеру, для поля ввода, которое допускает ввод текста и чисел, задайте для аргумента Type значение 1 + 2.
Значение | Описание |
---|---|
0 | Формула |
1 | Число |
2 | Текст (строка) |
4 | Логическое значение (правда или ложь) |
8 | Ссылка на ячейку в виде объекта Range |
16 | Значение ошибки, например, #N/A |
64 | Массив значений |
Используйте InputBox для отображения простого диалогового окна, что позволит вам вводить данные, которое можно будет использоваться в макросе. Диалоговое окно имеет кнопку ОК и кнопку Отмена. При выборе кнопки ОКInputBox возвращает значение, введенное в диалоговом окне. При выборе кнопки ОтменаInputBox возвращает значение Ложь.
Если значение Type равно 0, InputBox возвращает формулу в виде текста, например, =2*PI()/360 . Если в формуле есть все ссылки, они возвращаются в качестве ссылки в стиле A1. (Используйте ConvertFormula для преобразования стиля ссылок.)
Если значение Type равно 8, InputBox возвращает объект Range. Необходимо использовать оператор Set, чтобы назначить результат для объекта Range, как показано в приведенном ниже примере.
Если не используется оператор Set, для переменной устанавливается значение в диапазоне, а не сам объект Range.
Если вы используете метод InputBox для запроса формулы у пользователя, необходимо использовать свойство FormulaLocal, чтобы назначить формулу для объекта Range. Ввод формулы будет выполняться на языке пользователя.
Метод InputBox отличается от функции InputBox тем, что он позволяет выполнять выборочную проверку вводимых пользователем значений и его можно использовать с объектами, значениями ошибок и формулами Excel. Обратите внимание, что Application.InputBox вызывает метод InputBox; InputBox без квалификатора объекта вызывает функцию InputBox.
Пример
В этом примере у пользователя запрашивается число.
В этом примере пользователю предлагается выбрать ячейку на Листе1. В примере используется аргумент Type, чтобы гарантировать. что возвращаемое значение будет допустимой ссылкой на ячейку (объект Range).
В этом примере используется метод InputBox для пользователя, чтобы выделить диапазон для передачи определяемой пользователем функции MyFunction, которая умножает три значения в диапазоне и возвращает результат.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
VBA Excel. Функции для работы с датой и временем
Функции для работы с датой и временем в VBA Excel. Синтаксис, параметры, спецсимволы, примеры. Функции, возвращающие текущие дату и время по системному таймеру.
Функция Date
Синтаксис
Пример
Функция DateAdd
Синтаксис
Параметры
Параметр | Описание |
---|---|
interval | Обязательный параметр. Строковое выражение из спецсимволов, представляющее интервал времени, который требуется добавить. |
number | Обязательный параметр. Числовое выражение, задающее количество интервалов, которые необходимо добавить. Может быть как положительным (возвращается будущая дата), так и отрицательным (возвращается предыдущая дата). |
date | Обязательный параметр. Значение типа Variant/Date или литерал, представляющий дату, к которой должен быть добавлен интервал. |
Таблицу аргументов (значений) параметра interval смотрите в параграфе «Приложение 1».
Примечание к таблице аргументов: три символа – y, d, w – указывают функции DateAdd на один день, который необходимо прибавить к исходной дате number раз.
Пример
Функция DateDiff
Синтаксис
Параметры
Параметр | Описание |
---|---|
interval | Обязательный параметр. Строковое выражение из спецсимволов, представляющее интервал времени, количество которых (интервалов) требуется вычислить между двумя датами. |
date1, date2 | Обязательные параметры. Значения типа Variant/Date , представляющие две даты, между которыми вычисляется количество указанных интервалов. |
firstdayofweek | Необязательный параметр. Константа, задающая первый день недели. По умолчанию – воскресенье. |
firstweekofyear | Необязательный параметр. Константа, задающая первую неделю года. По умолчанию – неделя, в которую входит 1 января. |
Таблицу аргументов (значений) параметра interval смотрите в параграфе «Приложение 1».
Примечание к таблице аргументов: в отличие от функции DateAdd , в функции DateDiff спецсимвол «w» , как и «ww» , обозначает неделю. Но расчет осуществляется по разному. Подробнее об этом на сайте разработчиков.
Параметры firstdayofweek и firstweekofyear определяют правила расчета количества недель между датами.
Таблицы констант из коллекций firstdayofweek и firstweekofyear смотрите в параграфах «Приложение 2» и «Приложение 3».
Источник
iba2004 Пользователь Сообщений: 1034 |
Здравствуйте! |
Daulet Пользователь Сообщений: 626 |
Private Sub TextBox_SearchText_Exit(ByVal Cancel As MSForms.ReturnBoolean) If .Value Like «##.##.####» = True And IsDate(.Value) = True Then |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
{quote}{login=iba2004}{date=22.09.2012 07:31}{thema=Заполнение TextBox в UserForm в формате дата}{post}Я понимаю, что проще, наверное, вывести MsgBox…{/post}{/quote}Проще при клике по TextBox вызывать календарь, при помощи которого заполнять TextBox — исключаем ошибки. |
iba2004 Пользователь Сообщений: 1034 |
2 ABC 2 Юрий М |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Небольшой пример на основе календаря из стандартных элементов (автор календаря Слэн). |
iba2004 Пользователь Сообщений: 1034 |
2 ABC |
iba2004 Пользователь Сообщений: 1034 |
2 Юрий М |
iba2004 Пользователь Сообщений: 1034 |
2 Юрий М |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Только там нужно будет добавить проверку на тот случай, если пользователь закрыл календарь крестиком. Вот в этом случае выдавать предупреждение. |
iba2004 Пользователь Сообщений: 1034 |
2 Юрий М |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Если правильно понял вопрос: правый клик по форме — Tab Order и перемещайте контролы в нужной очерёдности. Ещё можно поменять в свойствах каждого контрола его TabIndex, но это дольше. Если нужно принудительно на какой-то операции, то НужныйКонтрол.SetFocus |
iba2004 Пользователь Сообщений: 1034 |
2 Юрий М |
iba2004 Пользователь Сообщений: 1034 |
Вот! Написал симбиоз!!! Ещё раз Спасибо АВС и Юрию. Я использовал помощь обоих. Если кому нужно, не стесняйтесь, берите файл. Но м.б. будут найдены какие-то недостатки. Удачи! |
Daulet Пользователь Сообщений: 626 |
попробуйте так Private Sub UserForm_Activate() |
iba2004 Пользователь Сообщений: 1034 |
2 ABC |
iba2004 Пользователь Сообщений: 1034 |
Ещё раз выклыдываю файл, теперь в архиве. На радостях не обратил внимания, что он на 3 кило тяжелее, оговоренных Правил |
Daulet Пользователь Сообщений: 626 |
когда ТекстБокс пуст, календарь показывает сегодняшний день |
iba2004 Пользователь Сообщений: 1034 |
2 ABC |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
1. Запретить вообще ввод с клавиатуры (раз уж используем календарь). |
iba2004 Пользователь Сообщений: 1034 |
2 Юрий М |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
«Шеф сказал — пусть будет уголовник» (с) |
Guest Гость |
#22 23.09.2012 15:57:25 2 Юрий М |
Распознование ввода в textbox только даты или даты и времени |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
- Remove From My Forums
-
Question
-
Simple,
our client want to have a date mask as
DD/MM/YYYY mask in the text box
I can validate if the values are fine easily.
However is there a way to have a mask showing
__/__/____
so use can only input numbers on the _ ?
Normally it works in Access vba but this seems to be nowhere to be found in Excel vba.
Answers
-
Hi
Okol-Gui,You had mentioned that,»I can validate if the values are fine easily.However is there a way to have a mask showing.so use can only input numbers on the _ ?»
I find one example from old thread and try to modify it as per your requirement.
You can try to refer code below.
Dim NewString, MyString, mask As String Dim position, pos As Variant Private Sub TextBox1_Change() If IsNumeric(Right(TextBox1.Text, 2)) And Len(TextBox1.Text) >= 11 Then TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1) Else position = TextBox1.SelStart MyString = TextBox1.Text pos = InStr(1, MyString, "_") If pos > 0 Then NewString = Left(MyString, pos - 1) Else NewString = MyString End If If Len(NewString) < 11 Then TextBox1.Text = NewString & Right(mask, Len(mask) - Len(NewString)) TextBox1.SelStart = Len(NewString) End If End If If Len(TextBox1.Text) >= 11 Then TextBox1.Text = Left(TextBox1.Text, 10) End If End Sub Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim strDate As String strDate = Me.TextBox1 If IsDate(strDate) Then strDate = Format(CDate(strDate), "DD/MM/YYYY") MsgBox strDate Else MsgBox "Wrong date format" End If End Sub Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) position = TextBox1.SelStart If KeyCode = 8 Then TextBox1.Text = mask End If End Sub Private Sub UserForm_Initialize() TextBox1.SelStart = 0 mask = "__/__/____" TextBox1.Text = mask End Sub
Output:
Reference:
Text Box With Input Mask
Disclaimer: This response contains a reference to a third party World Wide Web site. Microsoft is providing this information as a convenience to you. Microsoft does not control these sites and has not tested any software or information found on these sites;
therefore, Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information found there. There are inherent dangers in the use of any software found on the Internet, and Microsoft cautions you to make sure
that you completely understand the risk before retrieving any software from the Internet.Regards
Deepak
MSDN Community Support
Please remember to click «Mark as Answer» the responses that resolved your issue, and to click «Unmark as Answer» if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to
MSDN Support, feel free to contact MSDNFSF@microsoft.com.-
Marked as answer by
Tuesday, April 10, 2018 1:58 PM
-
Marked as answer by
We often use VBA userforms to enter data. These userforms contain
various types of controls such as combo boxes, textboxes, command
buttons etc. Among them textboxes are a commonly used control type in
userforms. So today I am going to explain you a cool trick you can use
in VBA textboxes. This will be very useful when you use text boxes to
input dates. we can enter dates in various formats such as
dd/mm/yyyy, mm/dd/yyyy, mm/dd/yy etc. but there are situations where
we need to tell our user to enter date in only particular format. So
how we can give this message to our users. We can do it simply
like this
When you show the form you can put date format inside the textbox. This can be done by assigning the relevant value to textbox in userform’s initialise event. Below is the code you can use for that.
Private Sub UserForm_Initialize()
txtStart.Value = «DD/MM/YYYY»
End Sub
But it will be a little difficult if user need to delete this value every time he or she want to enter a date. Then your application won’t be user friendly. So the best thing is to find a way to clear the textbox when user click on it. We can do this easily using textbox MouseDown event. Here below is the code you can use for that.
Private Sub txtStart_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If StrComp(txtStart.Value, «DD/MM/YYYY», vbTextCompare) = 0 Then
txtStart.Value = «»
End If
End Sub
I will explain you why I have used if statement here. Sometimes user can unintentionally click on the textbox after entering the correct date. And sometimes user may need to correct a part of the date if he or she has entered it incorrectly. Because of that, we need to check the current value of the text box before clear it. So that’s why I have used a if statement before clear the value. Then it will clear the value of the textbox only if it find DD/MM/YYYY.