Вам не нужно использовать Select для применения формул к Shapes. Следует избегать выбора везде, где это возможно, так как он увеличивает объем кода и может привести к непредвиденным последствиям, например, к запуску событий
.
Вместо этого вы можете работать с Формулой напрямую, используя DrawingOBject, см. FormApp
, который также позволит вам манипулировать существующей формулой (т. Е. Добавить 6 ячеек в А2, чтобы сделать ее А8, А12 - А18 и т. Д.). Вторая подпрограмма кода FormAdd
выполняет эту настройку, она работает как с адресами ячеек, так и с именами диапазонов
Sub FormApp()
Dim Shp As Shape
For Each Shp In ActiveSheet.Shapes
'formula
Shp.DrawingObject.Formula = "=A1"
'range name
Shp.DrawingObject.Formula = "=RangeName"
Next
End Sub
Sub FormAdd()
Dim Shp As Shape
Dim rng1 As Range
For Each Shp In ActiveSheet.Shapes
Set rng1 = Nothing
If Len(Shp.DrawingObject.Formula) > 0 Then
On Error Resume Next
Set rng1 = Range(Shp.DrawingObject.Formula)
On Error GoTo 0
If Not rng1 Is Nothing Then Shp.DrawingObject.Formula = "=" & rng1.Offset(6, 0).Address
End If
Next
End Sub