Excel中的形状名称

时间:2018-04-10 08:33:56

标签: excel vba excel-vba shapes

我有一个VBA sub来创建几个形状,然后将这些形状重命名为单元格值(B5:B15)并添加文本(C5:C15)。

How it looks in Excel

形状被创建,重命名并添加文本但是当我尝试连接它们时,我得到了#34; Object Required"。 有人可以帮帮我吗。 提前谢谢。

Sub Button1_Click()
Dim s, conn  As Shape, i As Integer
Set w = ActiveSheet

For i = 5 To 7

    Set s = w.Shapes.AddShape(1, 800, i * 120 - 599, 100, 100)
    s.Name = Range("B" & i)
    s.TextFrame.Characters.Text = Range("C" & i)
    s.Fill.ForeColor.RGB = RGB(0, 0, 213)
    s.TextFrame.Characters.Font.ColorIndex = 19

Next i

Set conn = w.Shapes.AddConnector(1, 1, 1, 1, 1)
    conn.ConnectorFormat.BeginConnect A001, 1
    conn.ConnectorFormat.EndConnect A002, 1   
End Sub

1 个答案:

答案 0 :(得分:1)

可行的东西:

Option Explicit

Sub Button1_Click()

    Dim s As Shape, conn As Shape, i As Long
    Dim w As Worksheet
    Set w = ActiveSheet

    Dim arr As Variant
    ReDim arr(5 To 7)
    For i = 5 To 7

        Set s = w.Shapes.AddShape(1, 800, i * 120 - 599, 100, 100)
        s.Name = Range("B" & i)
        s.TextFrame.Characters.Text = Range("C" & i)
        s.Fill.ForeColor.RGB = RGB(0, 0, 213)
        s.TextFrame.Characters.Font.ColorIndex = 19
        Set arr(i) = s
    Next i

    Set conn = w.Shapes.AddConnector(1, 1, 1, 1, 1)
    conn.ConnectorFormat.BeginConnect arr(5), 1
    conn.ConnectorFormat.EndConnect arr(6), 1

End Sub

有什么区别?

  • 声明所有变量 - s是一个Shape,i是一个Long,w是一个工作表;
  • 声明由Option Explicit;
  • 强制执行
  • 引入了一个新变量arr,它保留了所有新创建的表单。因此,第一个表单保留在arr(5)下,最后一个表单是arr(7);
  • BeginConnectEndConnect需要一个表格变量。这是我们使用arr(5)arr(7);
  • 的地方

您还可以通过名称和Shapes()集合来引用形状。因此,最后3行应如下所示:

Set conn = w.Shapes.AddConnector(1, 1, 1, 1, 1)
conn.ConnectorFormat.BeginConnect w.Shapes("A001"), 1
conn.ConnectorFormat.EndConnect w.Shapes("A002"), 1