Vba excel textbox форматы

Excel VBA Tutorial 5 - Text Box Properties, Text Box Currency Format and Date Format

In Excel VBA tutorial 4 we learned how to add different tools to the user form. In today’s tutorials, we will learn about the properties of text boxes. We will learn about different formats of text boxes.

About User Form Properties In Tutorial 3, we saw some important points. In the same way every tool has its properties. Some tabs are more or less according to the tool.

Excel VBA Tutorial 5 - Text Box Properties, Text Box Currency Format and Date Format

1. Name – Any name can be given to the text box.

2. Text box Size – Option of drag and drop with the mouse is better to increase the size or more.

3. Control Tip Text – When the application is run, you have to type the text in the control tip text to show a text tip as soon as the mouse cursor is moved over the text box.

Excel VBA Tutorial 5 - Text Box Properties, Text Box Currency Format and Date Format

4. Enable – Many times the project has to show the text in the text box, but to ban it from editing, Select False Option in the option of enable, no user can edit the text of the text box.

5. Visible – To hide the text box, the text box will be hidden as soon as it is false in front of the Visible option.

6. Text – To show any text by default in the text box, you can type the words type in front of the text option.

7. With the option of Text Align, Back Color, Border Color, you can change the design of the text box.

8. Password Character – Type one of the special characters in the password char to show the text * or # or @ of the text box as such.

For example – When typing a text box password, all we need to do is to show * star *, type password Char  *  .

Excel VBA Tutorial 5 - Text Box Properties, Text Box Currency Format and Date Format

How to change the text box format?

1. Text box currency format

To change the text box Value to currency format, double click on the text box or right click to view code.

Private Sub TextBox1_Change() 

End Sub

The text box name and change will appear. That means, while making any change in the text box, we can give the command in it. You can see multiple options in the drop down option by clicking above the change option above. We will be able to make any changes according to the behavior of the text box. We have to type the code of the format in the line below Private Sub TextBox1_Change ().

Excel VBA Tutorial 5 - Text Box Properties, Text Box Currency Format and Date Format

Private Sub TextBox1_Change()

Me.TextBox1.Text = Format(Me.TextBox1, “####,##”)

End Sub

Now run the project by pressing F5. And type any number in the text box. The value will be converted to currency format only while typing.

If you need a decimal number in the currency format, then click on the text Behavior After Update

Me.TextBox1.Text = Format (Me.TextBox1, “####, ##. 00”) Apply this code.

Private Sub TextBox1_AfterUpdate()

Me.TextBox1.Text = Format(Me.TextBox1, “####,##”)

End Sub

2. Text Box Date Format –

To convert a value to a date format, double-click on the text box and select Text Behavior After Update. And apply the format code below.


Private Sub TextBox2_AfterUpdate ()

Me.TextBox2.Text = Format (Me.TextBox2, “dd / mm / yyyy”)

End Sub

Excel VBA Tutorial 5 - Text Box Properties, Text Box Currency Format and Date Format

You can use dashes or slashes in the date format or you can use a different format.

dd-mm-yyyy

dd/mmm/yyyy

mmm/dd/yyyy

Similarly, you can apply any format in the text box.

Me. TextBox .Text = Format (TextBox, “Format”)

 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

Есть числовое значение в TextBox (оно может быть как целым (Long), так и с плавающей запятой).
Как отформатировать в TextBox значение с разделителем тысяч (например, пробелом).

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

функция Format()

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

В нем использовал предопределенный формат Standard, но он дает только 2 цифры после запятой, а мне нужны все!

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Запишите рекордером нужно е форматирование ячейки и посмотрите получившийся код. Используйте аналогичный для ТекстБокса.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#5

28.04.2013 03:03:45

был один вопрос

Цитата
evgmaz пишет:
Как отформатировать в TextBox значение с разделителем тысяч (например, пробелом).

где здесь сказано про количество знаков после запятой?

так что надо-то на самом деле?
может быть, примеры привести, если словами не получается описать задачу?

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

#6

28.04.2013 05:06:02

Цитата
Юрий М пишет: Запишите рекордером…

Спасибо за совет! Попробуем!

 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

воспользовался советом от Юрия М, но вот такой код в процедуре TextBox1_KeyPress:
st = TextBox1.Value

If KeyAscii >= 48 And KeyAscii <= 57 Then
TextBox1.Text = Format(st, «#,###» ;)
Exit Sub
Else
KeyAscii = 0
Exit Sub
End If

дает в итоге неправильный формат, типа 1 234 5678 (т.е. делит не по 3 разряда, а в конце оставляет 4).
А должно быть: 12 345 678

Не пойму то ли ошибка в использовании ф-ии Format, то ли не корректность ее использования в процедуре KeyPress (и надо поискать другую процедуру)?!

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#8

28.04.2013 14:27:38

в окне immediate:

Код
? format(12345678, "#,##0")
12 345 678

а что там у вас в переменной st — нам, извините, не видно  :(

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

#9

28.04.2013 14:41:06

Цитата
ikki пишет: а что там у вас в переменной st — нам, извините, не видно   :(  

Подозрение у вас правильное, в процедуре KeyPress в переменную st попадает число до нажатия клавиши, а не после, поэтому форматирование неверное.

Если сделал процедуру Change, типа
Private Sub TextBox1_Change()
st = TextBox1.Value
TextBox1.Text = Format(st, «#,##0»)  
End Sub

то все заработало верно…..Но какой-то осадок остался, кажется все можно достойно решить в рамках одной процедуры KeyPress, просто я увы не до конца понимаю «график» ее работы.
спасибо за советы.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

имхо, правильнее именно разделить эти две задачи — недопущение нажатия неправильной клавиши и форматирование.
обратите внимание — нажатие клавиши del, к примеру, в KeyPress не обрабатывается. точнее — это событие просто не возникает, а форматировать изменённое значение всё равно нужно.

не стоит пихать всё в один обработчик, создавая себе трудности и запутывая код.
ваш вариант с двумя процедурами кажется мне наиболее логичным.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

Спасибо, всегда приятно, что свои мысли (подходы) одобряются профессионалами

 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

И все таки продолжу:

Проблема с плавающей запятой.
Если все то же самое проделать с плавающей запятой (в процедуре TextBox1_Change())
st=TextBox1.Value
TextBox1 = Format(st, «#,##0.##»)
то в итоге вообще я не понимаю Excel

Ввожу: 12345.6789
Полагаю, что получу: 12 345.67
А получаю: 1,23 (цифра 4 уже не вводится, а запятая ввелась сама). Запятая-это что делить разрядов, либо математический знак?

Запись «#,##0.##» проверял с NumberFormat применительно к ячейкам, то все работает ок!
В чем может быть проблема?

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#13

28.04.2013 19:52:13

Цитата
evgmaz пишет:
Ввожу: 12345.6789… Полагаю, что получу: 12 345.67

Неправильно полагаете — должно получиться 12 345,68.
Не могу также понять необходимость переменной st — зачем она вообще?

Цитата
цифра 4 уже не вводится, а запятая ввелась сама

Наверное, Вы забываете, что событие Change возникает после ввода КАЖДОГО символа.
Также не могу понять, почему Вы вводите точку в качестве разделителя целой и дробной части — вводите запятую.
И сделайте всё на событие Exit:

Код
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Me.TextBox1 = Format(Me.TextBox1, "#,##0.##")
End Sub
 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

#14

29.04.2013 00:17:08

Цитата
Юрий М пишет: Не могу также понять необходимость переменной st — зачем она вообще?

st можно не вводить (это не принципиально!). Согласен.
Точку ввожу из-за того, что при помещении значения TextBox в ячейку листа, число вносится как число, а не как текст. (Раньше была запятая, от которой отказался, так как водился текст).
Кстати поменял . на , также ничего не работает!

С Exit конечно все работает, то хочется чтобы форматировалось во время набора, а не после выхода из TextBox…..

Продолжаю осмысливать идеи….но пока нет результата!

Изменено: evgmaz10.05.2013 00:07:08

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

предлагаю попробовать так:
1. ПЕРЕД каждым форматированием полученную строку из текстбокса избавлять от пробелов
2. ЕСЛИ последний знак в строке — точка, то временно убирать его
3. превращать полученную строку в число и форматировать Format‘ом
4. ЕСЛИ в конце была точка — добавить её к результату форматирования

Изменено: ikki29.04.2013 00:46:42

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#16

29.04.2013 00:41:57

Цитата
evgmaz пишет:
Точку ввожу из-за того, что при помещении значения TextBox в ячейку листа, число вносится как число, а не как текст.

В TextBox ВСЕГДА текст, вне зависимости от того, вводите Вы точку или запятую.

 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

Совершенно верно, в TextBox всегда текст (это хорошо известно), но вот когда данные из TextBox я копирую в ячейку Листа, то Exel воспринимает текст с точкой как число, а текст с запятой как текст.
В первом случае с ячейкой можно работать как с числом (например, прибавить 1), а во втором случае при прибавлении 1 на автомате получите ошибку!
Я прихожу к выводу, что тема форматирования в Exel самая муторная. Много раз возвращался к этой теме (за несколько лет) и всякий раз какая-то нелогичность возникает!
Ни отчего другого в Exel не возникает подобного дискомфорта!

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Так и передавайте его в ЯЧЕЙКУ числом: [A1] = CDbl(Me.TextBox1)

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#19

29.04.2013 02:32:05

Цитата
evgmaz пишет:
Exel воспринимает текст с точкой как число, а текст с запятой как текст

Не согласен: это VBA воспринимает точку, как разделитель. А вот Excel как раз наоборот. Попробуйте ввести в ячейку 12345.6789

 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

#20

29.04.2013 02:34:51

Цитата
ikki пишет: предлагаю попробовать так…

Попробую ваш вариант, но вот что настораживает:
Почему с целым числом обсуждаемый с вами утром вариант с процедурой Change и кодом
TextBox1.Text = Format(st, «#,##0» ;)
работает превосходно!

А ДЛЯ ДЕЙСТВИТЕЛЬНОГО ЧИСЛА (когда запятая есть) вариант с процедурой Change и кодом
TextBox1 = Format(TextBox1, «#,##0.##» ;)  уже не работает??????!!!!! Получается полностью необъяснимый результат!
И ради это приходится выкручиваться разными способами (например, как вы указали)?!!!!

 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

Юрий М, ну, Вы только подтверждаете сказанное….Это 12345.6789 — Exel воспринимает как текст, а если 12345.6789 находится в TextBox, то Cells(1,1) =TextBox.value получится нормальное хорошее число 12345,6789
Я сам удивился, когда это обнаружил, поэтому и поменял , на . в обработке TextBox.
Отчего еще больше запутался!

Короче ни с запятой ни с точкой пока нет результата!

Изменено: evgmaz10.05.2013 00:08:25

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#22

29.04.2013 02:52:43

Цитата
evgmaz пишет:
а если 12345.6789 находится в TextBox, то Cells(1,1) =TextBox.value получится нормальное хорошее число

Правильно — «вмешивается» VBA. И вообще не пойму — зачем форматировать именно в TextBox? Что Вам даст там наличие пробела между разрядами? Форматируйте уже при присвоении значения ячейке. Не вижу вообще проблемы: как писал выше — cdbl нормально справляется. А вот менять точку на запятую можно и при вводе.

 

evgmaz

Пользователь

Сообщений: 37
Регистрация: 03.04.2013

#23

29.04.2013 03:29:27

Цитата
Юрий М пишет:
1). И вообще не пойму — зачем форматировать именно в TextBox? Что Вам даст там наличие пробела между разрядами?
2). Форматируйте уже при присвоении значения ячейке. Не вижу вообще проблемы: как писал выше — cdbl нормально справляется. А вот менять точку на запятую можно и при вводе.

Ответы:
1). Ну это вопрос чисто эстетики при работе с Формой конечного пользователя
2). В ячейке все легко отформатируем, даже не задавал бы вопросов.
3). За Cdbl спасибо!

Элемент управления пользовательской формы TextBox в VBA Excel. Использование текстового поля для ввода и вывода информации, основные свойства, примеры. Привязка текстового поля к ячейке.

UserForm.TextBox – это элемент управления пользовательской формы, предназначенный для ввода, редактирования и вывода информации в текстовом формате.

Текстовое поле на пользовательской форме

Текстовое поле незаменимо, когда необходимо заполнить пользовательскую форму новой информацией. Например, это может быть ФИО нового сотрудника и его паспортные данные, сумма выручки за день, новый электронный адрес и многое-многое другое.

Если с помощью текстового поля требуется вводить заранее известную информацию, элементы которой можно сгруппировать в список, то в этом случае удобнее вместо элемента управления TextBox использовать ListBox или ComboBox.

Вводить информацию в TextBox на открытой форме можно не только с помощью клавиатуры, но и вставкой текста из буфера обмена. Когда текстовое поле применяется для ввода пароля, есть возможность отобразить все его знаки замещающим символом, например, звездочкой.

Иногда, если на пользовательской форме используется только одно текстовое поле и кнопка «OK» (или кнопки «OK» и «Отмена»), для ввода информации такую форму можно заменить функцией InputBox, а для вывода информации, когда не требуется редактирование отображаемого текста, – функцией MsgBox.

Свойства текстового поля

Свойство Описание
AutoSize* Автоподбор размера текстового поля. True – размер автоматически подстраивается под длину размещаемой строки. False – размер элемента управления определяется свойствами Width и Height.
AutoTab Включение автоматической табуляции – передачи фокуса следующему элементу управления при достижении максимального числа символов при значениях свойства MaxLenght > 0. True – автоматическая табуляция включена, False – выключена.
ControlSource Ссылка на источник данных для поля TextBox.
ControlTipText Текст всплывающей подсказки при наведении курсора на TextBox.
Enabled Возможность ввода, редактирования, копирования, вставки, удаления текста. True – все перечисленные опции включены, False – выключены (цвет текста в поле становится серым).
Font Шрифт, начертание и размер текста в поле.
Height Высота текстового поля.
Left Расстояние от левого края внутренней границы пользовательской формы до левого края текстового поля.
Locked Запрет ввода, редактирования, удаления текста. True – перечисленные опции запрещены (разрешено выделение и копирование текста), False – перечисленные опции разрешены.
MaxLenght Максимальная длина строки. По умолчанию – 0, что означает – ограничений нет.
Multiline Устанавливает многострочный (True) или однострочный (False) режим ввода-вывода текста.
PasswordChar Задает символ, который будет отображаться при вводе знаков пароля.
TabIndex Определяет позицию элемента управления в очереди на получение фокуса при табуляции, вызываемой свойством AutoTab или нажатием клавиш «Tab», «Enter». Отсчет начинается с 0.
Text** Текстовое содержимое (значение) поля (=Value).
TextAlign Выравнивание текста: 1 (fmTextAlignLeft) – по левому краю, 2 (fmTextAlignCenter) – по центру, 3 (fmTextAlignRight) – по правому краю.
Top Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края текстового поля.
Value** Текстовое содержимое (значение) поля (=Text).
Visible Видимость текстового поля. True – TextBox отображается на пользовательской форме, False – TextBox скрыт.
Width Ширина текстового поля.
WordWrap Актуально при Multiline = True. Переход на новую строку при достижении границы текстового поля. True – переход включен, False – переход выключен.

* При использовании свойства AutoSize в значении True следует учитывать, что автоматическое изменение размеров поля при вводе текста может нарушить дизайн пользовательской формы.
** Text и Value — это два обозначения одного и того же свойства. Если в окне Properties элемента управления TextBox в поле свойства Text начать ввод строки, в поле Value ввод будет дублироваться. И наоборот, при вводе текста в поле свойства Value, дублирование произойдет в поле Text.

В таблице перечислены только основные, часто используемые свойства текстового поля. Все доступные свойства отображены в окне Properties элемента управления TextBox.

Свойства BackColor, BackStyle, BorderColor, BorderStyle отвечают за внешнее оформление текстового поля и его границ. Попробуйте выбирать доступные значения этих свойств в окне Properties, наблюдая за изменениями внешнего вида элемента управления TextBox на проекте пользовательской формы.

Привязка текстового поля к ячейке

Привязать элемент управления TextBox к ячейке на рабочем листе можно двумя способами.

1. В окне Properties элемента управления TextBox в поле свойства ControlSource необходимо указать адрес ячейки:

Окно Properties-TextBox

2. Присвоить свойству ControlSource адрес ячейки в коде VBA Excel:

UserForm1.TextBox1.ControlSource = «C5»

Теперь ячейка C5 активного листа будет привязана к элементу управления TextBox1. При открытии формы текстовое поле будет заполнено значением ячейки C5.

Чтобы наглядно ознакомиться с взаимозависимостью значения ячейки C5 и содержимого текстового поля, разместите на пользовательской форме еще какой-нибудь элемент управления и откройте ее в немодальном* окне:

Sub Test()

UserForm1.TextBox1.ControlSource = «C5»

UserForm1.Show 0

End Sub

Измените значение ячейки C5 и нажмите клавишу «Tab» или «Enter» – изменения будут продублированы в текстовом поле на форме. Измените содержимое поля TextBox1, нажмите клавишу «Tab» или «Enter», передав фокус другому элементу управления, – изменения продублируются в ячейке C5.

Чтобы привязать текстовое поле к ячейке неактивного листа, необходимо в адресе указать имя листа по ярлыку с разделителем «!»:

UserForm1.TextBox1.ControlSource = «Лист2!A3»

Если имя листа содержит пробел, заключите его в одинарные кавычки:

UserForm1.TextBox1.ControlSource = «‘Мой лист’!B6»

Точно также адрес ячейки конкретного листа можно указать непосредственно в окне Properties элемента управления TextBox в поле свойства ControlSource (без парных кавычек).

* Отображение пользовательской формы в немодальном окне позволяет редактировать ячейки на рабочем листе Excel, не закрывая форму.

Примеры использования TextBox

Пример 1
Обмен содержимым между текстовым полем, переменной и ячейкой на рабочем листе:

‘Присвоение текстовому полю значения

‘ячейки A2 и переменной a1

UserForm1.TextBox1.Text = Range(«A2»)

UserForm1.TextBox1.Text = a1

‘Присвоение ячейке B3 и переменной a2

‘значения текстового поля

Cells(3, 2) = UserForm1.TextBox1.Text

a2 = UserForm1.TextBox1.Value

‘Свойства Text и Value элемента

‘управления TextBox равнозначны

Пример 2
Программное создание элемента управления TextBox, размещение его по центру пользовательской формы, добавление всплывающей подсказки и текста по умолчанию.

Предположим, что текстовое поле предназначено для ввода даты, поэтому добавляем соответствующую подсказку, а в качестве текста по умолчанию – текущую дату.

Создаем новую пользовательскую форму с именем UserForm2. Если у вас другое имя формы, это не имеет значения, так как обращаться к ней будем с помощью ключевого слова «Me». Открываем модуль созданной формы и вставляем в него следующий код VBA Excel:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

Private Sub UserForm_Initialize()

Dim myTextBox As Control

‘Создаем новый TextBox и присваиваем его переменной

Set myTextBox = Me.Controls.Add(«Forms.TextBox.1»)

‘Задаем размеры и заголовок пользовательской формы

With Me

  .Height = 100

  .Width = 220

  .Caption = «Форма №2»

End With

‘Присваиваем значения свойствам текстового поля

With myTextBox

  .Width = 100

  .Height = 20

  ‘Left и Top рассчитаны для Excel 2016*

  .Left = 60 5

  .Top = 40 15

  ‘Добавляем всплывающую подсказку

  .ControlTipText = «Введите дату подписания договора»

  ‘Вставляем в поле текущую дату

  .Text = Format(Now, «DD.MM.YYYY»)

  ‘Выравниваем текст по центру

  .TextAlign = 2

End With

End Sub

В результате выполнения кода откроется следующая форма с всплывающей подсказкой при наведении на TextBox курсора:

TextBox с всплывающей подсказкой

* Значения свойств Left и Top рассчитаны для Excel 2016. Вычитаемые числа зависят от толщины границ пользовательской формы, которые в других версиях Excel могут отличаться.

  • #1

Hi, all,

I have a userform with 5 input fields, four of which are textboxes (the other is a combobox). Two of the fields ask the user to input a date in the format dd/mm/yy, and one of them asks for a number.

Currently, these values are added to the worksheet as text values, even though the cells are formatted as dates/numbers. (Thus it also flags that the input data doesn’t correspond to the cell formatting).

I would like the dates to retain the day, month, and year data, but to only show dd/mm in the cell.
I would like the number to display as a number (allowing for decimals and zero).

Here’s the code that adds the form data to the worksheet:

VBA Code:

Private Sub Add_Eval_Add_Click()
Dim iCol As Long
Dim ws As Worksheet
Set ws = Worksheets("Gradebook")

'find first empty column in database
iCol = ws.Cells.Find(What:="*", SearchOrder:=xlColumns, _
    SearchDirection:=xlPrevious, LookIn:=xlValues).Column + 1

'check for an evaluation title
If Trim(Me.Eval_Title.Value) = "" Then
  Me.Eval_Title.SetFocus
  MsgBox "Please enter an evaluation title."
  Exit Sub
End If

'check for a category
If Trim(Me.Eval_Cat.Value) = "" Then
  Me.Eval_Cat.SetFocus
  MsgBox "Please choose a category."
  Exit Sub
End If

'check for an assigned date
If Trim(Me.Eval_Date.Value) = "" Then
  Me.Eval_Date.SetFocus
  MsgBox "Please enter the date the evaluation was assigned."
  Exit Sub
End If

'check for a due date
If Trim(Me.Eval_Due_Date.Value) = "" Then
  Me.Eval_Due_Date.SetFocus
  MsgBox "Please enter the due date."
  Exit Sub
End If

'check for a points value
If Trim(Me.Eval_Points.Value) = "" Then
  Me.Eval_Points.SetFocus
  MsgBox "Please enter the available points."
  Exit Sub
End If

'copy the data to the database
'use protect and unprotect lines,
'     with your password
'     if worksheet is protected
With ws
'  .Unprotect Password:="password"
  .Cells(1, iCol).Value = Me.Eval_Title.Value
  .Cells(2, iCol).Value = Me.Eval_Cat.Value
  .Cells(3, iCol).Value = Me.Eval_Date.Value
  .Cells(4, iCol).Value = Me.Eval_Due_Date.Value
  .Cells(5, iCol).Value = Me.Eval_Points.Value
'  .Protect Password:="password"
End With

'clear the data
Me.Eval_Title.Value = ""
Me.Eval_Cat.Value = ""
Me.Eval_Date.Value = ""
Me.Eval_Due_Date.Value = ""
Me.Eval_Points.Value = ""
Me.Eval_Title.SetFocus
End Sub

P.S. If you have any suggestions to optimise the code, I’m all ears!
P.P.S. Do I understand the code correctly that, if I have the worksheet protected, I can uncomment the lines

VBA Code:

.Unprotect Password:="password"

and

VBA Code:

.Protect Password:="password"

and replace «password» with the worksheet password?

Repeat Last Command

Pressing F4 adds dollar signs when editing a formula. When not editing, F4 repeats last command.

  • #2

hi ]tjdickinson,

In VBA textbox values (excluding numbers only) are considered as TEXT and when we populate cells with textbox values, they are transferred as text as well. Same goes for dates, thus formatting cells as Date does not have any effect. have a look at below examples:

VBA Code:

Sheets("sheet1").Range("a1") = TextBox1.Value                           'textbox value will be transferred as text
Sheets("sheet1").Range("a1").NumberFormat = "mmm/yyyy"                  'there will be no effect on cell value, since it is text

Sheets("sheet1").Range("a3") = Format(TextBox1.Value, "dd/mm/yyyy")     'textbox value will be transferred as text but formatted as date, the value will remain TEXT

Sheets("sheet1").Range("a2") = CDate(TextBox1.Value)                    'textbox value will be transferred as date
Sheets("sheet1").Range("a2").NumberFormat = "mmm/yyyy"                  'cell format will be changed to mmm and year, the value will remain DATE

Textbox1.value will place your value as text and as a result number format will not have any effect on such value.
format(textbox1.value, «mm/yyyy») will place your value as text but formatted in shape of month and year, but excel will read the cell value as text.
CDate(textbox1.value) will place your value as date and numberformat will change the date format, but the value will remain date.

1624709436543.png

hth…..

  • #3

hi ]tjdickinson,

In VBA textbox values (excluding numbers only) are considered as TEXT and when we populate cells with textbox values, they are transferred as text as well. Same goes for dates, thus formatting cells as Date does not have any effect. have a look at below examples:

VBA Code:

Sheets("sheet1").Range("a1") = TextBox1.Value                           'textbox value will be transferred as text
Sheets("sheet1").Range("a1").NumberFormat = "mmm/yyyy"                  'there will be no effect on cell value, since it is text

Sheets("sheet1").Range("a3") = Format(TextBox1.Value, "dd/mm/yyyy")     'textbox value will be transferred as text but formatted as date, the value will remain TEXT

Sheets("sheet1").Range("a2") = CDate(TextBox1.Value)                    'textbox value will be transferred as date
Sheets("sheet1").Range("a2").NumberFormat = "mmm/yyyy"                  'cell format will be changed to mmm and year, the value will remain DATE

Textbox1.value will place your value as text and as a result number format will not have any effect on such value.
format(textbox1.value, «mm/yyyy») will place your value as text but formatted in shape of month and year, but excel will read the cell value as text.
CDate(textbox1.value) will place your value as date and numberformat will change the date format, but the value will remain date.

View attachment 41652

hth…..

Hi, Fahad, thanks for your reply!

Okay, so I changed the code to include the CDate() function:

VBA Code:

  .Cells(3, iCol).Value = CDate(Me.Eval_Date.Value)
  .Cells(4, iCol).Value = CDate(Me.Eval_Due_Date.Value)

When I run the form and fill it in, I put (for example) 26/06 in the first date box and 27/06 in the second date box.

After I click ‘Add’, the cells receive the values
26/06/2021
27/06/2021
even though I didn’t put the year in the form. I would like the year not to display in order to minimise column width.

The Cell Number Format now says ‘Text’ instead of ‘Date’ (it was set to ‘Date’ with custom formatting dd/mm before I added the data). However, the flag in the corner of the cell has gone away, which had been indicating that the cell contents didn’t fit the intended format. So I’m not quite sure what’s going on there.

I don’t quite understand how to use the NumberFormat parameter. I can’t call a specific cell, because each instance of the userform adds a new column of data (so the reference is constantly changing). Is there something similar to CDate() for numbers?

  • #4

hi ]tjdickinson,

In VBA textbox values (excluding numbers only) are considered as TEXT and when we populate cells with textbox values, they are transferred as text as well. Same goes for dates, thus formatting cells as Date does not have any effect. have a look at below examples:

VBA Code:

Sheets("sheet1").Range("a1") = TextBox1.Value                           'textbox value will be transferred as text
Sheets("sheet1").Range("a1").NumberFormat = "mmm/yyyy"                  'there will be no effect on cell value, since it is text

Sheets("sheet1").Range("a3") = Format(TextBox1.Value, "dd/mm/yyyy")     'textbox value will be transferred as text but formatted as date, the value will remain TEXT

Sheets("sheet1").Range("a2") = CDate(TextBox1.Value)                    'textbox value will be transferred as date
Sheets("sheet1").Range("a2").NumberFormat = "mmm/yyyy"                  'cell format will be changed to mmm and year, the value will remain DATE

Textbox1.value will place your value as text and as a result number format will not have any effect on such value.
format(textbox1.value, «mm/yyyy») will place your value as text but formatted in shape of month and year, but excel will read the cell value as text.
CDate(textbox1.value) will place your value as date and numberformat will change the date format, but the value will remain date.

View attachment 41652

hth…..

Update:

Guided and informed by your suggestions, I found a near solution, but there’s still one glitch:

I added an Exit event to each textbox setting the format of the textbox contents

VBA Code:

Private Sub Eval_Date_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Eval_Date.Text = Format$(Eval_Date.Text, "dd/mm")

End Sub

and

VBA Code:

Private Sub Eval_Points_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Eval_Points.Text = Format$(Eval_Points.Text, "##0.0")

End Sub

Then, in the Click event adding the data to the worksheet, I added the .NumberFormat function after each value is added to the worksheet:

VBA Code:

With ws
'  .Unprotect Password:="password"
  .Cells(1, iCol).Value = Me.Eval_Title.Value
  .Cells(2, iCol).Value = Me.Eval_Cat.Value
  .Cells(3, iCol).Value = Me.Eval_Date.Value
  .Cells(3, iCol).NumberFormat = "dd/mm"
  .Cells(4, iCol).Value = Me.Eval_Due_Date.Value
  .Cells(4, iCol).NumberFormat = "dd/mm"
  .Cells(5, iCol).Value = Me.Eval_Points.Value
  .Cells(5, iCol).NumberFormat = "##0.0"
'  .Protect Password:="password"
End With

Now the dates show up correctly in the sheet.

The number (Eval_Points) displays correctly, and the number format in the worksheet shows ‘Custom’ (rather than ‘Text’), which is good, but I still get a flag that says ‘Number stored as text’.

1624729770862.png

  • #5

this will disable the error, but it works across the whole workbook

VBA Code:

Application.ErrorCheckingOptions.NumberAsText = False

  • #6

this will disable the error, but it works across the whole workbook

VBA Code:

Application.ErrorCheckingOptions.NumberAsText = False

Thanks, diddi! My only concern is whether calling these values in other functions will result in errors, if the values are stored here as text.

Is it possible to apply your code only to the current worksheet (and not the whole workbook)?
If I use this code, where do I put it? In the ‘ThisWorkbook’ object? or in the current sheet object?

  • #7

use the Val( ) function in VBA code
errorcheckingoptions is an application level value, so it cannot be applied to individual sheets or ranges. sorry

you would be best to place it in WorkBook_Open sub. dont forget to set to true again before exiting the workbook

  • #8

Or try the following

VBA Code:

.Cells(5, iCol).Value = Me.Eval_Points.Value
  .Cells(5, iCol).NumberFormat = "General"

hth….

Wookiee

  • Remove From My Forums
  • Question

  • dears

    good greeting

    how can format date by automatic way just when i’m write it inside textbox excel userform vba

    regards…….

Answers

  • Hello TAREK SHARAF,

    Textbox in useform does not have format property, you could format its text content in AfterUpated event.

    Here is the simply code and demonstration.

    Private Sub TextBox1_AfterUpdate()
    If IsDate(Me.TextBox1.Text) Then
    Me.TextBox1.Text = Format(Me.TextBox1.Text, "dd/mm/yyyy")
    End If
    End Sub
    
    

    Best Regards,

    Terry


    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, February 27, 2018 4:48 AM

  • Hi,

    It is hard to change date format automatically by handling every single key-input in a TextBox.
    And I’m afraid you forget what date format should be used.
    So, I made a button [Change Format] that changed date format according to selected an option button (radio button).    

    Here’s my code:

    ' ---[Change Format] button
    Private Sub btn_ChangeFormat_Click()
        If (Len(TextBox1.Text) < 8) _
            Or (InStr(TextBox1.Text, "/") < 2) Then
            MsgBox "invalid date value"
            Exit Sub
        End If
        ' ---------------
        If (rbt_YMD_S.Value = True) Then
            TextBox1.Text = Format(TextBox1.Text, "yyyy/M/d")
        End If
        If (rbt_DMY_S.Value = True) Then
            TextBox1.Text = Format(TextBox1.Text, "d/M/yyyy")
        End If
        If (rbt_MDY_S.Value = True) Then
            TextBox1.Text = Format(TextBox1.Text, "M/d/yyyy")
        End If
        ' ---------------
        If (rbt_YMD_L.Value = True) Then
            TextBox1.Text = Format(TextBox1.Text, "yyyy/MMM/dd")
        End If
        If (rbt_DMY_L.Value = True) Then
            TextBox1.Text = Format(TextBox1.Text, "dd/MMM/yyyy")
        End If
        If (rbt_MDY_L.Value = True) Then
            TextBox1.Text = Format(TextBox1.Text, "MMM/dd/yyyy")
        End If
    End Sub

    Regards,


    Ashidacchi

    • Edited by
      Ashidacchi
      Tuesday, February 27, 2018 3:50 AM
    • Marked as answer by
      TAREK SHARAF
      Tuesday, February 27, 2018 4:48 AM

TextBox и числовой формат

anger47

Дата: Среда, 12.03.2014, 13:59 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 192


Репутация:

6

±

Замечаний:
0% ±


Здравствуйте, помогите правильно оформить VBA код для TextBox_а. Я хотел бы, что б число которое вводится в данный ТекстБокс, выглядело так, например: 400,00 или 4 000,00. Но видимо я что то упускаю ибо не делает так как написано в коде. Если я напишу 400 и выхожу с ТексБокса, то что бы автоматом добавило 400,00, если же сам набрал к примеру 400,01, то так и оставило.
[vba]

Код

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   Me.TextBox1 = Format(Me.TextBox1, «### ### ###,0,##»)
End Sub

[/vba]
И почему в ячейку переносит число как текст, а не как число?
для удобства прикрепляю файл пример

К сообщению приложен файл:

8804602.xlsm
(21.6 Kb)

 

Ответить

Саня

Дата: Среда, 12.03.2014, 14:57 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 1067


Репутация:

560

±

Замечаний:
0% ±


XL 2016

события TextBox1_Exit нет для текстбокса на листе (у тебя в примере именно такой), поэтому:

[vba]

Код

Private Sub TextBox1_LostFocus()
     Dim dVal As Double

     With Me.TextBox1
         dVal = CDbl(Replace(.Text, «.», «,»))   ‘ м.б. ошибка!
         .Text = Format(dVal, «#,##0.00»)
     End With

           ‘ зачем связывать текстбокс, можно так
     ‘ Me.Range(«G3»).Value = dVal
     ‘ с предыдущей строки снимешь комментарий после разрыва связи ячейки и поля
End Sub

[/vba]

 

Ответить

anger47

Дата: Среда, 12.03.2014, 15:30 |
Сообщение № 3

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 192


Репутация:

6

±

Замечаний:
0% ±


Саня, сейчас посмотрю, пока что спасибо
Проверил, все работает спасибо огромное!!!

Сообщение отредактировал anger47Среда, 12.03.2014, 15:32

 

Ответить

1 / 1 / 0

Регистрация: 19.07.2011

Сообщений: 285

1

01.05.2012, 10:30. Показов 7158. Ответов 4


Студворк — интернет-сервис помощи студентам

Как задать формат (т.е. NumberFormat) TextBox-например 1,000,000
т.е. при вводе в TextBox чмсла 1000000 он показал 1,000,000



0



Silver

01.05.2012, 11:15

2

Больно смотреть как человек мучается!
Тут компоненты для ввода чисел и т.п. в том формате
который тебе нужен. Если понравится, то пришлю по мылу кряк.

Ser Artur

1 / 1 / 0

Регистрация: 19.07.2011

Сообщений: 285

01.05.2012, 12:17

 [ТС]

3

Вот вариант

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub TextBox24_Change()
Stri = TextBox24.Text
Stri = Application.WorksheetFunction.Substitute(Stri, ".", "")
If IsNumeric(Stri) = True Then
Stri = Format(CDbl(Stri), "#,##0")
Stri = Application.WorksheetFunction.Substitute(Stri, " ", ".")
TextBox24.Text = Stri
End If
End Sub



0



Silver

01.05.2012, 12:53

4

А что будет если в поле ввести нечисловое значение?

1 / 1 / 0

Регистрация: 19.07.2011

Сообщений: 285

01.05.2012, 17:16

 [ТС]

5

Neznaju poprobuy



0



Like this post? Please share to your friends:
  • Vba excel textbox формат даты
  • Vba excel textbox только числа
  • Vba excel textbox проверка
  • Vba excel textbox добавить
  • Vba excel textbox денежный формат