yswoyh 发表于 2024-9-21 10:49:33

请教批量修改扩展数据的问题。

程序执行到第三行时出现错误,i=4时,之后的就全部逃过了,对象ID句柄我也看了,没有一样的
Private Sub Command3_Click()
    Dim selectedObj As Object
    Dim xDataType(0 To 10) As Integer
    Dim xDataValue(0 To 10) As Variant
    Dim i As Long

    ' 获取 AutoCAD 实例
    Set AcadApp = GetObject(, "AutoCAD.Application")
    If AcadApp Is Nothing Then
      MsgBox "未检测到AutoCAD实例,请先启动AutoCAD", vbCritical
      End
    End If
    Set AcadDoc = AcadApp.ActiveDocument

            ' 设置扩展数据的类型
    xDataType(0) = 1001 ' 应用程序名
    xDataType(1) = 1000 ' 人名
    xDataType(2) = 1000 ' 所在地
    xDataType(3) = 1000 ' 建筑结构
    xDataType(4) = 1000 ' 房屋编号
    xDataType(5) = 1040 ' 面积(双精度)
    xDataType(6) = 1000 ' 房屋年代
    xDataType(7) = 1070 ' 层数(整型)
    xDataType(8) = 1070 ' 联系电话(长整型)
    xDataType(9) = 1000 ' 备注
    xDataType(10) = 1040 ' 对象ID 双精度

    ' 循环处理 MSFlexGrid 的每一行
    For i = 1 To MSFlexGrid1.Rows - 1

      ' 检查对象ID是否有效
      If IsNumeric(Trim(MSFlexGrid1.TextMatrix(i, 10))) Then
            On Error Resume Next
            Set selectedObj = AcadDoc.ObjectIdToObject(CDbl(Trim(MSFlexGrid1.TextMatrix(i, 10))))
            If Err.Number <> 0 Then
                MsgBox "行 " & i & " 的对象ID无效,跳过处理。", vbCritical
                Err.Clear
                GoTo NextIteration
            End If
            On Error GoTo 0
      Else
            MsgBox "行 " & i & " 的对象ID无效,跳过处理。", vbExclamation
            GoTo NextIteration
      End If

      ' 获取扩展数据的值
      xDataValue(0) = MSFlexGrid1.TextMatrix(i, 0) ' 应用程序名称
      xDataValue(1) = MSFlexGrid1.TextMatrix(i, 1)
      xDataValue(2) = MSFlexGrid1.TextMatrix(i, 2)
      xDataValue(3) = MSFlexGrid1.TextMatrix(i, 3)
      xDataValue(4) = MSFlexGrid1.TextMatrix(i, 4)

      ' 面积转换
      If IsNumeric(MSFlexGrid1.TextMatrix(i, 5)) Then
            xDataValue(5) = CDbl(MSFlexGrid1.TextMatrix(i, 5))
      Else
            xDataValue(5) = 0
      End If

      xDataValue(6) = MSFlexGrid1.TextMatrix(i, 6)

      ' 层数转换
      If IsNumeric(MSFlexGrid1.TextMatrix(i, 7)) Then
            xDataValue(7) = CInt(MSFlexGrid1.TextMatrix(i, 7))
      Else
            xDataValue(7) = 0
      End If

      ' 联系电话转换
      If IsNumeric(MSFlexGrid1.TextMatrix(i, 8)) Then
            xDataValue(8) = CLng(MSFlexGrid1.TextMatrix(i, 8))
      Else
            xDataValue(8) = 0
      End If

      xDataValue(9) = MSFlexGrid1.TextMatrix(i, 9)

      ' 对象ID转换
      If IsNumeric(MSFlexGrid1.TextMatrix(i, 10)) Then
            xDataValue(10) = CDbl(MSFlexGrid1.TextMatrix(i, 10))
      Else
            xDataValue(10) = 0
      End If

      ' 向对象添加扩展数据
      selectedObj.SetXData xDataType, xDataValue

NextIteration:
    Next i
End Sub

yswoyh 发表于 2024-9-21 13:06:39

找到问题所在了,就是对象ID句柄的问题
页: [1]
查看完整版本: 请教批量修改扩展数据的问题。