Excel VBA ведет себя по-разному на разных языках - PullRequest
0 голосов
/ 15 июля 2010

Win-XP, Excel 2003

У меня есть диапазон, определяемый именем, который заполняется запросом.Тот же именованный диапазон формирует источник проверки ячейки (раскрывающийся список внутри ячейки).В моем VBA этот диапазон доступен через объект диапазона с именем LOVL2.

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

LOVL2.CurrentRegion.Name = LOVL2.Name.Name

, оператор работает нормально, пока язык MS Office установлен на английский, но оператор не выполняется, когда язык MS Office установлен на французский .... У меня ошибка 1004 "Неверное имя "

Кто-нибудь понял, что является причиной этого, только если язык MS Office установлен на FRENCH, но не на АНГЛИЙСКОМ?(может быть проблема с ";" против "," внутри объекта ?? ")

Заранее спасибо MikeD


edit 12 августа 2010

НАСТОЯЩИЙосновная причина теперь ясна:

имя диапазона - «L2PoP», которое в английской версии распознается как допустимое имя для диапазона - в этом случае вы можете перейти на любой пустой лист, выбрать диапазон и назвать его"L2PoP".

Установите язык пользователя на FRENCH, перейдите на любой пустой лист, выберите диапазон и назовите его "L2PoP", и вы получите сообщение об ошибке "Nom non valide".

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

Я могу только догадываться о том, что вызывает это, возможно, это связано с тем, что первый2 символа выглядят как адрес ячейки, с другой стороны, «A1PoP» является допустимым именем, тогда как «L2Foo» и «L1Foo» недопустимы.

странно, но .....

1 Ответ

0 голосов
/ 15 июля 2010

который заполняется запросом

По таблице запросов?
Диапазон результатов таблицы запросов уже имеет имя, которое является именем (немного очищенным) самой таблицы запросов (задается в диалоговом окне свойств). Это означает, что вам не нужно ничего переопределять.

А если так, попробуйте этот код:

Sub asfgsdfg()

  Dim n As Name
  Set n = ThisWorkbook.Names("LOVL2")

  'Or in case of a local name,
  'Set n = ThisWorkbook.Worksheets("The worksheet").Names("LOVL2")

  ChangeNamedRangeAddress n, n.RefersToRange.CurrentRegion

End Sub

Public Sub ChangeNamedRangeAddress(ByVal n As Name, ByVal NewRange As Range)
  n.RefersTo = "='" & Replace(n.RefersToRange.Worksheet.Name, "'", "''") & "'!" & NewRange.Address(True, True, xlA1)
End Sub

EDIT

Что касается продолжения ... Самое странное и забавное.

Попробуйте использовать нижнее подчеркивание или что-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...