Формула, вставленная кодом в массив строк, не вычисляется

#excel #vba #excel-formula

Вопрос:

У меня проблема в том, что формулы не пересчитываются, если я добавляю их за один шаг из строкового поля.

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

Ничего из этого не работает:

  • автоматически рассчитываемые формулы включаются
  • Я пытался
  • ActiveCell.NumberFormat = «Общие» — не работает
  • Я пробовал приложение.Изменчиво — не работает Запись текста в столбцы и назначение ячеек «общим»
     Sub AddActualsSum2()    Dim ws As Excel.Worksheet  Set ws = ThisWorkbook.Worksheets("XXXX")  Call ProtectSheet(ws, False)   Dim r, s, monthRange, monthRange01, monthRangeDynamic As Range  Dim MonthLock, i, LockActuals As Integer  Dim c As String  Dim StartActualsDate, PlanDate As Date       Set monthRange = Range("_ActualsY02M01:_ActualsY02M12")  Set monthRangeDynamic = Range("_ActualsSumMonthY2")    Dim varData(1 To 12) As String   Call ProtectSheet(ws, False)  For i = 1 To 12  varData(i) = "=1 2"   Next     Debug.Print "Format: " amp; monthRange(1).NumberFormat  Debug.Print "Value: " amp; monthRange(1).Value  Debug.Print "Formula: " amp; monthRange(1).Formula   monthRange.Formula = varData      End Sub  

В результате получается, что формула = 1 2 везде

после нажатия в строке формулы формула уже рассчитана правильно.

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

1. Есть ли в этом какая-то цель varData ? Вы можете просто сделать monthRange.Value = "=1 2" , monthRange.Value2 = "=1 2" или monthRange.Formula = "=1 2" получить 3 за .Value , .Value2 и .Text , и получить "=1 2" за .Formula , за каждую ячейку.

Ответ №1:

При записи массива в виде блока Excel обрабатывает значения как строки (которыми они являются), а не как формулы.

Поместите запись формулы в цикл, например

 For i = 1 To 12  varData(i) = "=1 2"  monthRange.Cells(i, 1).Formula = varData(i)  Next  

Кроме того, ваши объявления переменных неверны. VBA требует, чтобы каждая переменная имела тип, в противном случае по умолчанию они являются вариантами. Например:

 Dim MonthLock, i, LockActuals As Integer  

Должно быть:

 Dim MonthLock As Range, i As Integer, LockActuals As Integer