将单元格引用用于自动整形线

时间:2018-09-20 07:46:57

标签: excel vba excel-vba

有一个工作表,其中包含两列的单元格引用列表。

试图创建一个宏,将它们拉到一个范围内,并使用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

2 个答案:

答案 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