Я пытаюсь запрограммировать некоторый код VBA, который создает раскрывающееся меню в определенной ячейке листа Excel. Синаксис ясен, двойники, которые должны быть в списке, собираются в массиве MyList(). Я использую следующий подход для установки проверки данных следующим образом:
Range("A1").Validation.Add xlValidateList, xlValidAlertStop, Formula1:=Join(MyList, ",")
Я (и пользователи моей программы) работаю на компьютере с немецкой локалью. Это включает в себя то, что десятичным разделителем является запятая, а разделителем списка проверки является ;. В результате, если MyList содержит три значения (3, 4,268, 5), в раскрывающемся меню будут отображаться четыре числа (3, 4, 268, 5).
Конечно, обходным путем было бы сначала напечатать значения либо в некоторые ячейки на том же рабочем листе, либо на другом (возможно, скрытом) рабочем листе. Однако я считаю это довольно уродливым подходом.
Я также попытался преобразовать двойные числа в строку с точкой в качестве десятичного разделителя. Однако с этим есть две проблемы: во-первых, моя процедура сортировки больше не работает, теперь она сортирует значения, например. как (1, 10, 100, 2, 26, 3, 30, 300 и т. д.). Во-вторых, что еще более важно, Excel теперь интерпретирует данные также как строку. Позже в коде я снова прочитал данные, и сначала мне нужно было преобразовать данные обратно из строки в двойное число. Кроме того, есть некоторые функции рабочего листа, которые также используют это значение, поэтому мне также понадобится это преобразование в функциях рабочего листа.
Поскольку будет больше пользователей, а это приложение меньше, изменение региональных настроек Excel или Windows также невозможно.
Мне не удалось заставить работать метод фиктивного символа, описанный здесь: -comma-included-value-wi">Excel VBA: как добавить список проверки данных, который содержит значение, включенное в запятую, без использования ссылки на диапазон. Для меня замена, похоже, не работает: в раскрывающемся меню есть только одна запись, содержащая всю строку, разделенную фиктивным символом.
Итак, вопрос: есть ли способ создать список проверки непосредственно в VBA с локалью, которая использует запятую в качестве десятичного разделителя?
Application.DecimalSeparator
может быть полезно. - person BigBen   schedule 28.09.2020Application.DecimalSeparator
внутриJoin
вместо жестко закодированного","
. Однако не проверял, действительно ли это работает. - person BigBen   schedule 28.09.2020