VBA中的绘图箭头超出范围

时间:2019-04-02 13:46:48

标签: excel vba

我试图在VBA中作为较大宏的一部分绘制错误,并在尝试在具有70000多行的图纸上运行宏时遇到错误。该代码在较小的文件上运行时没有错误,因此我怀疑这是问题所在。

以下是无法运行的代码示例;

xStart = 1661.625
yStart = 76.5
yEnd = 11126311
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, xStart, yStart, xStart, yEnd).Select
With Selection.ShapeRange.Line
    .EndArrowheadStyle = msoArrowheadTriangle
    .ForeColor.RGB = RGB(255, 0, 0)
End With

请注意,如果我将yEnd中的最后一个取为1112631,则箭头将正确绘制。

在图纸上绘制时,箭头对象的长度是否有限制?有人为此有工作吗?

1 个答案:

答案 0 :(得分:2)

您可以达到的最大高度为2348 inches,如下图所示。

enter image description here

2348 inches169056分。您可以通过在立即窗口中输入?Application.InchesToPoints(2348)在Excel中进行检查。但是,您最多可以达到169156

您可以尝试使用此代码

ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 100, 100, 100, 169156)

如果右键单击添加的形状,您将看到大小为2348英寸,如上面的屏幕截图所示。在169157,它将引发错误。因此,要回答您的问题Is there a limit to the length of an arrow object...,答案是169156

强制代码以查找限制。

Sub Sample()
    Dim shp As Shape
    Dim i As Long

    '~~> I started with 50000 instead of 169000
    '~~> The lower you go the more time it will take obviously
    For i = 169000 To 169158
        On Error Resume Next
        Set shp = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 100, 100, 100, i)
        If Err.Number <> 0 Then
            Debug.Print "Error at " & i
            Exit For
        Else
           shp.Delete
        End If
        On Error GoTo 0
    Next i
End Sub