Попробуйте это. Он находит объект диапазона, в котором находится «Общая сумма гранта», затем использует атрибут столбца для выбора диапазона рядом с ним (1 столбец справа). Я сохранил GrandTotal как диапазон, поэтому ваш тест по-прежнему работает так же.
Хорошо, я отредактировал это, чтобы включить ваш новый код. Это работает, чтобы поместить fromula в столбец от строки 9 до строки 10,000. На самом деле вам не нужно выполнять весь такой выбор, копирование и вставку, но вот ваш код. Проблема заключалась в том, что вы помещали формулу в «активную ячейку» после выбора диапазона от строки 1 до 10 000, она помещала формулу только в первую строку, а не в строку 9.
With Worksheets("Fake")
Set GrandTotal = .Range("A5:BE5").Find("Grand Total", LookIn:=xlValues)
If Not GrandTotal Is Nothing Then
.Range(.Cells(1, GrandTotal.Column + 1), .Cells(10000, GrandTotal.Column + 1)).Select
End If
End With
Cells(9, GrandTotal.Column + 1).FormulaR1C1 = _
"=IF(RC[-21]="""","""",IF(ISNUMBER(SEARCH(""total"",RC[-21])),"""",RC[-22]))"
Cells(9, GrandTotal.Column + 1).Select
Selection.Copy
Debug.Print GrandTotalColumnLetter
With Worksheets("Fake")
.Range(.Cells(1, GrandTotal.Column + 1), .Cells(10000, GrandTotal.Column + 1)).Select
'ERROR HERE
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range(.Cells(9, GrandTotal.Column + 1), .Cells(10000, GrandTotal.Column + 1)).Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End With