#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