在autocad vba中获取数组时出错。下标超出范围

在autocad vba中获取数组时出错。下标超出范围,vba,autocad,polyline,subscript,Vba,Autocad,Polyline,Subscript,我试图创建代码,选择多边形,并告诉它包含什么,即多行文字。 但我在重拨阵列时出错 下面是它的代码。它的下标 Sub polycoords() Dim objSSet As AcadSelectionSet, a As AcadLWPolyline, objSSet1 As AcadSelectionSet, a1 As AcadMText, pointsArray() As Double, j As Integer, i As Integer Dim lngMode As Long

我试图创建代码,选择多边形,并告诉它包含什么,即多行文字。 但我在重拨阵列时出错

下面是它的代码。它的下标

Sub polycoords()
   Dim objSSet As AcadSelectionSet, a As AcadLWPolyline, objSSet1 As AcadSelectionSet, a1 As AcadMText, pointsArray() As Double, j As Integer, i As Integer
    Dim lngMode As Long, cc As Integer
    If Not objSSet Is Nothing Then
        objSSet.Delete
     End If
    Set objSSet = ThisDrawing.SelectionSets.Add("443t39cr2t")

    objSSet.SelectOnScreen

     For Each a In objSSet



         ReDim pointsArray(0 To UBound(a.Coordinates) + UBound(a.Coordinates) / 2)
         j = 0
         For i = 0 To UBound(a.Coordinates) + UBound(a.Coordinates) / 2 Step 2
             pointsArray(j) = a.Coordinates(i)
             j = j + 1
             pointsArray(j) = a.Coordinates(i)
             j = j + 1
             pointsArray(j) = a.Coordinates(i)
             j = j + 1
         Next i

               Set objSSet1 = ThisDrawing.SelectionSets.Add("g44c3rt2it")
               lngMode = acSelectionSetWindowPolygon

               objSSet1.SelectByPolygon lngMode, pointsArray
              For Each a1 In objSSet1
                  Debug.Print a1.TextString
              Next a1

         Debug.Print vbNewLine

         On Error Resume Next
     Next a
     If Not objSSet Is Nothing Then
        objSSet.Delete
     End If


End Sub

代码中的主要问题是没有按照AutoCAD对象nmodel正确处理两个阵列的正确和不同尺寸

1) 属性为多段线返回“OCS中的二维点数组”

2) 方法接受“三元素双精度数组”

在下面的代码中,您可以看到这些问题已修复,同时还存在一些与
SelectionSet
对象的设置和使用相关的概念缺陷(请参见解释性注释):

当然,您可以决定将SelectionSet代码块包装到特定函数中,以避免重复代码,更好地维护代码,并希望重用代码,如:

Function GetOrSetSelectionSet(ssetname As String) As AcadSelectionSet
    Dim objSSet As AcadSelectionSet

    On Error Resume Next
    Set objSSet = ThisDrawing.SelectionSets(ssetname) ' try gettin the selection set named after passed variable 'ssetname'
    On Error GoTo 0
    If objSSet Is Nothing Then Set objSSet = ThisDrawing.SelectionSets.Add(ssetname) ' if unsuccessful (i.e. there was no such SSet named after passed variable 'ssetname') then create it
    objSSet.Clear ' clear the selectionset

    Set GetOrSetSelectionSet = objSSet ' return the selectionset object
End Function
在主代码中用作:

Set objSSet = GetOrSetSelectionSet("443t39cr2t") ' get or set a cleared selection set named after "443t39cr2t"


谢谢你的回复,而不是那些每个都有五条语句的代码块,但是代码实际上没有返回任何东西……并且没有错误。你能修好吗?我在回答之前自己测试了一下。因此,您可以通过单步执行代码(将光标放在代码的任何位置,然后按F8键,然后按F8键转到下一个语句)并在即时窗口中查询相关变量(CTRL-G将其弹出,并键入类似的内容,例如,
?j
,然后按enter键)来测试它
Set objSSet = GetOrSetSelectionSet("443t39cr2t") ' get or set a cleared selection set named after "443t39cr2t"
Set objSSet1 = GetOrSetSelectionSet("g44c3rt2it") ' get or set a cleared selection set named after "g44c3rt2it"