При написании этого вопроса я нашел решение:
Проблема заключалась в массиве строк. Я обычно держусь подальше от Variant
из-за небольших накладных расходов. Поскольку кто-то, пришедший из C ++, объявляет все как вариант, чувствует себя очень грязным, но в любом случае, в этом случае это, очевидно, необходимо, так как передача String
заставит его вставить значение в виде литеральной строки.
Для меня это несколько нелогично, поскольку передача одной строки (не массива) в свойство .Formula
работает. Если кто-нибудь знает, почему я был бы благодарен за эту информацию.
В любом случае, рабочий код будет:
Sub Fill_Using_Arrays()
Dim i As Long
Dim formulae(1 To 10000) As Variant ' Only change here
For i = 1 To 10000
formulae(i) = "=$A$" & i
Next i
[A2].Resize(10000).Formula = formulae
End Sub
Редактировать: Чтобы было ясно, в качестве продолжения мне любопытно, почему это работает:
[A2].Formula = formulae(1)
И заполняет это как фактическую формулу, а не как строку.