2017-02-22 26 views
3

Я уменьшил свою проблему до следующего примера кода. Я использую немецкую версию 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 проблемы ...

+0

Похоже, это было замечено раньше: (http://stackoverflow.com/questions/29832281/vba-range-function -двойно-accepts-only-localized-arguments-pt-br) – CLR

+0

Мой Excel UI также использует точки с запятой. но ваш код работает безупречно для меня. Когда вы получите сообщение об ошибке, нажмите кнопку «Отладка» и используйте «Немедленное окно» для запроса соответствующих переменных. – user3598756

+0

. Немецкая версия Excel использует ';' вместо ',' как разделитель в списках, потому что '' 'уже используется как разделитель десятичных чисел в Германии так как 'половина 'написано' 0,5' вместо '0,5'. Я упоминаю это, потому что вы говорите, что иногда это происходит. Поэтому я хотел бы попросить вас проверить «Application.DecimalSeparator», когда это произойдет. Если '' '' работает 'Application.DecimalSeparator' должен быть' .'. Но если он больше не работает и вместо этого требует ';', я предполагаю, что 'DecimalSeparator' также изменился на', '. – Ralph

ответ

0

Если вы хотите ее контролировать, сначала проверьте, какой разделитель используется в данный момент. То, что я предполагаю, что вы хотите знать разделителя списка:

Application.International(xlListSeparator) 

Проверить другие разделительные здесь: https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-international-property-excel

В другой раз у меня была проблема с определением десятичного разделителя в VBA. В финнале я смог получить его таким образом:

Function GetVBAdecimalSep() 
    Dim a(0) As Variant 
    a(0) = 1/2 
    GetVBAdecimalSep = Mid(a(0), 2, 1) 
End Function 

Сменный сепаратор не всегда работает. См. Это: Changing decimal separator in VBA (not only in Excel)

Лучшим решением является проверка/изменение языкового стандарта, даже временного.

Application.LanguageSettings.LanguageID(msoLanguageIDUI)

дает LCID, который был бы 1033 для английского языка (США)

 Смежные вопросы

  • Нет связанных вопросов^_^