Nano Hash - криптовалюты, майнинг, программирование

NumberFormat VBA с пользовательскими данными

Я работаю над книгой, в которой есть заданное количество вычислений шаблона, которые используются несколько раз в рамках скопированной книги. Был создан объект формы, где пользователь должен ввести идентификатор для каждого набора вычислений, который соответствует определенному формату. Обычно он следует за «aaa-##0.00», где «aaa» — это строка из 1–3 букв. Затем в форме есть поле со списком, которое очищается и заполняется при активации и содержит 258 предоставленных клиентом текстовых возможностей (для уменьшения вероятной ошибки пользователя) с текстовым полем рядом с ним для ввода цифр. При нажатии кнопки «Выполнить» он идентифицирует выбранные вычисления, требуемые от пользовательской формы, копирует рабочий лист (листы) шаблона в конец рабочей книги и заполняет информацию об идентификаторе внизу списка на странице «Содержание». Вот соответствующий код:

Dim prefix As String
Dim LocMP As Double

'The digits are entered in txtLocMP
LocMP = Val(txtLocMP.Value)

'mpPrefixLst is the combo box, with 'prefix' being the desired custom format
prefix = mpPrefixLst.Text & "-#0.00"

При отладке значения, хранящиеся в «LocMP» и «prefix», выглядят удовлетворительно, при этом LocMP является числом, а «prefix» — строкой желаемого формата. Отсюда я пробовал несколько разных вариантов. Первый,

With Contents
'Contents is type WorkSheet, locCount is the number of entries in Contents
'including the offset for the header
   .Unprotect
          'Other unrelated functions
   .Range("C" & locCount).Value = Format(LocMP, prefix)
          'Other unrelated functions
   .Protect
End With

Секунда,

With Contents
          'Other unrelated functions
   With .Range("C" & locCount)
      .Value = LocMP
      .NumberFormat = prefix
   End With
          'Other unrelated functions
End With

Ни один из этих вариантов, хотя они оба имеют смысл для меня, не дает желаемых результатов. Например, если предоставленный текст для «mpPrefixLst» — «SFE», то значение моего «префикса» показывает, что оно равно «SFE-#0.00», что в точности соответствует ожидаемому. Когда для LocMP введено значение 555,44, результат в измененной ячейке будет «36FE-#0,00», тогда как желаемый результат будет «SFE-555,44»! Я искал на этом сайте (и других) даже приблизительное решение, которое я мог бы подогнать, и сайт MSDN совсем не помогает. Любая помощь будет принята с благодарностью!


  • Как я сказал в своем редактировании, добавьте обратную косую черту между каждым буквальным символом. i.imgur.com/FFRZr5G.png 14.07.2015

Ответы:


1

Поместите обратную косую черту между каждым символом:

Sub Test()
Cells(1, 1).NumberFormat = GetFixedPrefix("SAE-") & "#0.00"
End Sub

Function GetFixedPrefix(prefix as String) as String
Dim x, fixedPrefix
fixedPrefix = ""
For x = 1 to Len(prefix)
    fixedPrefix = fixedPrefix & "\" & Mid(prefix,x,1)
Next x
GetFixedPrefix = fixedPrefix
End Function

Это делает ваш NumberFormat = \S\F\E\-#0.00, который должен отображаться правильно:

Изображение

Подробнее здесь

Обратная косая черта. Любой символ, стоящий после обратной косой черты \, будет отображаться как литерал, даже если он может быть зарезервирован как оператор (скажем, %). Число 0,75 с кодом формата #.00% отформатируется в 75.00%, а с кодом формата #.00\% будет отформатировано в .75%, т.е. код формата будет использовать % не как оператор, а как литерал.

14.07.2015
  • Оно работает! Интересно, почему это не рассматривалось как текстовый литерал с самого начала? 14.07.2015
  • Моё предположение таково: E- followed by atleast one "0" character (in format code), displays the number in scientific notation 14.07.2015
  • Хм... Придется немного помолчать. 15.07.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..