我试图在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,则箭头将正确绘制。

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

最佳答案

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

excel - VBA中的绘图箭头超出范围-LMLPHP

2348 inches169056点。您可以在Excel中通过在“即时”窗口中键入?Application.InchesToPoints(2348)进行检查。但是,您最多可以达到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

09-25 15:31