Vba excel textbox денежный формат

I have a form with a number of text boxes for user input (this is in a User Form not on the spreadsheet). I have a few boxes that are related to currency and I need them to show the comma and decimal point as the user enters their criteria into the box. So far I have found a bunch of the same formulas online but when I input my number into the box it goes with 4.00 (if i hit 4 first) and all i can change after that is the second 0. Here is something similar I see online:

textbox1 = format(textbox1, "$#,##0.00")

Also seen some with cDbl

No matter what I try it won’t let me enter anything more than the first number I enter. I need help. Thanks!

Mike Woodhouse's user avatar

asked May 12, 2011 at 15:21

bdubb's user avatar

1

Formatting as the user types in data gets very tricky. May be better to format after the entry is complete.
Entry can also be validated and old value restored if entry deemed invalid

Dim TextBox1oldValue As String

Private Sub TextBox1_AfterUpdate()
    If IsNumeric(TextBox1) Then
        TextBox1 = Format(TextBox1, "$#,##0.00")
    Else
        TextBox1 = TextBox1oldValue
    End If
End Sub

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If IsNumeric(TextBox1) Then
        TextBox1oldValue = Format(TextBox1, "$#,##0.00")
    End If
End Sub

Private Sub UserForm_Initialize()
    TextBox1oldValue = "$0.00"
    TextBox1 = "$0.00"
End Sub

answered May 13, 2011 at 2:01

chris neilsen's user avatar

chris neilsenchris neilsen

52.2k10 gold badges84 silver badges122 bronze badges

1

You need to use the TextBox Change event, like:

Private Sub TextBox1_Change()    
  If TextBox1 = vbNullString Then Exit Sub    
  If IsNumeric(TextBox1) Then CurrencyTransform(TextBox1)
End Sub

You then create the CurrencyTransform function to modify what it shows in the TextBox.

answered May 12, 2011 at 15:59

Lance Roberts's user avatar

Lance RobertsLance Roberts

22.2k32 gold badges112 silver badges129 bronze badges

Try simply this…

Private sub textbox1_AfterUpdate()
    textbox1 = format(textbox1, "$#,##0.00")
end sub

answered Oct 25, 2013 at 3:09

Eduardo Guarana's user avatar

I wrote this inspired by chris’ solution. It works while user is typing!

Private waiting As Boolean

Private Sub TextBox1_Change()
    If waiting Then Exit Sub
    
    waiting = True
    TextBox1 = formatAsCurrency(TextBox1)
    waiting = False
End Sub

Private Function formatAsCurrency(v As String)
    If v = "" Then
        formatAsCurrency = Format(0, "0.00")
    Else
        Dim vv As Variant
        vv = Replace(v, ",", "")
        vv = Replace(vv, ".", "")
        formatAsCurrency = Format(vv / 100, "#,##0.00")
    End If
End Function

answered Sep 12, 2022 at 17:01

DanC's user avatar

Try this:

Private Sub TextBox1_Change()
    TextBox1.Value = Format(TextBox1.Value, "$#,##0.00")
End Sub

This worked for me just fine, so it should help you as well.

If you want to do calculations that involve multiple text boxes, don’t use .value after the name of the text box. Instead, use val( before the name of the text box while following it with an end parenthesis. I used .value and got weird results. Instead of, for example, $100 for TextBox1.Value + TextBox2.Value where TextBox1.Valueis equal to $25 and TextBox2.Value is equal to $75, I would get «$25$75».

answered Apr 12, 2015 at 22:53

Jacob's user avatar

JacobJacob

11 bronze badge

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”)

Обычно в Excel нет встроенной функции, позволяющей изменить формат текста в текстовом поле (элемент управления ActiveX). Однако, если вам нужно отформатировать числа, которые вы для какой-то цели ввели в текстовое поле, в валюту. Как вы можете этого добиться? Эта статья покажет вам метод VBA для решения этой проблемы.

Отформатируйте текстовое поле как валюту с кодом VBA


Отформатируйте текстовое поле как валюту с кодом VBA

Приведенный ниже код VBA может помочь вам легко форматировать числа в текстовом поле в качестве валюты в Excel. Пожалуйста, сделайте следующее.

1. Нажмите Застройщик > Вставить > Текстовое поле (элемент управления ActiveX) чтобы вставить текстовое поле в рабочий лист. Смотрите скриншот:

2. Щелкните текстовое поле правой кнопкой мыши, затем щелкните Просмотреть код из контекстного меню.

3. В дебюте Microsoft Visual Basic для приложений В окне кода замените исходный код в окне кода приведенным ниже кодом VBA.

Код VBA: форматирование текстового поля как валюты в Excel

Private Sub TextBox1_Change()
    TextBox1.Value = Format(TextBox1.Value, "$###,##")
End Sub

Внимание: В коде TextBox1 — это имя текстового поля, внутри которого вы будете форматировать числа как валюту. Пожалуйста, измените его на свой собственный.

4. нажмите другой + Q клавиши одновременно, чтобы закрыть Microsoft Visual Basic для приложений окно.

5. Выключите режим дизайна.

С этого момента при вводе числа в текстовое поле оно будет автоматически форматироваться как валюта, как показано на скриншоте ниже.


Статьи по теме:

  • Как автоматически выбрать текст текстового поля, когда он выбран в Excel?
  • Как автозаполнить текстовое поле при вводе в Excel?
  • Как отформатировать текстовое поле в процентах в Excel?
  • Как объединить тексты из нескольких ячеек в текстовое поле в Excel?
  • Как отключить редактирование в текстовом поле, чтобы пользователь не вводил данные в Excel?

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (0)


Оценок пока нет. Оцените первым!

9 / 9 / 4

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

Сообщений: 295

1

27.06.2011, 06:36. Показов 11539. Ответов 22


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

Плиииззз, подскажите пожалуйста как при вводе в TextBox можно было вводить только числа, и если пользователь вводит точку то она автоматически менялась на запятую. И допустим мы вводим 1923000 то это число автоматически выглядело бы как 1 923 000,00 (Как в Excel денежный формат)

Миниатюры

TextBox - денежный формат
 



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

27.06.2011, 06:36

Ответы с готовыми решениями:

Формат в Textbox (000.00)
Прочитал тему но не смог под себя подстроить.

Не могу заставить в Textbox1 водиться только…

Денежный формат
Правильно ли я понимаю что для учета сумм в деньгах предпочтительней использовать Денежный формат….

денежный формат
Доброго времени суток форумчане :)
Подскажите как отобразить в двух последних столбцах Stringgrida…

Денежный формат
Добрый вечер!

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

22

Памирыч

Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

27.06.2011, 09:04

2

VB.NET
1
TextBox1.Text = String.Format("{0:c}", TextBox1.Text)

Устроит?



0



9 / 9 / 4

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

Сообщений: 295

27.06.2011, 10:53

 [ТС]

3

Че то не работает, есть FormatCurrency но не могу применить((((



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

27.06.2011, 11:04

4

Сорри

VB.NET
1
2
        Dim Valuta As Double = TextBox1.Text
        TextBox1.Text = String.Format("{0:c}", Valuta)



1



9 / 9 / 4

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

Сообщений: 295

27.06.2011, 13:10

 [ТС]

5

Вот сейчас работает)))))Спасибо

Добавлено через 12 минут
А при стирании числа выскакивает ошибка «Приведение строки «» к типу «Double» является недопустимым»



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

27.06.2011, 13:50

6

GRURUS, и с ним нельзя не согласиться, не так ли?
Поставь в проверку содержимое, мол, если пусто или

VB.NET
1
IsNumeric = ФальШ

, тогда никаких обработок, в противном случае — валяй.



0



GRURUS

9 / 9 / 4

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

Сообщений: 295

27.06.2011, 13:58

 [ТС]

7

И еще как можно собрать твой код для перевода в денежный вариант со следующи кодом

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox.KeyPress 
 
        Dim c As Char = e.KeyChar 
        If Char.IsDigit(c) Or Char.IsPunctuation(c) Then 
            If Char.IsPunctuation(c) Then 
                If sender.text.contains(",") Then   
                    e.Handled = True 
                Else 
                    e.KeyChar = Chr(44) 
                End If 
            End If 
        ElseIf Asc(c) = 8 Then 
        Else 
            e.Handled = True 
        End If 
    End Sub



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

27.06.2011, 14:20

8

Страшно даже помыслить, чтобы это все применялось при вводе текста.
Например, я бы на месте компиллятора не знал, что делать, а ты?
Выход:
Рисуем деньги в момент выхода из текстового поля, т.е. потери фокуса:

VB.NET
1
2
3
4
5
6
7
    Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
        TextBox1.Text = TextBox1.Text.Replace(".", ",")
        If IsNumeric(TextBox1.Text) = True And TextBox1.Text <> "" Then
            Dim Valuta As Double = TextBox1.Text
            TextBox1.Text = String.Format("{0:c}", Valuta)
        End If
    End Sub

А то что ты там изобрел — это атомная бомба.



2



9 / 9 / 4

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

Сообщений: 295

28.06.2011, 09:02

 [ТС]

9

Все гут, но есть одно но…ввожу 4568 переводится в 4 568,00р. а когда надо посчитать по берется не 4568 а 4



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

28.06.2011, 09:08

10

Как посчитать? Пример?

Добавлено через 3 минуты

VB.NET
1
MsgBox((TextBox1.Text) + 13)

По моему работает неплохо



0



GRURUS

9 / 9 / 4

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

Сообщений: 295

28.06.2011, 10:00

 [ТС]

11

х.з этот примр работает,а у меня округляет

Добавлено через 12 минут

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Class Form1
    Dim A, B, X, Valuta As Double
    Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
        TextBox1.Text = TextBox1.Text.Replace(".", ",")
        If IsNumeric(TextBox1.Text) = True And TextBox1.Text <> "" Then
            Valuta = TextBox1.Text
            TextBox1.Text = String.Format("{0:c}", Valuta)
        End If
        A = Val(TextBox1.Text)
    End Sub
    Private Sub TextBox2_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.LostFocus
        TextBox2.Text = TextBox1.Text.Replace(".", ",")
        If IsNumeric(TextBox2.Text) = True And TextBox2.Text <> "" Then
            Valuta = TextBox2.Text
            TextBox2.Text = String.Format("{0:c}", Valuta)
        End If
        B = Val(TextBox2.Text)
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        X = A * (A + B)
        MsgBox(X)
    End Sub
End Class



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

28.06.2011, 10:55

12

VB.NET
1
TextBox2.Text = TextBox1.Text.Replace(".", ",")

Ты тут не напутал? Это во втором текстбоксе, приравнивание к первому — это так задумано?
Если нет, то вот такой вариант попробуй:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    Dim A, B, X, Valuta As Double
    Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
        TextBox1.Text = TextBox1.Text.Replace(".", ",")
        If IsNumeric(TextBox1.Text) = True And TextBox1.Text <> "" Then
            Valuta = TextBox1.Text
            TextBox1.Text = String.Format("{0:c}", Valuta)
            A = CDbl(TextBox1.Text)
        End If
    End Sub
    Private Sub TextBox2_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.LostFocus
        TextBox2.Text = TextBox2.Text.Replace(".", ",")
        If IsNumeric(TextBox2.Text) = True And TextBox2.Text <> "" Then
            Valuta = TextBox2.Text
            TextBox2.Text = String.Format("{0:c}", Valuta)
            B = CDbl(TextBox2.Text)
        End If
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        X = A * (A + B)
        MsgBox(String.Format("{0:c}", X))
    End Sub



0



9 / 9 / 4

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

Сообщений: 295

28.06.2011, 11:13

 [ТС]

13

ну да косячек(((

Добавлено через 8 минут
все работает, а можно реализовать если после зяпятой нули то их отбрасывать



0



Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

28.06.2011, 11:15

14

Цитата
Сообщение от GRURUS
Посмотреть сообщение

если после зяпятой нули то их отбрасывать

Где? Не понял



0



9 / 9 / 4

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

Сообщений: 295

28.06.2011, 11:20

 [ТС]

15

допустим получается число 6 000,00р. при выводе результата в textbox 6 000р.



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

28.06.2011, 11:24

16

GRURUS, Ты вроде так боролся за копейки, теперь тебе их не надо?
Замени

VB.NET
1
MsgBox(String.Format("{0:c}", X))

На

VB.NET
1
MsgBox(X)



0



9 / 9 / 4

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

Сообщений: 295

28.06.2011, 11:28

 [ТС]

17

в чем фишка если 6 000, 56р. то выводим 6 000,56р, а если 6 000,00р, то выводим 6 000



0



Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

28.06.2011, 11:30

18

GRURUS, см. выше, как раз то что надо



0



9 / 9 / 4

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

Сообщений: 295

28.06.2011, 11:33

 [ТС]

19

это я понимаю, но я же незнаю изначально какой у меня результат будет



0



Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

28.06.2011, 11:49

20

GRURUS, разбирайся давай пробуй, все выложено. А то я уже тебя понимать перестал



0



 

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 спасибо!

  • Remove From My Forums
  • Question

  • I want a simple textbox that automatically formats itself for money with this format 0.00
    first digit: i can put on it any number of digits like this: 1324654879.00
    second and third digits after the decimal put on them only 2 digit like this: 2136459874.12

Answers

    • Edited by

      Wednesday, June 1, 2011 3:39 PM
      Additional Information…

    • Proposed as answer by
      Mike Feng
      Friday, June 3, 2011 3:49 AM
    • Marked as answer by
      Mike Feng
      Tuesday, June 21, 2011 9:25 AM
  • Have a look at this and let me know if you don’t understand what I have here or how it works:


      Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
    
        ' This is the "leave" event of the textbox. Don't try to figure out what they might
        ' be typing - let them finish typing it, then look to try to format it if it's a
        ' legit number.
    
        Dim userEntry As Decimal = 0
    
        If Not Decimal.TryParse(TextBox1.Text, userEntry) Then
          MessageBox.Show("You must type a number in this textbox.", _
                  "Illegal Characters", _
                  MessageBoxButtons.OK, MessageBoxIcon.Warning)
    
          TextBox1.Focus()
          TextBox1.SelectAll()
        Else
          TextBox1.Text = userEntry.ToString("C")
        End If
    
      End Sub
    

    I hope it helps. :)

    • Proposed as answer by
      Mike Feng
      Friday, June 3, 2011 3:50 AM
    • Marked as answer by
      Mike Feng
      Tuesday, June 21, 2011 9:26 AM

  • For that is not the textbox but the maskedtextbox


    Success
    Cor

    • Marked as answer by
      Mike Feng
      Tuesday, June 21, 2011 9:26 AM

Формат значений числовой и денежный

lebensvoll

Дата: Пятница, 05.05.2017, 14:36 |
Сообщение № 1

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

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

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


Excel 2010

Добрый день всем!!!
Прошу вас (помогите) подскажите, объясните!!!
Имеется таблица в столбце (6-F; 7-G; 8-H; 9-I) значения записываются в числовом формате, а в столбце (11-K) значения записываются в денежном формате. Ни как не могу разобраться как нужно поправить в код чтоб они записывались именно также как в строке 5:
[vba]

Код

Private Sub Butt_ok_Click() ‘Данный код для записи данных в нужные нам ячейки в таблицу на листе «Журнал прихода»
Dim LastRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
If TextBox1.Value <> «» Then Cells(LastRow + 1, 1) = TextBox1.Value
If ComboBox2.Value <> «» Then Cells(LastRow + 1, 2) = ComboBox2.Value
If ComboBox4.Value <> «» Then Cells(LastRow + 1, 3) = ComboBox4.Value
If ComboBox1.Value <> «» Then Cells(LastRow + 1, 4) = ComboBox1.Value
If TextBox4.Value <> «» Then Cells(LastRow + 1, 5) = TextBox4.Value
If TextBox6.Value <> «» Then Cells(LastRow + 1, 6) = TextBox6.Value
If TextBox7.Value <> «» Then Cells(LastRow + 1, 7) = TextBox7.Value
If TextBox5.Value <> «» Then Cells(LastRow + 1, 9) = TextBox5.Value
If TextBox9.Value <> «» Then Cells(LastRow + 1, 11) = TextBox9.Value
   Unload Me
End Sub

[/vba]
А также когда я произвожу редактирование выбранной строки:
[vba]

Код

Private Sub UserForm_Ini() ‘код для «редактирования выбранной строки» загрузка данных на «UserForm2»
    iRow = ActiveCell.Row
    If Cells(iRow, 2) = «» Then
        MsgBox «Вы выбрали пустую строку. Пожалуйста выберите заполненную строку для редактирования. И Повторите попытку.», 48, «Ошибка!»
        End
    End If
    If Edit_Copy = «Edit» Then
        Me.Caption = «Редактирование выбранной строки»
        Me.CommandButton7.Caption = «Сохранить отредактированный данные»
    Else
        Me.Caption = «Редактирование выбранной строки»
        Me.CommandButton7.Caption = «Сохранить отредактированный данные»
        FreeRow = Sheets(«ВЕСОВАЯ приход»).Cells(Rows.Count, 2).End(xlUp).Row + 1
    End If
        Me.TextBox1 = Format(Cells(iRow, 1), «dd.mm.yyyy»)
        Me.ComboBox2 = Cells(iRow, 2)
        Me.ComboBox4 = Cells(iRow, 3)
        Me.ComboBox1 = Cells(iRow, 4)
        Me.TextBox4 = Cells(iRow, 5)
        Me.TextBox6 = Format(Cells(iRow, 6), «#,#»)
        Me.TextBox7 = Format(Cells(iRow, 7), «#,#»)
        Me.TextBox5 = Format(Cells(iRow, 9), «#,#»)
        Me.TextBox9 = Cells(iRow, 11)

            End Sub

        Private Sub CommandButton7_Click() ‘код чтоб «Сохранить отредактированный данные» выбранной строки
    ‘If Edit_Copy = «Edit» Then
        Cells(ActiveCell.Row, 1) = Me.TextBox1
        Cells(ActiveCell.Row, 2) = Me.ComboBox2
        Cells(ActiveCell.Row, 3) = Me.ComboBox4
        Cells(ActiveCell.Row, 4) = Me.ComboBox1
        Cells(ActiveCell.Row, 5) = Me.TextBox4
        Cells(ActiveCell.Row, 6) = CDbl(Me.TextBox6.Value)
        Cells(ActiveCell.Row, 7) = CDbl(Me.TextBox7.Value)
        Cells(ActiveCell.Row, 9) = CDbl(Me.TextBox5.Value)
        Cells(ActiveCell.Row, 11) = CDbl(Me.TextBox9.Value)

                MsgBox «Отредактированные данные сохранены. Закройте пожалуйста форму!!!»
Unload Me
End Sub

[/vba]

Заранее спасибо


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvollПятница, 05.05.2017, 14:37

 

Ответить

lebensvoll

Дата: Пятница, 05.05.2017, 15:20 |
Сообщение № 2

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

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

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


Excel 2010

Я уже и так попробовал. Когда вношу запись в таблицу:
[vba]

Код

If TextBox6.Value <> «» Then Cells(LastRow + 1, 6).Value = Val(Replace(TextBox6.Text, «.», «,»))

[/vba]
Но тогда значения вносятся (числовые) вот так: 34000,000
А как сделать так чтоб значения вносились 34,000 %)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvollПятница, 05.05.2017, 15:20

 

Ответить

buchlotnik

Дата: Пятница, 05.05.2017, 15:55 |
Сообщение № 3

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

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


2010, 2013, 2016 RUS / ENG

Цитата

записывались именно также как в строке 5

если вы имеете ввиду строку на листе, то мы её не видим (файла нет), а если в коде — то в нём форматы не прописаны

 

Ответить

lebensvoll

Дата: Пятница, 05.05.2017, 16:09 |
Сообщение № 4

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

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

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


Excel 2010

buchlotnik, не могу понять почему он не прикрепился (((((
Я это уже понял что форматы в коде не прописаны поэтому и обращаюсь к форуму.
Вот смотрите имеется файл (см Вложение)
В ней таблица в столбце (6-F; 7-G; 8-H; 9-I) значения записываются в числовом формате, а в столбце (11-K) значения записываются в денежном формате.
Запись производится через UserForm1
Но когда я начинаю сохранять запись (((( то значения в таблице вносятся вот так вот: 34000,000
А как сделать так чтоб значения вносились 34,000
как в строках 5-7 (см. таблицу).
Также есть редактирование выбранной строки и когда я отредактировал данные то при сохранении та же проблема ((((

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

__.xlsm
(68.5 Kb)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvollПятница, 05.05.2017, 16:13

 

Ответить

buchlotnik

Дата: Пятница, 05.05.2017, 16:33 |
Сообщение № 5

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

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


2010, 2013, 2016 RUS / ENG

Перепишите Replace правильно: [vba]

Код

If TextBox6.Value <> «» Then Cells(LastRow + 1, 6) = Replace(TextBox6, «,», «.»)

[/vba]

Сообщение отредактировал buchlotnikПятница, 05.05.2017, 16:35

 

Ответить

lebensvoll

Дата: Пятница, 05.05.2017, 16:44 |
Сообщение № 6

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

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

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


Excel 2010

buchlotnik, результат остался такой же :'(
[vba]

Код

Private Sub Butt_ok_Click() ‘Данный код для записи данных в нужные нам ячейки в таблицу на листе «Журнал прихода»
Dim LastRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
If TextBox1.Value <> «» Then Cells(LastRow + 1, 1) = TextBox1.Value
If ComboBox2.Value <> «» Then Cells(LastRow + 1, 2) = ComboBox2.Value
If ComboBox4.Value <> «» Then Cells(LastRow + 1, 3) = ComboBox4.Value
If ComboBox1.Value <> «» Then Cells(LastRow + 1, 4) = ComboBox1.Value
If TextBox4.Value <> «» Then Cells(LastRow + 1, 5) = TextBox4.Value
If TextBox6.Value <> «» Then Cells(LastRow + 1, 6) = Replace(TextBox6, «,», «.»)
If TextBox7.Value <> «» Then Cells(LastRow + 1, 7) = Replace(TextBox7, «,», «.»)
If TextBox5.Value <> «» Then Cells(LastRow + 1, 9) = Replace(TextBox5, «,», «.»)
If TextBox9.Value <> «» Then Cells(LastRow + 1, 11) = TextBox9.Value
   Unload Me
End Sub

[/vba]
после сохранения «ДОБАВИТЬ ЗАПИСЬ» значения TextBox6-7-5 вносятся не так как мне нужно должно быть 34,000 а записывает как 34000,000


Кто бы ты ни был, мир в твоих руках

 

Ответить

lebensvoll

Дата: Пятница, 05.05.2017, 16:46 |
Сообщение № 7

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

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

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


Excel 2010

buchlotnik, ааааа я понял нужно блин через запятую вносить в текст боксах. ВОТ Я ЛОШАРА %) %) %)
hands hands hands Спасибо вам


Кто бы ты ни был, мир в твоих руках

 

Ответить

lebensvoll

Дата: Пятница, 05.05.2017, 16:57 |
Сообщение № 8

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

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

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


Excel 2010

buchlotnik, тогда вопрос остался с денежным форматом.
При редактировании выбранной строки:
[vba]

Код

Private Sub UserForm_Ini() ‘код для «редактирования выбранной строки» загрузка данных на «UserForm2»
    iRow = ActiveCell.Row
    If Cells(iRow, 2) = «» Then
        MsgBox «Вы выбрали пустую строку. Пожалуйста выберите заполненную строку для редактирования. И Повторите попытку.», 48, «Ошибка!»
        End
    End If
    If Edit_Copy = «Edit» Then
        Me.Caption = «Редактирование выбранной строки»
        Me.CommandButton7.Caption = «Сохранить отредактированный данные»
    Else
        Me.Caption = «Редактирование выбранной строки»
        Me.CommandButton7.Caption = «Сохранить отредактированный данные»
        FreeRow = Sheets(«ВЕСОВАЯ приход»).Cells(Rows.Count, 2).End(xlUp).Row + 1
    End If
        Me.TextBox1 = Format(Cells(iRow, 1), «dd.mm.yyyy»)
        Me.ComboBox2 = Cells(iRow, 2)
        Me.ComboBox4 = Cells(iRow, 3)
        Me.ComboBox1 = Cells(iRow, 4)
        Me.TextBox4 = Cells(iRow, 5)
        Me.TextBox6 = Format(Cells(iRow, 6), «#.000#»)
        Me.TextBox7 = Format(Cells(iRow, 7), «#.000#»)
        Me.TextBox5 = Format(Cells(iRow, 9), «#.000#»)
        Me.TextBox9 = Cells(iRow, 11)

            End Sub

[/vba]
Все загружается но при редактировании данных :'( запись из TextBox9 вносится уже не как она была сохранена до этого (450,00р) а уже КАК Я ПОНИМАЮ В ВИДЕ ТЕКСТА 450 :(


Кто бы ты ни был, мир в твоих руках

 

Ответить

lebensvoll

Дата: Пятница, 05.05.2017, 17:06 |
Сообщение № 9

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

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

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


Excel 2010

ВСЕ спасибо ОГРОМНОЕ получилось hands


Кто бы ты ни был, мир в твоих руках

 

Ответить

lebensvoll

Дата: Пятница, 05.05.2017, 17:18 |
Сообщение № 10

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

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

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


Excel 2010

Вот так нужно было:
[vba]

Код

Private Sub UserForm_Ini() ‘код для «редактирования выбранной строки» загрузка данных на «UserForm2»
    iRow = ActiveCell.Row
    If Cells(iRow, 2) = «» Then
        MsgBox «Вы выбрали пустую строку. Пожалуйста выберите заполненную строку для редактирования. И Повторите попытку.», 48, «Ошибка!»
        End
    End If
    If Edit_Copy = «Edit» Then
        Me.Caption = «Редактирование выбранной строки»
        Me.CommandButton7.Caption = «Сохранить отредактированный данные»
    Else
        Me.Caption = «Редактирование выбранной строки»
        Me.CommandButton7.Caption = «Сохранить отредактированный данные»
        FreeRow = Sheets(«ВЕСОВАЯ приход»).Cells(Rows.Count, 2).End(xlUp).Row + 1
    End If
        Me.TextBox1 = Format(Cells(iRow, 1), «dd.mm.yyyy»)
        Me.ComboBox2 = Cells(iRow, 2)
        Me.ComboBox4 = Cells(iRow, 3)
        Me.ComboBox1 = Cells(iRow, 4)
        Me.TextBox4 = Cells(iRow, 5)
        Me.TextBox6 = Format(Cells(iRow, 6), «#.000#»)
        Me.TextBox7 = Format(Cells(iRow, 7), «#.000#»)
        Me.TextBox5 = Format(Cells(iRow, 9), «#.000#»)
        Me.TextBox9 = Format(Cells(iRow, 11), «#.000#»)

            End Sub

[/vba]
а потом для записи вот так вот:
[vba]

Код

Private Sub CommandButton7_Click() ‘код чтоб «Сохранить отредактированный данные» выбранной строки
    ‘If Edit_Copy = «Edit» Then
        Cells(ActiveCell.Row, 1) = Me.TextBox1
        Cells(ActiveCell.Row, 2) = Me.ComboBox2
        Cells(ActiveCell.Row, 3) = Me.ComboBox4
        Cells(ActiveCell.Row, 4) = Me.ComboBox1
        Cells(ActiveCell.Row, 5) = Me.TextBox4
        Cells(ActiveCell.Row, 6) = CDbl(Me.TextBox6.Value)
        Cells(ActiveCell.Row, 7) = CDbl(Me.TextBox7.Value)
        Cells(ActiveCell.Row, 9) = CDbl(Me.TextBox5.Value)
        Cells(ActiveCell.Row, 11) = CDbl(Me.TextBox9.Value)

                MsgBox «Отредактированные данные сохранены. Закройте пожалуйста форму!!!»
Unload Me
End Sub

[/vba]
И при любой раскладке АНГЛИЙСКОЙ на клавиатуре (будь она там запятая или точка) все вносится СУПЕР!!! hands
buchlotnik, к вам вопрос!?
т.е. сохраняет значение согласно заданному формату в ячейке!? Верно я понял!?
А

Цитата

If TextBox6.Value <> «» Then Cells(LastRow + 1, 6) = Replace(TextBox6, «,», «.»)

дает возможность использовать и запятую и точку с клавиатуры и записывает значение как мне и нужно было (34,000), верно!?


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvollПятница, 05.05.2017, 17:19

 

Ответить

buchlotnik

Дата: Пятница, 05.05.2017, 18:44 |
Сообщение № 11

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

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


2010, 2013, 2016 RUS / ENG

С учётом

Цитата

Вот так нужно было:

почему вопрос ко мне? спрашивайте автора кода

 

Ответить

lebensvoll

Дата: Пятница, 05.05.2017, 19:18 |
Сообщение № 12

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

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

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


Excel 2010

buchlotnik, да я лишь просил Вас (в предпоследнем посте) мне пояснить верно ли я понял действие кода.

Цитата

CDbl
т.е. сохраняет значение согласно заданному формату в ячейке!? Верно я понял!?
А

If TextBox6.Value <> «» Then Cells(LastRow + 1, 6) = Replace(TextBox6, «,», «.»)

дает возможность использовать и запятую и точку с клавиатуры (будь то русская раскладка или США) и записывает значение как мне и нужно было (34,000), верно!?

Автору данного кода спасибо, даже и вы принимали участие в его создании (давно это было).


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvollПятница, 05.05.2017, 19:21

 

Ответить

buchlotnik

Дата: Пятница, 05.05.2017, 19:51 |
Сообщение № 13

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

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


2010, 2013, 2016 RUS / ENG

Я не понимаю — это так сложно воспользоваться справкой? И

Цитата

Replace(TextBox6, «,», «.»)

делает дословно [url=https://msdn.microsoft.com/ru-ru/library/bt3szac5(v=vs.90).aspx]replace[/url] , т.е. подстановку.

Понимают код, изучая матчасть, хотя бы в объёме стандартной библиотеки (если что — я не программист и даже не технарь)

Сообщение отредактировал buchlotnikПятница, 05.05.2017, 19:53

 

Ответить

Michael_S

Дата: Суббота, 06.05.2017, 09:17 |
Сообщение № 14

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

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

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


Excel2016

[vba]

Код

Private Sub UserForm_Ini() ‘код для «редактирования выбранной строки» загрузка данных на «UserForm2»
    iRow = ActiveCell.Row
    If Cells(iRow, 2) = «» Then
        MsgBox «Вы выбрали пустую строку. Пожалуйста выберите заполненную строку для редактирования. И Повторите попытку.», 48, «Ошибка!»
        End
    End If
    If Edit_Copy = «Edit» Then
        Me.Caption = «Редактирование выбранной строки»
        Me.CommandButton7.Caption = «Сохранить отредактированный данные»
    Else
        Me.Caption = «Редактирование выбранной строки»
        Me.CommandButton7.Caption = «Сохранить отредактированный данные»
        FreeRow = Sheets(«ВЕСОВАЯ приход»).Cells(Rows.Count, 2).End(xlUp).Row + 1
    End If
        Me.TextBox1 = Format(Cells(iRow, 1), «dd.mm.yyyy»)
        Me.ComboBox2 = Cells(iRow, 2)
        Me.ComboBox4 = Cells(iRow, 3)
        Me.ComboBox1 = Cells(iRow, 4)
        Me.TextBox4 = Cells(iRow, 5)
        Me.TextBox6 = Cells(iRow, 6).Text
        Me.TextBox7 = Cells(iRow, 7).Text
        Me.TextBox5 = Cells(iRow, 9).Text
        Me.TextBox9 = Cells(iRow, 11).Text

            End Sub

[/vba]

 

Ответить

RAN

Дата: Суббота, 06.05.2017, 14:31 |
Сообщение № 15

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

Ранг: Экселист

Сообщений: 5645

Работа с дробным числом в форме через запятую.
[vba]

Код

Private Sub CommandButton1_Click()
‘    Cells(Rows.Count, 1).End(xlUp).Offset(1) = Val(TextBox1.Text)
    Cells(Rows.Count, 1).End(xlUp).Offset(1) = CDbl(TextBox1.Text)
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
    Case 48 To 57
‘    Case 46, 44: If TextBox1 Like («*,*») Then KeyAscii = 0 Else KeyAscii = 44    ‘[«,».»]
    Case 46, 44: If TextBox1 Like («*.*») Then KeyAscii = 0 Else KeyAscii = 46    ‘[«,».»]
    Case Else: KeyAscii = 0
    End Select
End Sub
Private Sub UserForm_Initialize()
‘    If Len(ActiveCell) Then Me.TextBox1 = ActiveCell.Value
    If Len(ActiveCell) Then Me.TextBox1 = Format(ActiveCell.Value, «@»)
End Sub

[/vba]

Закомментированые строки — для работы через точку.

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

3924557.xlsm
(17.1 Kb)


Быть или не быть, вот в чем загвоздка!

 

Ответить

Содержание

  1. Свойство TextBox.Format (Access)
  2. Синтаксис
  3. Замечания
  4. Пример
  5. Поддержка и обратная связь
  6. TextBox.Format property (Access)
  7. Syntax
  8. Remarks
  9. Example
  10. Support and feedback
  11. VBA Excel. Элемент управления TextBox (текстовое поле)
  12. Элемент управления TextBox
  13. Свойства текстового поля
  14. Привязка текстового поля к ячейке
  15. How to Format VBA TextBox To Long Date
  16. 1 Answer 1

Свойство TextBox.Format (Access)

Используйте свойство Формат , чтобы настроить способ отображения и печати чисел, дат, времени и текста. Для чтения и записи, String.

Синтаксис

expression. Формат

Выражение Переменная, представляющая объект TextBox .

Замечания

Используйте один из стандартных форматов или можно создать пользовательский формат с помощью символов форматирования.

Свойство Format использует разные параметры для разных типов данных. Сведения о параметрах для определенного типа данных см. в одном из следующих разделов:

В Visual Basic введите строковое выражение, соответствующее одному из предопределенных форматов, или введите пользовательский формат.

Свойство Format влияет только на то, как отображаются данные. Это не влияет на способ хранения данных.

Microsoft Access предоставляет стандартные форматы для типов данных «Дата/время», «Число» и «Валюта», «Текст» и «Memo» и «Да/Нет». Стандартные форматы зависят от страны или региона, указанного при двойном щелчке Параметра региона в панель управления Windows. Для доступа отображаются форматы, соответствующие выбранной стране или региону. Например, если на вкладке Общие выбран английский (США), значение 1234,56 в формате валюты отображается как 1 234,56 долл. США, а если на вкладке Общие выбран английский (британский), число отображается как 1 234,56.

Если задать свойство Format поля в представлении конструктора таблицы, Access использует этот формат для отображения данных в таблицах. Он также применяет свойство Format поля к новым элементам управления в формах и отчетах.

Используйте следующие символы в пользовательских форматах для любого типа данных.

Символ Смысл
(пробел) Отображать пробелы в виде литеральных символов.
«ABC» Отображение всех элементов в кавычках в виде литеральных символов.
! Принудительное выравнивание по левому краю вместо выравнивания по правому краю.
* Заполните доступное пространство следующим символом.
Отображение следующего символа в виде символа литерала. Вы также можете отобразить литеральные символы, поместив вокруг них кавычки.
[ цвет ] Отображение отформатированных данных в цвете, указанном между квадратными скобками. Доступные цвета: черный, синий, зеленый, голубой, красный, пурпурный, желтый, белый.

Вы не можете смешивать настраиваемые символы форматирования для типов данных Number и Currency с символами даты и времени, да/нет или текста и memo форматирования.

Если вы определили маску ввода и задали свойство Format для одних и того же данных, свойство Format имеет приоритет при отображении данных, а маска ввода игнорируется. Например, если создать маску ввода пароля в представлении конструктора таблицы, а также задать свойство Format для того же поля в таблице или в элементе управления в форме, маска ввода пароля игнорируется, а данные отображаются в соответствии со свойством Format .

Пример

В следующих трех примерах свойство Format задается с помощью предопределенного формата.

В следующем примере задается свойство Format с помощью пользовательского формата. В этом формате дата отображается как январь 2018 г.

В следующем примере показана функция Visual Basic, которая форматирует числовые данные с помощью формата Currency и форматирует текстовые данные полностью прописными буквами. Функция вызывается из события OnLostFocus несвязанного элемента управления TaxRefund.

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

TextBox.Format property (Access)

Use the Format property to customize the way numbers, dates, times, and text are displayed and printed. Read/write String.

Syntax

expression.Format

expression A variable that represents a TextBox object.

Use one of the predefined formats, or you can create a custom format by using formatting symbols.

The Format property uses different settings for different data types. For information about settings for a specific data type, see one of the following topics:

In Visual Basic, enter a string expression that corresponds to one of the predefined formats, or enter a custom format.

The Format property affects only how data is displayed. It doesn’t affect how data is stored.

Microsoft Access provides predefined formats for Date/Time, Number and Currency, Text and Memo, and Yes/No data types. The predefined formats depend on the country/region specified by double-clicking Regional Options in the Windows Control Panel. Access displays formats appropriate for the country/region selected. For example, with English (United States) selected on the General tab, 1234.56 in the Currency format appears as $1,234.56, but when English (British) is selected on the General tab, the number appears as 1,234.56.

If you set a field’s Format property in table Design view, Access uses that format to display data in datasheets. It also applies the field’s Format property to new controls on forms and reports.

Use the following symbols in custom formats for any data type.

Symbol Meaning
(space) Display spaces as literal characters.
«ABC» Display anything inside quotation marks as literal characters.
! Force left alignment instead of right alignment.
* Fill available space with the next character.
Display the next character as a literal character. You can also display literal characters by placing quotation marks around them.
[ color ] Display the formatted data in the color specified between the brackets. Available colors: Black, Blue, Green, Cyan, Red, Magenta, Yellow, White.

You can’t mix custom formatting symbols for the Number and Currency data types with Date/Time, Yes/No, or Text and Memo formatting symbols.

When you have defined an input mask and set the Format property for the same data, the Format property takes precedence when the data is displayed and the input mask is ignored. For example, if you create a Password input mask in table Design view and also set the Format property for the same field, either in the table or in a control on a form, the Password input mask is ignored and the data is displayed according to the Format property.

Example

The following three examples set the Format property by using a predefined format.

The following example sets the Format property by using a custom format. This format displays a date as Jan 2018.

The following example demonstrates a Visual Basic function that formats numeric data by using the Currency format and formats text data entirely in capital letters. The function is called from the OnLostFocus event of an unbound control named TaxRefund.

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

VBA Excel. Элемент управления TextBox (текстовое поле)

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

Элемент управления TextBox

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

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

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

Свойство Описание
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 необходимо указать адрес ячейки:

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

Источник

How to Format VBA TextBox To Long Date

I have a textbox for date display which shows the date in this format: 17/04/2012 but I would like to format it to shows up like ‘April 17, 2012’. I tried this code

which I am getting syntax error from compiler.Can you please let me know how I can do it? Thanks

1 Answer 1

there have been couple of posts on this. Culprit seems to be your system date format. Use of short, medium, long formats will change the result when the system settings change.

  • In US systems mainly it’s done as, e.g. Format$(yourdate, “dd/mm/yyyy”)
  • Where as European systems, e.g. Format$(yourdate, “short date”)

If we look at explicitly defining your format, you are formulating your regional settings!

Good e.g. short date won’t always be mm/dd/yyyy but could be dd/mm/yyyy. That’s the key advantage over actually specifying the format. Simply you can change how you want your date to look like instead of depending on the system (with or without your knowledge).

When we first encountered this, we had some making the VBA apps and sending it over to another in some other place where they have own localized system date format. Your phone rings. 😉

  • Short/Long Date: Display a date according to your system’s long date format.
  • Medium Date: Display a date using the medium date format appropriate for the language version of the host application.

Источник

Преобразование чисел, дат и строк в настраиваемый текстовый формат из кода VBA Excel с помощью функции Format. Синтаксис, параметры, символы, примеры.

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

Синтаксис и параметры

Format(Expression, [FormatExpression], [FirstDayOfWeek], [FirstWeekOfYear])

  • Expression – любое допустимое выражение (переменная), возвращающее числовое значение или строку (обязательный параметр).
  • FormatExpression – выражение формата, именованное или содержащее инструкции из специальных символов (необязательный параметр).
  • FirstDayOfWeek – константа, задающая первый день недели (необязательный параметр).
  • FirstWeekOfYear – константа, задающая первую неделю года (необязательный параметр).

Именованные выражения форматов

Именные форматы даты и времени

Имя формата Описание
General Date Стандартное отображение даты и времени в соответствии с параметрами системы.
Long Date Длинный формат даты.
Medium Date Средний формат даты.
Short Date Краткий формат даты.
Long Time Длинный формат времени.
Medium Time Средний формат времени.
Short Time Краткий формат времени.

Проверьте отображение даты и времени с использованием именованных форматов на вашем компьютере при помощи следующего кода VBA Excel:

Sub FormatDateTime()

MsgBox «General Date:  « & Format(Now, «General Date») & vbNewLine _

& vbNewLine & «Long Date:  « & Format(Now, «Long Date») & vbNewLine _

& vbNewLine & «Medium Date:  « & Format(Now, «Medium Date») & vbNewLine _

& vbNewLine & «Short Date:  « & Format(Now, «Short Date») & vbNewLine _

& vbNewLine & «Long Time:  « & Format(Now, «Long Time») & vbNewLine _

& vbNewLine & «Medium Time:  « & Format(Now, «Medium Time») & vbNewLine _

& vbNewLine & «Short Time:  « & Format(Now, «Short Time»)

End Sub

Скорее всего, результат будет таким:

Отображение даты и времени в соответствии с именованными форматами

Именованные форматы чисел

Имя формата Описание
General Number Стандартное отображение числа без знака разделителя групп разрядов.
Currency Денежный формат.
Fixed Отображение числа без знака разделителя групп разрядов с двумя цифрами после разделителя целой и дробной части.
Standard Отображение числа со знаком разделителя групп разрядов и с двумя цифрами после разделителя целой и дробной части.
Percent Процентный формат: отображение числа, умноженного на 100, со знаком процента (%), добавленного справа.
Scientific Отображение числа в экспоненциальном виде.
Yes/No Возвращается «Нет», если число равно 0, иначе отображается «Да».
True/False Возвращается «Ложь», если число равно 0, иначе отображается «Истина».
On/Off Возвращается «Выкл», если число равно 0, иначе отображается «Вкл».

Проверяем работу именованных форматов на числах 2641387.7381962 и 0 с помощью кода VBA Excel:

Sub FormatNumber()

Dim n As Double

n = 2641387.7381962

‘n = 0

MsgBox «Форматируемое число = « & n & vbNewLine _

& vbNewLine & «General Number:  « & Format(n, «General Number») & vbNewLine _

& vbNewLine & «Currency:  « & Format(n, «Currency») & vbNewLine _

& vbNewLine & «Fixed:  « & Format(n, «Fixed») & vbNewLine _

& vbNewLine & «Standard:  « & Format(n, «Standard») & vbNewLine _

& vbNewLine & «Percent:  « & Format(n, «Percent») & vbNewLine _

& vbNewLine & «Scientific:  « & Format(n, «Scientific») & vbNewLine _

& vbNewLine & «Yes/No:  « & Format(n, «Yes/No») & vbNewLine _

& vbNewLine & «True/False:  « & Format(n, «True/False») & vbNewLine _

& vbNewLine & «On/Off:  « & Format(n, «On/Off»)

End Sub

Получаем следующий результат:

Отображение числа в соответствии с именованными форматамиОтображение нуля в соответствии с именованными форматами числа

Вместо вопросительного знака в отображении числа в формате Currency, по идее, должен быть знак валюты (₽ или руб.).

Специальные символы для выражений форматов

Символы для форматов даты и времени

Символ Описание
Точка (.) Разделитель компонентов даты (день, месяц, год). Используется при отображении месяца в виде числа.
Пробел Разделитель компонентов даты (день, месяц, год). Используется при отображении месяца прописью.
Двоеточие (:) Разделитель компонентов времени (часы, минуты, секунды).
d День в виде числа без нуля в начале (1–31).
dd День в виде числа с нулем в начале (01–31).
m Месяц в виде числа без нуля в начале (1–12). Если (m) следует после (h) или (hh), отображаются минуты (0–59).
mm Месяц в виде числа с нулем в начале (01–12). Если (mm) следует после (h) или (hh), отображаются минуты (00–59).
mmm Месяц прописью в сокращенном виде (янв–дек).
mmmm Полное название месяца (январь–декабрь).
y День года в виде числа (1–366).
yy Год в виде 2-значного числа (00–99).
yyyy Год в виде 4-значного числа (1900–9999).
h Часы в виде числа без нуля в начале (0–23).
hh Часы в виде числа с нулем в начале (00–23).
n (m) Минуты в виде числа без нуля в начале (0–59).
nn (mm) Минуты в виде числа с нулем в начале (00–59).
s Секунды в виде числа без нуля в начале (0–59).
ss Секунды в виде числа с нулем в начале (00–59).

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

Примеры отображения даты с помощью разных по количеству наборов символа d:

Sub DataIsD()

MsgBox «d:  « & Format(Now, «d») & vbNewLine _

& vbNewLine & «dd:  « & Format(Now, «dd») & vbNewLine _

& vbNewLine & «ddd:  « & Format(Now, «ddd») & vbNewLine _

& vbNewLine & «dddd:  « & Format(Now, «dddd») & vbNewLine _

& vbNewLine & «ddddd:  « & Format(Now, «ddddd») & vbNewLine _

& vbNewLine & «dddddd:  « & Format(Now, «dddddd»)

End Sub

Форматы даты, полученные с помощью разных по количеству наборов символа d

Символы для числовых форматов

Символ Описание
Точка (.) Десятичный разделитель.
Запятая (,) Разделитель групп разрядов. В отображаемых числах заполняется пробелом.
(0) Заполнитель, который отображает цифру или ноль. Используется, когда нужны ведущие нули или нули в конце числа.
(#) Заполнитель, который отображает цифру или ничего не отображает. Используется, когда не нужны ведущие нули или нули в конце числа.
(%) Заполнитель процента. Выражение умножается на 100, а знак процента (%) вставляется на той позиции, где он указан в строке формата.
(E- E+ e- e+) Экспоненциальный формат.

Примеры использования символов в выражениях числовых форматов VBA Excel:

Sub FormatNumber2()

Dim n As Double

n = 2641387.7381962

‘n = 0.2397842

MsgBox «Форматируемое число = « & n & vbNewLine _

& vbNewLine & «0.##:  « & Format(n, «0.##») & vbNewLine _

& vbNewLine & «000.###:  « & Format(n, «000.###») & vbNewLine _

& vbNewLine & «#,###.###:  « & Format(n, «#,###.###») & vbNewLine _

& vbNewLine & «0 %:  « & Format(n, «0 %») & vbNewLine _

& vbNewLine & «0.### E-:  « & Format(n, «0.### E-«) & vbNewLine _

& vbNewLine & «0.### E+:  « & Format(n, «0.### E+»)

End Sub

Символы для текстовых форматов

Символ Описание
At-символ (@) Заполнитель для символов, отображающий знак или пробел.
Амперсанд (&) Заполнитель для символов, отображающий знак или ничего (пустая строка).
Меньше (<) Принудительный перевод всех буквенных символов в нижний регистр.
Больше (>) Принудительный перевод всех буквенных символов в верхний регистр.

Примеры использования символов в выражениях строковых форматов VBA Excel:

Sub FormatString()

MsgBox «Номер телефона:  « & Format(«1234567890», «+7 (@@@) @@@-@@-@@») & vbNewLine _

& vbNewLine & «Серия и номер паспорта:  « & Format(«1234567890», «&& && &&&&») & vbNewLine _

& vbNewLine & «Нижний регистр:  « & Format(«Нижний регистр», «<«) & vbNewLine _

& vbNewLine & «Верхний регистр: « & Format(«Верхний регистр», «>»)

End Sub

Результаты форматирования строк с помощью специальных символов для функции Format

Форматы для различных значений одного выражения

Различные форматы для разных числовых значений

В выражении формата для чисел предусмотрено от одного до четырех разделов, отделяемых друг от друга точкой с запятой. Отображаемая строка зависит от значения, возвращенного параметром Expression функции Format.

Количество разделов Результат форматирования
Один раздел Выражение формата применяется ко всем значениям.
Два раздела Первый раздел применяется к положительным значениям и нулям, второй – к отрицательным значениям.
Три раздела Первый раздел применяется к положительным значениям, второй – к отрицательным значениям, третий – к нулям.
Четыре раздела Первый раздел применяется к положительным значениям, второй – к отрицательным значениям, третий – к нулям, четвертый – к значениям Null.

Пример использования четырех разделов в выражении формата числовых значений:

Sub FormatDifferentValues()

MsgBox «Число 1234,5678:  « & _

Format(1234.5678, «#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null») _

& vbNewLine & vbNewLine & «Число -25:  « & _

Format(25, «#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null») _

& vbNewLine & vbNewLine & «Число 0:  « & _

Format(0, «#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null») _

& vbNewLine & vbNewLine & «Null:  « & _

Format(Null, «#,##0.00 руб.;Отрицательное число;Ноль рублей;Значение Null»)

End Sub

Различные форматы для разных строковых значений

В выражении формата для строк предусмотрено до двух разделов, отделяемых друг от друга точкой с запятой. Отображаемая строка зависит от текста, возвращенного параметром Expression функции Format.

Количество разделов Результат форматирования
Один раздел Выражение формата применяется ко всем строковым данным.
Два раздела Первый раздел применяется к строковым данным, второй – к значениям Null и пустым строкам («»).

Пример использования двух разделов в выражении формата строк:

Sub FormatString2()

MsgBox «Строка «Белка»:  « & _

Format(«Белка», «@;Пустая строка или Null») _

& vbNewLine & vbNewLine & «Пустая строка:  « & _

Format(«», «@;Пустая строка или Null») _

& vbNewLine & vbNewLine & «Строка «Null»:  « & _

Format(«Null», «@;Пустая строка или Null») _

& vbNewLine & vbNewLine & «Значение Null:  « & _

Format(Null, «@;Пустая строка или Null»)

End Sub

Понравилась статья? Поделить с друзьями:
  • Vba excel textbox в ячейку
  • Vba excel textbox mask
  • Vba excel textbox in userform
  • Vba excel textbox change
  • Vba excel text to number one