Список проверки числовых данных, созданный с помощью VBA для Excel, с локалями, в которых десятичный разделитель является запятой

Я пытаюсь запрограммировать некоторый код 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 с локалью, которая использует запятую в качестве десятичного разделителя?


person Uwe    schedule 28.09.2020    source источник
comment
Application.DecimalSeparator может быть полезно.   -  person BigBen    schedule 28.09.2020
comment
Очень хорошая идея. Однако я включил Application.DecimalSeparator = . в начале моего сабвуфера и сбросить его в конце. К сожалению, это не меняет результат, 31,6 по-прежнему считается двумя элементами 31 и 6 в выпадающем списке. Возможно, мне нужно изменить другую переменную приложения для преобразования двойных значений VBA в строки списка?   -  person Uwe    schedule 28.09.2020
comment
Я имел в виду использование Application.DecimalSeparator внутри Join вместо жестко закодированного ",". Однако не проверял, действительно ли это работает.   -  person BigBen    schedule 28.09.2020