我有一个VBA sub来创建几个形状,然后将这些形状重命名为单元格值(B5:B15)并添加文本(C5:C15)。
形状被创建,重命名并添加文本但是当我尝试连接它们时,我得到了#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
答案 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)
; BeginConnect
和EndConnect
需要一个表格变量。这是我们使用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