EXCEL VBA: научная запись в текстовом поле формы пользователя

Я разрабатываю пользовательскую форму в EXCEL с использованием VBA. Одним из значений по умолчанию для пользовательского ввода в форме является 1E-12. Мне нужно отобразить это в пользовательской форме. Однако, когда я инициализирую текстовое поле в форме, EXCEL немедленно изменяет представление значения на 0,000000000001 (как в редакторе, так и в пользовательской форме, когда я проверяю его). В вычислительном отношении, конечно, это не проблема, однако, это немного сложно для пользователя (и занимает много места в форме для отображения целого числа). Есть ли способ заставить EXCEL показывать это значение в научной нотации в текстовом поле пользовательской формы?

Спасибо!

Дэн

2 ответа

Решение

Вы можете использовать VBA.Strings.Format$ функция для управления строковым представлением чисел.

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

Public Function FormatScientific(ByVal value as Double, Optional ByVal precision As Long = 6) As String
    If precision < 1 Then precision = 1
    Dim formatString As String
    formatString = "0." & String(precision - 1, "0") & "#e-#"
    FormatScientific = Format$(value, formatString)
End Function

Здесь я сделал precision необязательный параметр be 6 если не указано; отрегулируйте, как считаете нужным.

Теперь вы можете вызвать FormatScientific(0.0000123456789) и получить 1.234568e-5 с постоянным количеством значащих цифр, независимо от того, что вы даете, тогда как "Scientific" строка формата дает только вам 1.23E-05, который теряет довольно много значимой информации.

(адаптировано из частей этого кода)

 tbNum.Text = Format(Sheet1.Cells(1, 1).Value, "Scientific")

Принимает значение в ячейке и преобразует ее в научную запись.

Другие вопросы по тегам