有一个工作表,其中包含两列的单元格引用列表。
试图创建一个宏,将它们拉到一个范围内,并使用A列中的第一个单元格作为自选图形线条的起点,B列中的第二个单元格用作自选图形线条的终点。
该脚本正在工作,并按照我想要的去做,但是在执行结束时,我收到“下标超出范围错误”
我在做什么错了?
rng = Range("A1:B100")
Worksheets("Map").Activate
For Each row In rng
i = i + 1
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, Range(rng(i, 1)).Left, Range(rng(i, 1)).Top, Range(rng(i, 2)).Left, Range(rng(i, 2)).Top).Select
Next row
答案 0 :(得分:1)
Range("A1:B100")
与Worksheets("Map")
没有任何联系,可能是工作表(“ Map”)是活动工作表。提供正确的父级工作表参考。
您将对象(例如范围)设置为其变量。
不要选择您创建的连接器;不在循环中,永远不会。
with Worksheets("Map")
set rng = .Range("A1:B100")
For Each row In rng
i = i + 1
.Shapes.AddConnector msoConnectorStraight, _
.Range(rng(i, 1)).Left, .Range(rng(i, 1)).Top, _
.Range(rng(i, 2)).Left, .Range(rng(i, 2)).Top
Next row
end with
答案 1 :(得分:1)
避免选择和激活,声明所有变量并仅从范围的行循环:
Sub TestMe()
Dim rng As Range
Set rng = Worksheets("Map").Range("A1:B100")
Dim row As Range
Dim i As Long
For Each row In rng.Rows
i = i + 1
Worksheets("Map").Shapes.AddConnector msoConnectorStraight, _
row.Cells(i, 1).Left, _
row.Cells(i, 1).Top, _
row.Cells(i, 2).Left, _
row.Cells(i, 2).Top
Next row
End Sub