Я уменьшил свою проблему до следующего примера кода. Я использую немецкую версию Excel, в которой разделителями в обычных формулах Excel являются точки с запятой ";" вместо «,» (например, =SUMME(A1;A3)
вместо =SUM(A1,A3)
).
Теперь код, который работает разное время от времени:Диапазон принимает иногда только запятые, а не запятые
Sub CommasDoNotWorkAnymore()
Dim a()
Dim i%
a = Array("A1,A3,A5", "B1", "B2")
i = 0
Debug.Print Sheets(1).Range(a(i)).Address
End Sub
Как правило, при запуске Excel, этот код работает. Но иногда Excel, похоже, переключает принятые разделители, используемые в Range()
, на точки с запятой, пока я не перезапущу Excel. Это происходит чаще всего при повторном запуске кода после ошибки времени выполнения.
Является ли это общей ошибкой Excel? Кто-нибудь знает, что стоит за этим поведением? Существует ли «локальный вариант» в Excel для класса Range
?
EDIT: Я просто попытался преобразовать a(i)
с CStr(a(i)
, но это также не работает. Таким образом, не проблема ByRef проблемы ...
Похоже, это было замечено раньше: (http://stackoverflow.com/questions/29832281/vba-range-function -двойно-accepts-only-localized-arguments-pt-br) – CLR
Мой Excel UI также использует точки с запятой. но ваш код работает безупречно для меня. Когда вы получите сообщение об ошибке, нажмите кнопку «Отладка» и используйте «Немедленное окно» для запроса соответствующих переменных. – user3598756
. Немецкая версия Excel использует ';' вместо ',' как разделитель в списках, потому что '' 'уже используется как разделитель десятичных чисел в Германии так как 'половина 'написано' 0,5' вместо '0,5'. Я упоминаю это, потому что вы говорите, что иногда это происходит. Поэтому я хотел бы попросить вас проверить «Application.DecimalSeparator», когда это произойдет. Если '' '' работает 'Application.DecimalSeparator' должен быть' .'. Но если он больше не работает и вместо этого требует ';', я предполагаю, что 'DecimalSeparator' также изменился на', '. – Ralph