Чтобы назначить формулу, используйте свойство Formula объекта Range.Кроме того, используйте свойство Имя рабочего листа, чтобы использовать его, а не объект рабочего листа в формуле.
Приведенный ниже код должен работать нормально.
.Range("Q" & i).Formula = "= IF(P" & i & "=" & Chr(34) & "Y" & Chr(34) & ",VLOOKUP(A" & i & ",'" & OutShVar.Name & "'!$A:$BP,68,0)," & Chr(34) & "Not Available" & Chr(34) & ")"
Ниже приведена разница между ключевыми свойствами диапазона для дальнейшего использования:
. Text
дает строку, представляющую то, что отображается на экране для ячейки.Использование .Text обычно является плохой идеей, потому что вы можете получить ####
. Value2
, который даст вам базовое значение ячейки (может быть пустым, строка, ошибка, число (double) или логическое значение)
. Value
дает то же самое, что и .Value2, за исключением того, что ячейка была отформатирована как валюта или дата, она дает вам валюту VBA (которая может урезать десятичные разряды) или дату VBA.
Источник: Другой ответ StackOverflow