Member 11875489 Ответов: 1

МС 2010 чтобы макрос не удается - не удается установить обновление ячейки формула


Мой макрос MS Excel (подпрограмма), который обновляет формулу ячейки, начал выходить из строя (после последнего обновления Microsoft 2017-03-10). Теперь, когда этот раздел кода запускается, MS Excel останавливается, а затем пытается восстановиться. Строка кода, вызывающая остановку, - это повторное назначение обратно в ячейку с новой / измененной формулой. Я проверил строку кода, указав на пустую ячейку, и она успешно работает. При наведении его обратно на уже заполненную ячейку код не срабатывает. Я широко искал возможные причины, не находя решения. Мы очень ценим вашу помощь. Ниже фрагмент кода показывает, что я делаю:

Фрагмент кода:
  '   Insert new row in "Register"; Push down rows; automatic update row numbers
  '   iRowInsert code inserts new row (oWS1.Range("A5").EntireRow.Insert)
  Call iRowInsert
  
  Dim oWS1, oWS2, i, j, k, orgFormula, newFormula
  Dim oRNG, maxRows, maxCols, rowStart, rowCurrent
  
    
  Set oWS1 = Worksheets("Register")
  Set oWS2 = Worksheets("Budget")

  '   Identify range beginning row number
  rowStart = 5
  rowCurrent = rowStart
  '   Retrieve cell's formula
    orgFormula = oWS2.Cells(rowCurrent, 4).Formula
  '   orgFormula is "=SUMIFS(Register!$I$6:$I412,Register!$K$6:$K412,D$1,Register!$H$6:$H412,$A5)"
  '   Replace original formula's starting row number
    newFormula = Replace(newFormula, "$6:", "$4:")
    oWS2.Cells(rowCurrent, 4).Locked = False     ' really not needed - workbook not protected
  '   *******  fails when re-setting a filled cell's formula *****
    oWS2.Cells(rowCurrent, 4).Formula = newFormula
  '   ************************************************************
'     oWS2.Cells(rowCurrent, 3).Value = newFormula ' works correctly when inserted into empty cell
     oWS2.Cells(rowCurrent, 4).Locked = True     ' really not needed - workbook not protected


Что я уже пробовал:

(1) Google аналогичные проблемы и проанализировал предлагаемые результаты
(2) Содержание и структура формата с двойной/тройной проверкой -
(3) запуск кода против пустой ячейки-успешная вставка
(4) запуск кода против заполненной ячейки-сбой

1 Ответов

Рейтинг:
1

Patrice T

внимательно прочтите, что говорит каммент и что делает следующая строка !

'   Replace original formula's starting row number
  newFormula = Replace(newFormula, "$6:", "$4:")

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.

[Обновление]
Цитата:
Я запустил отладчик и проверил правильное содержимое, хранящееся в обеих переменных, origFormula и newFormula

Вы проверили, что ваше ожидание правильно, и это так, вам нужно проверить, что ваш код тоже соответствует ожиданию, но это не так.
newFormula = Replace(newFormula, "$6:", "$4:")

Я же сказал тебе перечитайте очень внимательно эту строчку.


Member 11875489

Я запустил отладчик и проверил правильное содержимое, хранящееся в обеих переменных, origFormula и newFormula. Макрос немедленно и неожиданно прерывается с выполнением назначения значения newFormula для замены origFormula, хранящегося в ячейке. Когда пустая ячейка используется для получения новой формы, она сохраняет ее правильно. (?? сообщение об ошибке не отображается - просто попытка восстановления)

Member 11875489

Кроме того, этот marco успешно работал более 2 лет без изменения кода. Теперь он терпит неудачу.

Bryian Tan

Наверное, благодаря Центру обновления Майкрософт :)

Patrice T

Нет, читайте обновление.

Member 11875489

Кстати: я поймал эту ошибку, сообщив номер ошибки 1004 (краткое название " Центр доверия..."). я дважды проверил опцию безопасности, которая установила эту опцию на" Включить все макросы " (не очень хорошая идея в долгосрочной перспективе). Я снял флажки Locked options для обоих листов (закомментированные строки кода для разблокировки/блокировки). Созданный Самозаверяющий Сертификат. Макрос терпит неудачу (тот же номер ошибки 1004).... время передать мою недавно обнаруженную проблему в Microsoft.

Patrice T

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

Member 11875489

Решенная проблема. Вставленный "...Ячейки (x, y).ClearContents" после Locked=false. Рабочий лист незащищен, в соответствии с заблокированной спецификацией рабочий лист должен быть защищен. Перед вставкой ClearContent возвращается номер ошибки 1004. После добавления инструкции clear cell возвращаемый номер ошибки равен 0 (на данный момент исправлен).

Спасибо за вашу ценную информацию и предложения.