Использование функции SUM в формуле ячейки приводит к ошибке #NAME

#excel #vba

#excel #vba

Вопрос:

Я сталкиваюсь со следующей проблемой:

Соответствующая строка в моем макросе VBA выглядит следующим образом

 Sheets("Sheet1").Range("N" amp; intv).Formula = "=SUM(Sheet2!" amp; Cells(row_1,col_1).Address(0,0) amp; ":" amp; Cells(row_2, col_2).Address(0,0) amp; ")" 
  

где intv, row_1, row_2 и col_1, col_2 являются целыми числами, которые будут иметь смысл только в контексте всего макроса.

Использование debug.print() в этой формуле дает именно тот результат, который я намереваюсь, но по какой-то причине, когда я запускаю макрос, ячейка

 Sheets("Sheet1").Range("N" amp; intv)
  

отображается только #NAME ошибка.

Что еще более странно, я могу удалить эту ошибку, дважды щелкнув ячейку и нажав Enter — без изменения содержимого ячейки. Использование

 Sheets("Sheet1").Calculate
  

однако ошибка не устраняется.

Стоит отметить:

Я использую

 Application.EnableEvents = False
Application.Calculation = xlCalculationManual
  

перед этой строкой. Но ввод

 Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
  

before не меняет результат. У кого-нибудь есть идея, как это исправить, или кто-нибудь испытывал нечто подобное?

Редактировать: вот исходный код.

 Sheets("Übersicht").Range("N" amp; tcurrencyc).Formula = "=SUMME(Ergebnisse!" amp; Cells(resultr - activet, resultc).Address(0, 0) amp; ":" amp; Cells(resultr, resultc).Address(0, 0) amp; ")"
  

и debug.print части формулы гласит:

 =SUMME(Ergebnisse!P8:P8)
  

в качестве atm переменной activet присваивается значение 0.

Комментарии:

1. Как указано, этот код не может быть запущен. Вы пропустили кавычку и написали ошибку Address

2. Что происходит Debug.Print Sheets("Sheet1").Range("N" amp; intv).Formula сразу после установки формулы?

3. Отображается «Ошибка #NAME», но какая формула записана в соответствующей ячейке? Возможно, один из используемых параметров (row_1, col_1 и т. Д.) неверен.

4. Скорее всего, это не настоящий код, вероятно, вместо SUM какой-то локальной версии, публикация поддельного кода затрудняет ответ.

5. @Rory извините за это, должно быть исправлено.

Ответ №1:

  1. .Formula принимает только английские формулы, такие как: =SUM(Ergebnisse!P8:P8, Ergebnisse!Q8:Q8) английский разделитель равен ,
  2. .FormulaLocal принимает локализованные формулы. Итак, в немецком Excel он будет принимать: =SUMME(Ergebnisse!P8:P8; Ergebnisse!Q8:Q8) Немецкий разделитель ;

С кодом VBA я рекомендую всегда использовать .Formula в сочетании с английской формулой. Это будет работать на любом Excel по всему миру! Не волнуйтесь, в немецком Excel вы увидите немецкую формулу в своей ячейке (она автоматически переводится), только код VBA имеет английскую версию.

.FormulaLocal изменяется с каждым языком Excel. Это означает, что ваш код будет работать только на той же языковой версии, на которой написан ваш код. Поэтому, если вы запустите немецкий код во французском Excel, он не будет работать. Версия № 1 всегда будет работать на любом языке.