Попробуйте заменить
Dim Formulas(1 To 2) As Double
в
Dim Formulas(1 To 2) As Variant
Но это не причина вашей ошибки. Это покажет «Несоответствие типов». Вы вводите строки в массив. Независимо от того, каким будет результат формулы ...
Тогда,
With ThisWorkbook.Worksheets
не имеет никакого значения для VBA, в этом контексте, и эта строка проблематична c, повышая ошибка в обсуждении.
Это должно быть With ThisWorkbook.Worksheets(1)
, или With ThisWorkbook.Worksheets("My Sheet")
, или даже With ActiveSheet
...
И, если вы попытаетесь использовать его для копирования массива в все листы это надо делать по-другому. Я покажу вам, как, если это было вашим намерением ...
Дополнительно, формула таким образом "=IF(L2="";0;L2)"
может работать не так, как вам нужно. Даже если, согласно локализации, разделителем формул является «;», рекомендуется использовать "=IF(L2="",0,L2)"
. Excel выполнит соответствующее преобразование , и в случае использования книги на компьютере с разделителем-запятой ошибка не возникнет. Из-за этого вы также можете получить ошибку в строке .Range("Y2:Z2").Formula = Formulas
. Вы можете решить эту проблему, выполнив то, что я рекомендовал выше ...
Фактически ваша функция должна выглядеть так:
Sub AddFormula()
Dim Formulas(1 To 2) As Variant
With ActiveSheet 'ThisWorkbook.Worksheets
Formulas(1) = "=INT((TODAY()-J2)/365.25)"
Formulas(2) = "=IF(L2="""",0,L2)"
.Range("Y2:Z2").Formula = Formulas
.Range("Y:Z").NumberFormat = "General"
End With
End Sub
Вы получаете сообщение об ошибке, потому что обе строки ваших формул содержат ошибки: 365,25
должно быть 365.25
. В противном случае VBA считает, что это еще одно разделение списка (,
), и произойдет ошибка, и каждый символ двойных кавычек должен быть удвоен в строке. Я имею в виду, что "=IF(L2="",0,L2)"
должно стать "=IF(L2="""",0,L2)"
.
Теперь, когда я уверен, что указанная выше функция будет работать, я отправлю еще одну, способную заполнить (сразу) все столбцы, которые вам нужно заполнить вниз отдельным шагом:
Sub AddFormulaBis()
Dim Formulas(1 To 2) As Variant, lastRow As Long
With ActiveSheet 'ThisWorkbook.Worksheets
lastRow = .Range("J" & Rows.Count).End(xlUp).row
Formulas(1) = "=INT((TODAY()-J2)/365.25)"
Formulas(2) = "=IF(L2="""",0,L2)"
.Range("Y2:Z" & lastRow).Formula = Formulas
.Range("Y2:Z" & lastRow).NumberFormat = "General"
End With
End Sub