Связать ячейку с фигурой Excel

В Excel мы вставляем фигуру и можем связать ее со значением ячейки, выбрав фигуру и введя ссылку на ячейку в строке формул. Я хочу знать: как мы можем сделать это программно. Нравиться

For Each shape As Excel.Shape In workshet.Shapes
  'is there something like shape.Formula or any method from which I can do the above
   task.         
Next

Вот то, что я хочу сделать программно

Уже сутки, ищу. Очень нужна помощь, большое спасибо.


person Waqas    schedule 18.11.2011    source источник


Ответы (2)


Вам не нужно использовать Select для применения формул к фигурам. По возможности следует избегать выбора, так как он раздувает код и может иметь непредвиденные последствия, например запуск событий.

Вместо этого вы можете работать с формулой напрямую, используя DrawingOBject, seeFormAppкоторый также позволит вам манипулировать существующей формулой (например, добавить 6 ячеек к A2, чтобы сделать ее A8, A12 к A18 и т. д.). Вторая подпрограмма кода 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
person brettdj    schedule 18.11.2011
comment
+1 Я надеялся, что кто-нибудь идентифицирует объект, содержащий свойство .Formula. - person chris neilsen; 19.11.2011

Самый простой вариант — сначала программно выбрать фигуру, а затем применить формулу

Dim Shp as Shape
For each Shp in ActiveSheet.Shapes
    Shp.Select
    Selection.Formula = "=A1"
Next

Или, конечно, это приведет к ошибке, если форма на листе не поддерживает свойство .Formula

person chris neilsen    schedule 18.11.2011