Kirill Gureev Пользователь Сообщений: 653 |
#1 07.08.2018 22:31:03 Уважаемые коллеги.
Объясните мне, пожалуйста, что такое свойство Tag и что тут вообще происходит в условии? P.S. Было бы здорово, если бы Вы подсказали как ещё добавить разрешение на ввод десятичного знака. Изменено: Kirill Gureev — 07.08.2018 22:31:50 |
||
Karataev Пользователь Сообщений: 2306 |
#2 07.08.2018 22:39:19 Я предлагаю Вам использовать этот код, я думаю, что его достаточно для Вашей задачи. Десятичный разделитель запятая (код 44).
Изменено: Karataev — 08.08.2018 07:44:12 |
||
Logistic Пользователь Сообщений: 741 |
Как вариант Прикрепленные файлы
|
Karataev, очень странно, что Вы говорите, что этот код не надо использовать. Результат он даёт… почему бы и нет. Взят он также в какого-то форума с этим же вопросом… но вот что делает условие — не понятно. Также, если уж не совсем я обнаглел, как запретить больше одного ввода запятой? Изменено: Kirill Gureev — 07.08.2018 22:53:14 |
|
Karataev Пользователь Сообщений: 2306 |
Мне Ваш код кажется сложным для понимания, поэтому я Вам советую использовать мой код. Изменено: Karataev — 08.08.2018 07:45:02 |
Logistic, спасибо. Очень понятно. |
|
Karataev Пользователь Сообщений: 2306 |
#7 07.08.2018 22:59:24
|
||
Karataev, сударь, не сводите меня с ума! |
|
Karataev Пользователь Сообщений: 2306 |
Да, путаница возникла с именами текстобоксом. У меня TextBox1, в Вашем посте 1 TextBox3. У меня Ваш код просто не запускался. |
Kirill Gureev Пользователь Сообщений: 653 |
#10 07.08.2018 23:06:41 Karataev, согласен)
|
||
Karataev Пользователь Сообщений: 2306 |
#11 07.08.2018 23:11:53 Смысл Вашего кода такой. В тег запоминается число, которое было ранее записано в TextBox. Если в TextBox’е появляется нечисло, то в TextBox записываются данные из тега, т.е. число, которое было ранее, до ввода неправильного символа.
Изменено: Karataev — 08.08.2018 07:48:42 |
||
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
#12 07.08.2018 23:27:36 Я пользуюсь этим:
|
||
Василий Морозов Пользователь Сообщений: 13 |
#14 08.02.2023 16:04:20 Добрый день!
Обнаружилось, что в ТекстБокс1 вводится все верно, но на выходе 4 знака после запятой. Чтоб получить 5 знаков нужно нажать дополнительно любую (это не точно, пробовал цифры на NumPad) кнопку.
Изменено: Morozka — 10.02.2023 20:13:37 |
||||
SlA_pls Пользователь Сообщений: 8 |
#15 21.02.2023 13:43:34 Всем привет!
|
||
Artem1977 Пользователь Сообщений: 163 |
SlA_pls, почитайте пожалуйста здесь Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit |
MikeVol Пользователь Сообщений: 229 Ученик |
SlA_pls, Доброго времени суток. Вы выложили только кусок кода где вы добавляете динамически TextBox. А весь код где вы присваеваете к этому TextBox-у или TextBox-ам событие типа Change или Exit? Может там проблема? |
SlA_pls Пользователь Сообщений: 8 |
#18 22.02.2023 11:55:39
Спасибо большое! |
||
I have simple textBox and I want to validate its input including «+» , «-» and «.» here is what I have tried
Private Sub DisplayValue_TextBox_Change()
If Not IsNumeric(DisplayValue_TextBox.Value) Then
MsgBox "Only numbers allowed"
End If
End Sub
But this only accepts numbers 0-9 no negative, positive value or float value..
asked Oct 1, 2014 at 10:03
2
Further to my comment:
Consider a sample Userform1 with a Textbox1 and a CommandButton1
when you enter anything in the TextBox1
the change event fires — ie. typing one character fires the Change()
event and passes the current value so even when you type in the negative sign your current logic fails.
What you need is to use another event like _AfterUpdate()
or _Exit()
with an amphasis on the second one because your can cancel the event
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsNumeric(TextBox1.Value) Then
MsgBox "only numbers allowed"
Cancel = True
End If
End Sub
You can find events here:
answered Oct 1, 2014 at 10:26
0
use the KeyPress event, and discard any non-numeric entry:
Private Sub txtShift1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Debug.Print KeyAscii
If KeyAscii >= 48 And KeyAscii <= 57 Then
Debug.Print "number"
Else
Debug.Print "other"
KeyAscii = 0
End If
End Sub
answered Jan 20, 2017 at 19:02
Having relied up till now on string parsing to do this job, I’m glad I decided to check and see how other people do it and found this Q.
I’ve refined Ruben Alvarez’s excellent answer. The below will allow numerical entries only, and only one decimal point.
Private Sub txtShift1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 46
If InStr(1, txtShift1, ".") > 0 Then KeyAscii = 0
Case 48 To 57
Case Else
KeyAscii = 0
End Select
End Sub
This could be further refined to allow only a single «+», «-» etc. as necessary.
answered Jun 5, 2017 at 10:09
blackworxblackworx
5175 silver badges19 bronze badges
I use this. It will allow only numbers with decimals.
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case vbKey0 To vbKey9, vbKeyBack, vbKeyClear, vbKeyDelete, _
vbKeyLeft, vbKeyRight, vbKeyUp, vbKeyDown, vbKeyTab
If KeyAscii = 46 Then If InStr(1, TextBox1.Text, ".") Then KeyAscii = 0
Case Else
KeyAscii = 0
Beep
End Select
End Sub
answered Aug 3, 2019 at 11:11
Siddharth RoutSiddharth Rout
146k17 gold badges206 silver badges250 bronze badges
2
Im using that:
Private Sub txtGiaNet_Change()
If IsNumeric(txtGiaNet.Value) Then
//if number do sth
Else
//if not, delete this character
txtGiaNet.Value = Left(txtGiaNet.Value, Len(txtGiaNet.Value) - 1)
End If
End Sub
clemens
16.4k11 gold badges48 silver badges65 bronze badges
answered Dec 17, 2017 at 11:01
1
If TextBox1.Value <> "" Then
Dim N As Boolean
N = True
Do While N
If Not IsNumeric(TextBox1.Value) Then
TextBox1.Value = Left(TextBox1.Value, Len(TextBox1.Value) - 1)
Else
N = False
End If
Loop
End If
Taazar
1,54518 silver badges27 bronze badges
answered Sep 15, 2020 at 3:06
Private Sub TbCout_D_Edlp_Change()
Dim NotNumeric As Boolean
Dim TempValue As String
If Not IsNumeric(TbCout_D_Edlp.Value) Then
If TbCout_D_Edlp.Value <> "" Then
NotNumeric = True
MsgBox "Only numbers allowed"
TempValue = Left(Me.TbCout_D_Edlp.Value, Len(Me.TbCout_D_Edlp.Value) - 1)
While NotNumeric = True And TempValue <> ""
If Not IsNumeric(TempValue) Then
TempValue = Left(TempValue, Len(TempValue) - 1)
Else
NotNumeric = False
End If
Wend
Me.TbCout_D_Edlp.Value = TempValue
End If
End If
End Sub
answered Nov 20, 2020 at 0:32
1
FWIW, I was fine with the OPs limitations on the type of values accepted but wasn’t fine with the msgbox arriving at inappropriate times (such as when Backspace was used). To resolve that, I created a calculated field in the worksheet («Value_AnyGood») that used the ISNUMBER function on the entered data. I then tested that for «True» on any event that left the UF where the data was entered. That resulted in a process that caught any non-numeric entries but didn’t pop up a message for legitimate editing efforts. If the value was False, it lets the user know and then ends the routine with the current UF displayed.
answered Mar 7 at 9:56
1
Содержание
- VBA TextBox Numbers Only using Keypress KeyAscii
- The VBA Tutorials Blog
- Introduction — VBA TextBox Numbers Only
- Example — VBA TextBox Numbers Only
- Tutorial — VBA TextBox Numbers Only
- From the Beginning
- Don’t forget to change the name!
- Features of this Macro
- Application Ideas — VBA TextBox Numbers Only
- Vba excel textbox только цифры
- Как разрешить ввод только чисел в текстовое поле?
- Разделите диапазон ячеек на число с помощью специальной функции «Вставить»
- Vba excel textbox только цифры
- VB.net Need Text Box to Only Accept Numbers
- 29 Answers 29
- Simplest ever solution for TextBox Validation in VB.NET
VBA TextBox Numbers Only using Keypress KeyAscii
The VBA Tutorials Blog
Introduction — VBA TextBox Numbers Only
Learn how to restrict a VBA UserForm TextBox to numbers only using the VBA KeyPress event and KeyAscii argument. This macro is flexible enough to also allow negative numbers and decimals in your UserForm TextBoxes.
In case you want to grab the code and go, I’m going to give you the answer up front. I’ll explain how to use it in the Tutorial section.
Example — VBA TextBox Numbers Only
Make powerful macros with our free VBA Developer Kit
This is actually pretty neat. If you have trouble understanding or remembering it, our free VBA Developer Kit can help. It’s loaded with VBA shortcuts to help you make your own macros like this one — we’ll send a copy, along with our Big Book of Excel VBA Macros, to your email address below.
Tutorial — VBA TextBox Numbers Only
From the Beginning
Now that I’ve given you the solution, I’ll set the stage for how to use it. Let’s say you have an Excel UserForm that looks like this:
It’s a simple UserForm, with a TextBox near the center. The TextBox is named TextBox1 , but you can name it whatever you like.
The problem is, there’s no property of the TextBox that will allow you to restrict the input to numbers only. The user can enter any character they want! For your code to function properly, you need to find a way to manually restrict the textbox to numeric values only. I’ll show you how.
From your Project Explorer Pane, right click your UserForm and click View Code.
Once you do that, simply copy and paste the example macro.
Don’t forget to change the name!
If your TextBox isn’t named TextBox1 , you’ll have to make a few changes.
Everywhere you see TextBox1 in the example macro, you’ll have to change that to the name of your TextBox. If you’re counting, there should be 4 replacements, including the one in the name of the subroutine.
Features of this Macro
Fundamentally, this macro prevents letters and special characters from being entered into your TextBox, but it does more than that.
Because the KeyPress event has the KeyAscii argument, which tells you which character is pressed, you can make some pretty powerful character validation procedures. By reading the KeyAscii argument, this macro is able to include a few features that many other TextBox restriction macros do not.
For example, by checking the KeyAscii value this macro lets the user include a dash, but ONLY if the dash is entered as the first character in the TextBox. This allows the user to enter negative numbers.
Likewise, the macro allows the user to enter a decimal, but it only allows one decimal in the TextBox. A string with more than one decimal isn’t a number!
Anytime you see the line KeyAscii = 0 , it’s telling the VBA compiler to not allow the key to be entered into the TextBox. Notice, the only Case in the Select Case logic that doesn’t have a KeyAscii = 0 restriction, is the use of numbers from 0 to 9. Makes sense doesn’t it?
Note, the logical test Case Asc(«0») To Asc(«9») is the same as entering Case 48 to 57 since 48 to 57 are the corresponding ascii codes for the numbers 0 through 9.
Application Ideas — VBA TextBox Numbers Only
Macros that validate TextBox entries as numeric are ideal when creating something like a UserForm calculator.
Now’s the time I ask/beg/plead you to subscribe to my free wellsrPRO VBA Training Program using the form below. Once you subscribe, you’ll get access to a free copy of my Excel Add-In with tons of useful features and you’ll get monthly tutorials where I show you how to do some pretty cool stuff with VBA:)
Ready to do more with VBA?
We put together a giant PDF with over 300 pre-built macros and we want you to have it for free. Enter your email address below and we’ll send you a copy along with our VBA Developer Kit, loaded with VBA tips, tricks and shortcuts.
Before we go, I want to let you know we designed a suite of VBA Cheat Sheets to make it easier for you to write better macros. We included over 200 tips and 140 macro examples so they have everything you need to know to become a better VBA programmer.
Источник
Vba excel textbox только цифры
Как разрешить ввод только чисел в текстовое поле?
В Excel мы можем применить функцию проверки данных, чтобы в ячейки можно было вводить только числа, но иногда я хочу, чтобы в текстовое поле, а также в ячейки вводились только числа. Как принимать только числа в текстовом поле в Excel?
Разделите диапазон ячеек на число с помощью специальной функции «Вставить»
Удивительный! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Экономьте 50% своего времени и сокращайте тысячи щелчков мышью каждый день!
Следующий код VBA может помочь вам вводить числа, точку (.) И отрицательный знак только в текстовое поле, пожалуйста, сделайте следующее:
1. Создайте текстовое поле, нажав Застройщик > Вставить > Текстовое поле (элемент управления ActiveX), а затем нарисуйте текстовое поле, как вам нужно, см. снимок экрана:
2. Затем щелкните текстовое поле правой кнопкой мыши и выберите Просмотреть код из контекстного меню, чтобы открыть Microsoft Visual Basic для приложений окна, а затем замените исходный код следующим кодом VBA в пустой модуль:
Код VBA: разрешить ввод только чисел в текстовое поле:
3. Затем сохраните и закройте окно кода и выйдите из Режим проектирования, теперь в текстовое поле можно вводить только числа, символ точки и знак минуса, см. снимок экрана:
Источник
Vba excel textbox только цифры
Точно))) 1- святое число))) Теперь ввожу 12345, стираю и когда ввожу не число а например букву «р» то вуаля, появляется еденичка
[moder]поправил вверху
это финальная версия от меня.
Все дополнительные «нюансы» исправляй уже сам (думаю, это не сложно будет, если разберешься с уже написанным)[/moder]
Точно))) 1- святое число))) Теперь ввожу 12345, стираю и когда ввожу не число а например букву «р» то вуаля, появляется еденичка
[moder]поправил вверху
это финальная версия от меня.
Все дополнительные «нюансы» исправляй уже сам (думаю, это не сложно будет, если разберешься с уже написанным)[/moder] vdekameron
Сообщение Точно))) 1- святое число))) Теперь ввожу 12345, стираю и когда ввожу не число а например букву «р» то вуаля, появляется еденичка
[moder]поправил вверху
это финальная версия от меня.
Все дополнительные «нюансы» исправляй уже сам (думаю, это не сложно будет, если разберешься с уже написанным)[/moder] Автор — vdekameron
Дата добавления — 19.12.2014 в 11:37
vdekameron | Дата: Пятница, 19.12.2014, 11:50 | Сообщение № 7 | ||||||||||||||||||||||||||
|
Как разрешить ввод только чисел в текстовое поле?
В Excel мы можем применить функцию проверки данных, чтобы в ячейки можно было вводить только числа, но иногда я хочу, чтобы в текстовое поле, а также в ячейки вводились только числа. Как принимать только числа в текстовом поле в Excel?
Разделите диапазон ячеек на число с помощью специальной функции «Вставить»
Разделите диапазон ячеек на число с помощью специальной функции «Вставить»
Следующий код VBA может помочь вам вводить числа, точку (.) И отрицательный знак только в текстовое поле, пожалуйста, сделайте следующее:
1. Создайте текстовое поле, нажав Застройщик > Вставить > Текстовое поле (элемент управления ActiveX), а затем нарисуйте текстовое поле, как вам нужно, см. снимок экрана:
2. Затем щелкните текстовое поле правой кнопкой мыши и выберите Просмотреть код из контекстного меню, чтобы открыть Microsoft Visual Basic для приложений окна, а затем замените исходный код следующим кодом VBA в пустой модуль:
Код VBA: разрешить ввод только чисел в текстовое поле:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii > Asc("9") Or KeyAscii < Asc("0") Then
If KeyAscii = Asc("-") Then
If InStr(1, Me.TextBox1.Text, "-") > 0 Or _
Me.TextBox1.SelStart > 0 Then KeyAscii = 0
ElseIf KeyAscii = Asc(".") Then
If InStr(1, Me.TextBox1.Text, ".") > 0 Then KeyAscii = 0
Else
KeyAscii = 0
End If
End If
End Sub
3. Затем сохраните и закройте окно кода и выйдите из Режим проектирования, теперь в текстовое поле можно вводить только числа, символ точки и знак минуса, см. снимок экрана:
Статьи по теме:
Как применить проверку орфографии в текстовом поле?
Как изменить цвет текстового поля в зависимости от значения в Excel?
Как вставить картинку в текстовое поле?
Как установить значение по умолчанию в текстовом поле?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (3)
Оценок пока нет. Оцените первым!
Fedor_sumkin 0 / 0 / 0 Регистрация: 29.03.2015 Сообщений: 4 |
||||
1 |
||||
02.04.2015, 14:08. Показов 18717. Ответов 4 Метки нет (Все метки)
у меня есть код ввода только цифр, при вводе буквы выходит ошибка, как сделать, чтобы выходило окно…к примеру, «Буквы нельзя!!» ??
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
02.04.2015, 17:08 |
2 |
|||
Непонятно, где тут «выходит ошибка», «переход к коду». При вводе буквы она просто игнорируется.
0 |
Vovchikvsb 466 / 123 / 61 Регистрация: 04.03.2015 Сообщений: 325 |
||||||||
02.04.2015, 18:38 |
3 |
|||||||
РешениеЕсли хотите запретить введение всего, кроме цифр, можно применить такой способ.
Добавлено через 1 час 19 минут
2 |
Fedor_sumkin 0 / 0 / 0 Регистрация: 29.03.2015 Сообщений: 4 |
||||
03.04.2015, 14:47 [ТС] |
4 |
|||
Спасибо большое всё работает. Я переделал твой код, так чтобы вводились только буквы, и у меня возникла проблема, вводятся лишь заглавные буквы или прописные, можно ли как-нибудь это исправить?
t
0 |
Vovchikvsb 466 / 123 / 61 Регистрация: 04.03.2015 Сообщений: 325 |
||||
03.04.2015, 15:43 |
5 |
|||
Можно сравнивать так
0 |
Защита от дурака. Ввод в форму только цифр. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Использование метода Application.InputBox в VBA Excel, его синтаксис и параметры. Значения, возвращаемые диалогом Application.InputBox. Примеры использования.
Метод Application.InputBox предназначен в VBA Excel для вывода диалогового окна с более расширенными возможностями, чем диалоговое окно, отображаемое функцией InputBox. Главным преимуществом метода Application.InputBox является возможность автоматической записи в поле ввода диапазона ячеек (в том числе одной ячейки) путем его выделения на рабочем листе книги Excel и возвращения различных данных, связанных с ним, а также проверка соответствия возвращаемого значения заданному типу данных.
Синтаксис метода
Application.InputBox ( Prompt , Title , Default , Left , Top , HelpFile , HelpContextID , Type )
Обязательным параметром метода Application.InputBox является Prompt, если значения остальных параметров явно не указаны, используются их значения по умолчанию.
Обратите внимание на то, что
- оператор InputBox вызывает функцию InputBox, а
- оператор Application.InputBox вызывает метод InputBox.
Чтобы не было путаницы, метод InputBox пишут как метод Application.InputBox, в том числе и в справке разработчика.
Параметры метода
Параметр | Описание | Значение по умолчанию |
---|---|---|
Prompt | Обязательный параметр. Выражение типа String, отображаемое в диалоговом окне в виде сообщения, приглашающего ввести данные в поле. Разделить на строки сообщение можно с помощью константы vbNewLine. | Нет |
Title | Необязательный параметр. Выражение типа Variant, отображаемое в заголовке диалогового окна. | Слово «Ввод» |
Default | Необязательный параметр. Выражение типа Variant, отображаемое в поле ввода при открытии диалога. | Пустая строка |
Left | Необязательный параметр. Выражение типа Variant, определяющее в пунктах расстояние от левого края экрана до левого края диалогового окна (координата X).* | Горизонтальное выравнивание по центру** |
Top | Необязательный параметр. Выражение типа Variant, определяющее в пунктах расстояние от верхнего края экрана до верхнего края диалогового окна (координата Y).* | Приблизительно равно 1/3 высоты экрана*** |
HelpFile | Необязательный параметр. Выражение типа Variant, указывающее имя файла справки для этого поля ввода. | Нет**** |
HelpContextID | Необязательный параметр. Выражение типа Variant, указывающее идентификатор контекста в справочном разделе файла справки. | Нет**** |
Type | Необязательный параметр. Выражение типа Variant, указывающее тип возвращаемых данных. | 2 (текст) |
* Параметры Left и Top учитываются при отображении диалогового окна методом Application.InputBox в Excel 2003, а в последующих версиях Excel 2007-2016 уже не работают.
**При первом запуске горизонтальное выравнивание устанавливается по центру, при последующих — форма отобразиться в том месте, где ее последний раз закрыли.
***При первом запуске вертикальное расположение приблизительно равно 1/3 высоты экрана, при последующих — форма отобразиться в том месте, где ее последний раз закрыли.
**** Если будут указаны параметры HelpFile и HelpContextID, в диалоговом окне появится кнопка справки.
Возвращаемые значения
Диалоговое окно, созданное методом Application.InputBox, возвращает значение типа Variant и проверяет соответствие возвращаемого значения типу данных, заданному параметром Type. Напомню, что тип значений Variant является универсальным контейнером для значений других типов, а в нашем случае для возвращаемых в зависимости от значения параметра Type.
Аргументы параметра Type и соответствующие им типы возвращаемых значений:
Type | Возвращаемое значение |
---|---|
0 | Формула |
1 | Число |
2 | Текст (string) |
4 | Логическое значение (True или False) |
8 | Ссылки на ячейки в виде объекта Range |
16 | Значение ошибки (например, #н/д) |
64 | Массив значений |
Примеры
В отличие от других встроенных диалоговых окон VBA Excel, Application.InputBox при запуске процедуры непосредственно из редактора, открывается прямо в редакторе, и, чтобы выбрать диапазон ячеек на рабочем листе, нужно по вкладке браузера перейти в книгу Excel. Поэтому для тестирования диалога Application.InputBox удобнее создать кнопку, перетащив ее на вкладке «Разработчик» из «Элементов управления формы» (не из «Элементов ActiveX») и в окошке «Назначить макрос объекту» выбрать имя тестируемой процедуры. Чтобы можно было выбрать процедуру сразу при создании кнопки, она должна быть уже вставлена в стандартный программный модуль. Можно назначить процедуру кнопке позже, кликнув по ней правой кнопкой мыши и выбрав в контекстном меню «Назначить макрос…».
Пример 1 — параметры по умолчанию
Тестируем метод Application.InputBox с необязательными параметрами по умолчанию. Аргумент параметра Type по умолчанию равен 2.
Sub Test1() Dim a As Variant a = Application.InputBox(«Выберите ячейку:») MsgBox a End Sub |
Скопируйте код и вставьте в стандартный модуль, для удобства создайте на рабочем листе кнопку из панели «Элементы управления формы» и назначьте ей макрос «Test1». На рабочем листе заполните некоторые ячейки разными данными, нажимайте кнопку, выбирайте ячейки и смотрите возвращаемые значения.
Клик по кнопке «OK» диалога Application.InputBox в этом примере возвращает содержимое выбранной ячейки (или левой верхней ячейки выбранного диапазона), преобразованное в текстовый формат. У дат в текстовый формат преобразуется их числовое представление.
Клик по кнопке «Отмена» или по закрывающему крестику возвращает строку «False».
Пример 2 — возвращение объекта Range
В этом примере тестируем метод Application.InputBox с обязательным параметром Prompt, разделенным на две строки, параметром Title и значением параметра Type равным 8. Так как в данном случае диалог в качестве значения возвращает объект Range, он присваивается переменной с помощью оператора Set. Для этого примера создайте новую кнопку из панели «Элементы управления формы» и назначьте ей макрос «Test2».
Sub Test2() Dim a As Variant Set a = Application.InputBox(«Пожалуйста,» _ & vbNewLine & «выберите диапазон:», _ «Наш диалог», , , , , , 8) MsgBox a.Cells(1) MsgBox a.Address End Sub |
В первом информационном окне MsgBox выводится значение первой ячейки выбранного диапазона, во втором — адрес диапазона.
Напомню, что обращаться к ячейке в переменной диапазона «a» можно не только по порядковому номеру (индексу) самой ячейки, но и по индексу строки и столбца, на пересечении которых она находится. Например, оба выражения
указывают на первую ячейку диапазона. А в объектной переменной «a» с присвоенным диапазоном размерностью 3х3 оба выражения
указывают на центральную ячейку диапазона.
При использовании метода Application.InputBox происходит проверка введенных данных: попробуйте понажимать кнопку «OK» с пустым полем ввода и с любым введенным текстом (кроме абсолютного адреса). Реакция в этих случаях разная, но понятная.
Есть и отрицательные моменты: при использовании в диалоге Application.InputBox параметра Type со значением равным 8, нажатие кнопок «Отмена» и закрывающего крестика вызывают ошибку Type mismatch (Несоответствие типов). Попробуйте нажать кнопку «Отмена» или закрыть форму диалога.
Решить эту проблему можно, добавив обработчик ошибок. Скопируйте в стандартный модуль код следующей процедуры, создайте еще одну кнопку и назначьте ей макрос «Test3».
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub Test3() Dim a As Variant ‘При возникновении ошибки ‘перейти к метке «Inform» On Error GoTo Inform Set a = Application.InputBox(«Пожалуйста,» _ & vbNewLine & «Выберите диапазон:», _ «Наш диалог», , , , , , 8) MsgBox a.Cells(1) MsgBox a.Address ‘Выйти из процедуры, ‘если не произошла ошибка Exit Sub ‘Метка Inform: ‘Вывести информационное окно с ‘сообщением об ошибке MsgBox «Диалог закрыт или нажата кнопка « _ & Chr(34) & «Отмена» & Chr(34) & «!» End Sub |
Попробуйте теперь нажать кнопку «Отмена» или закрыть форму диалога крестиком.
Пример 3 — возвращение массива
Скопируйте в стандартный модуль код процедуры ниже, создайте четвертую кнопку и назначьте ей макрос «Test4». В этой процедуре указан только аргумент параметра Type равным 64, остальные необязательные параметры оставлены по умолчанию.
Sub Test4() Dim a As Variant a = Application.InputBox(«Выберите диапазон:», , , , , , , 64) MsgBox a(3, 3) End Sub |
Откройте диалоговую форму, нажав четвертую кнопку, и выберите диапазон размерностью не менее 3х3. Нажмите «OK»: информационное сообщение выведет значение соответствующего элемента массива «a», в нашем случае — «a(3, 3)». Если вы выберите диапазон по одному из измерений меньше 3, тогда строка «MsgBox a(3, 3)» вызовет ошибку, так как указанный элемент выходит за границы массива. Эта же строка по этой же причине вызовет ошибку при нажатии кнопки «Отмена» и при закрытии диалога крестиком. Если закомментировать строку «MsgBox a(3, 3)», то закрываться диалог будет без ошибок и при нажатии кнопки «Отмена», и при закрытии диалога крестиком.
Чтобы не попасть за границу массива используйте функцию UBound для определения наибольшего доступного индекса по каждому из двух измерений, например, вот так:
Sub Test5() Dim a As Variant a = Application.InputBox(«Выберите диапазон:», , , , , , , 64) MsgBox «Максимальный индекс 1 измерения = « & UBound(a, 1) & _ vbNewLine & «Максимальный индекс 2 измерения = « & UBound(a, 2) End Sub |
только присваивайте значения выражений «UBound(a, 1)» и «UBound(a, 2)» числовым переменным. А этот код используйте для ознакомления с работой функции UBound и ее тестирования.
В этой процедуре ошибка выдается при выборе одной ячейки или диапазона в одной строке, очевидно, Excel воспринимает его как одномерный массив. Хотя при выборе диапазона в одном столбце, по крайней мере в Excel 2016, все проходит гладко и вторая строка информационного сообщения отображается как «Максимальный индекс 2 измерения = 1».
Ошибка выдается и при нажатии кнопки «Отмена», и при закрытии диалога крестиком, так как переменная «а» в этом случае еще не является массивом, а мы пытаемся использовать ее как аргумент для функции массива, что и вызывает ошибку.
Пример 4 — возвращение формулы
Возвращение формулы рассмотрим на следующем примере:
Sub Test6() Dim a As Variant a = Application.InputBox(«Создайте формулу:», , , , , , , 0) Cells(1, 1) = a End Sub |
На активном листе Excel заполните некоторые ячейки числами и запустите процедуру на выполнение. После отображения диалога Application.InputBox выбирайте по одной ячейке с числами, вставляя между ними математические операторы. После нажатия на кнопку «OK» формула запишется в первую ячейку активного рабочего листа «Cells(1, 1)» (в текст формулы ее не выбирайте, чтобы не возникла циклическая ссылка). При нажатии на кнопку «Отмена» и при закрытии диалога крестиком в эту ячейку запишется слово «Ложь».
Можно записывать не только математические формулы, но и объединять содержимое ячеек с помощью оператора «&» и многое другое. Только не понятно, для чего это вообще нужно, как, впрочем, и возврат логических, числовых значений и значений ошибки. Вы можете протестировать их возврат с помощью процедуры «Test6», заменив в ней параметр Type метода Application.InputBox соответствующим для возвращения логических, числовых значений и значений ошибки.
Формулировка задачи:
у меня есть код ввода только цифр, при вводе буквы выходит ошибка, как сделать, чтобы выходило окно…к примеру, «Буквы нельзя!!» ??
Код к задаче: «Разрешить ввод в TextBox только цифр»
textual
Private Sub TextBox1_Change() If TextBox1.Text Like "*[!0-9]*" Then TextBox1.Text = TextBox1.Tag Else TextBox1.Tag = TextBox1.Text End Sub
Полезно ли:
15 голосов , оценка 4.200 из 5