Ошибка выполнения 1004, но процедура все еще выполняется

У меня странная проблема с макросом, вызывающим сообщение об ошибке времени выполнения 1004. Макрос делает следующее:

  1. Создает новый рабочий лист для записи новой идеи проекта (собирает данные из пользовательской формы)
  2. Создает новую строку на итоговом листе для этой идеи
  3. Определяет именованный диапазон (с именем «IdeaTitles»), который содержит все названия идей из всех представленных идей для использования в других частях рабочей книги (списки проверки и т. д.).
  4. Отображает подтверждение MsgBox для пользователя

Когда я запускаю этот макрос на своем компьютере (в США), он работает безупречно — никаких сообщений об ошибках или проблем. Когда коллега из Германии запускает макрос на своем компьютере, он получает следующее сообщение об ошибке:

Ошибка выполнения "1004"

Если он нажимает кнопку «Отладка», он выделяет эту строку процедуры:

wbHopper.Names.Add Name:="IdeaTitles", RefersTo:="=OFFSET('" & wsSummary.Name & "'!$C$6,0,0," & lngCurrentIdeaRow - lngFirstIdeaRow + 1 & ",1)"

Я попросил его навести указатель мыши на каждую из переменных/объектов в этой строке, и все они имеют разумные значения. Для первой идеи lngCurrentIdeaRow = 6 и lngFirstIdeaRow = 6, что дает вам следующее:

Формула именованного диапазона

Обратите внимание, что строка 6 — это первая строка, в которой хранятся сведения об идеях на сводном листе.

Что интересно, если он нажмет F8 в окне отладки, чтобы выполнить код, он завершится без каких-либо ошибок. Думая, что я сумасшедший, я попросил его представить несколько фиктивных идей, в которых он нажимал «Отладка», затем нажимал F5, чтобы завершить выполнение кода, и он работал без ошибок.

Любая идея о том, что может вызвать это всплывающее окно с ошибкой на его конце? Это не мешает завершению макроса, но я хотел бы очистить его, прежде чем он поделится им со своей командой.


person Tom Winchester    schedule 18.01.2018    source источник
comment
Какая-то проблема с региональными настройками, связанная с запятыми?   -  person John Coleman    schedule 18.01.2018
comment
Как сказал Коулман, некоторые неанглийские EXCEL используют точку с запятой; вместо запятой.   -  person MrDogme    schedule 18.01.2018
comment
Получите правильный разделитель для использования с Application.International(xlListSeparator)   -  person Mathieu Guindon    schedule 18.01.2018
comment
Хм, это новая мысль - я полагал, что использование запятых в формулах было стандартным независимо от региона. Я попробую ваше предложение @Mat'sMug   -  person Tom Winchester    schedule 18.01.2018
comment
Excel использует символ разделитель списка для разделения аргументов функции. См. комментарий выше.   -  person Mathieu Guindon    schedule 18.01.2018
comment
@Mat'sMug Разве вам не пришлось бы использовать RefersToLocal, если бы вы использовали настройки для конкретной локали? (Итак, точно так же, как все пользователи должны использовать запятые в Formula, но не в FormulaLocal, я ожидал, что им придется использовать запятые в RefersTo и использовать только точки с запятой и т. д. в RefersToLocal.)   -  person YowE3K    schedule 18.01.2018
comment
@YowE3K тьфу. стоит протестировать. Мне нужно настроить французскую виртуальную машину...   -  person Mathieu Guindon    schedule 19.01.2018
comment
@Mat'sMug Рад, что ты можешь делать такие вещи. Я застрял с единственным языком, который у меня есть, и должен угадывать каждый раз, когда упоминается одна из этих проблем международного использования.   -  person YowE3K    schedule 19.01.2018
comment
Кроме того, интересно то, что если он нажмет F8 в окне отладки, чтобы выполнить код, он завершится без каких-либо ошибок. подразумевает, что это не ошибка из-за локали - обычно это означает, что что-то не так с рабочей книгой и/или рабочим листом (хотя я не вижу ничего плохого в том, как код написан, что могло бы вызвать это)   -  person YowE3K    schedule 19.01.2018
comment
Поэтому я заменил все запятые в части RefersTo на Application.International(xlListSeparator), и, похоже, это сработало отлично. Сотрудник в Германии подтвердил сегодня утром, что ошибка больше не появляется! Меня это, конечно, удивляет, но спасибо всем, кто помог мне отследить проблему.   -  person Tom Winchester    schedule 19.01.2018
comment
@Mat'sMug, не могли бы вы опубликовать свое предложение в качестве ответа, чтобы я мог отметить его как выполненное? Дополнительная благодарность MrDogme и John Coleman!   -  person Tom Winchester    schedule 19.01.2018


Ответы (1)


Excel использует символ разделитель списка для разделения аргументов функции.

Вы можете получить этот символ из настроек локали системы, используя Application.International(xlListSeparator).

person Mathieu Guindon    schedule 19.01.2018