Vba: отображение десятичных знаков с точкой и не комой

Я хотел бы иметь все числа в макросе, отображаемом с точкой, а не с комой

Для экземпляра Этот дисплей «0,03», но мне бы хотелось «0.03»:

Dim MyNumber As Single MyNumber = 0.03 MsgBox (MyNumber) 

Я пробовал набор кодов, которые не работают:

  • это все еще отображает Coma:

     Application.DecimalSeparator = "." 
  • это все еще отображает Coma и не распространяется на весь макрос

     MyNumber = Format(MyNumber, "##0.00") 
  • это отображает точку вместо комы, но не распространяется на весь макрос

     MsgBox (Replace(MyNumber, ",", ".")) 

Спасибо!

Это легче сказать, чем сделать. В редакторе VBA десятичный разделитель является точкой. Однако функция MsgBox (и функция Format) будет использовать региональные настройки Windows, а не настройки Excel, чтобы отформатировать результаты.

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

Вот один из способов сделать это:


 Option Explicit Sub dural() Dim S As String Dim D As Double Const myDecSep As String = "." D = 1234.56 S = Format(D, "0.00") 'will format using the system separator S = Replace(S, Application.DecimalSeparator, myDecSep) MsgBox S End Sub 

Обратите внимание: если вы хотите использовать разделители как десятичных, так и тысяч, и если вы меняете местами, например, запятую и точку, вам нужно сделать это дважды, чтобы не заменить все ваши запятые на точки, или наоборот


 Option Explicit Sub dural() Dim S As String Dim D As Double Const myDecSep As String = "." Const myThousSep As String = "," D = 1234.56 S = Format(D, "#,##0.00") S = Replace(S, Application.DecimalSeparator, Chr(1)) S = Replace(S, Application.ThousandsSeparator, Chr(2)) S = Replace(S, Chr(1), myDecSep) S = Replace(S, Chr(2), myThousSep) MsgBox S End Sub 

Скорее всего, ваши настройки Excel вызывают конфликт.

 1. On the File tab, click the Options button 2. Click the Advanced tab 3. Clear/Uncheck the "Use system separators" option. 

Затем попробуйте свой код.

В качестве первого шага должны быть объявлены три функции из библиотеки динамических ссылок Kernel32:

 Private Declare Function GetUserDefaultLCID% Lib "kernel32" () Private Declare Function GetLocaleInfoA Lib "kernel32" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long Private Declare Function SetLocaleInfoA Lib "kernel32" ( ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean 
  • Первый получит идентификатор пользователя по умолчанию
  • Второй поможет получить ценность местных жителей (и, следовательно, восстановить)
  • Третий поможет установить ценность местных жителей

Значение локального типа для десятичных знаков – 14 (некоторым нравится писать & HE – шестнадцатеричный E -)

Затем программа должна выглядеть так:

 ' record the settings in the variable LocalSettingsDecimal Dim LocalSettingsDecimal As String Dim Buffer As String Buffer = String(256, 0) Dim le As Integer le = GetLocaleInfoA(GetUserDefaultLCID(), 14, Buffer, Len(Buffer)) LocalSettingsDecimal = Left(Buffer, le - 1) ' force decimal settings to '.' Call SetLocaleInfoA(GetUserDefaultLCID(), 14, ".") ' body Dim MyNumber As Single MyNumber = 0.03 MsgBox (MyNumber) ' set back the decimal settings Call SetLocaleInfoA(GetUserDefaultLCID(), 14, LocalSettingsDecimal) 

Отметим, что, к сожалению, в случае сбоя тела программы настройки не восстанавливаются … но это все еще отвечает на вопрос

Interesting Posts

Экспорт данных из JIRA в Excel динамически

Получите диапазон от приглашения ввода (wb1), передайте значения в определенный диапазон (wb2)

VBA Хранение нескольких столбцов в массиве во время цикла, а затем возвращаемое значение

Получение «Ошибка времени выполнения» 380: Не удалось установить свойство ListIndex. Недопустимое значение свойства. "Ошибка при открытии не редактируемого файла xls

Excel IF, ELSE, AND

Прокрутка объектов Chart в книге Excel

Модуль копирования VBA из одной книги в другую

Почему моя сводная таблица показывает разные значения, чем таблица, на которой она основана?

Цикл через подпапки и файлы в пользовательском корневом каталоге

Создать динамический выпадающий список целых чисел

Как выйти из Macro

Открытие URL-адреса из Excel (VBA) без открытия браузера

Excel VBA, чтобы найти максимальное значение ячейки в столбце и удалить все строки под ним

Как вы заполняете образ из формы с листа?

Лучший способ добавить элементы в коллекцию

Давайте будем гением компьютера.