Link cell with Excel Shape

2019-01-25 18:48发布

问题:

In excel, we insert a shape, and we can link it to a cells value, by selecting shape and typing the cell reference in formula bar. I want to know: How can we do that programmatically. Like

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

Here is what I want to do programmatically

It's been days now , I am searching it. Really Need help, Thanks Alot.

回答1:

You don't need to use Select to apply formulas to Shapes. Select should be avoided wherever possible as it bloats code, and can have unintended consequences - for example triggering Events

Instead you can work with the Formula directly by using DrawingOBject, seeFormAppwhich also will let you manipulate existing formula (ie add 6 cell to A2 to make it A8, A12 to A18 etc). The second code routine FormAdd makes this adjustment, it works on both cell addresses and range names

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


回答2:

The simplest option is to programatically select the shape first, then apply the formula

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

Or course this will error if a shape on the sheet does not support the .Formula property