明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 249|回复: 1

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

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式
程序执行到第三行时出现错误,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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 7 天前 | 显示全部楼层
找到问题所在了,就是对象ID句柄的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-28 03:20 , Processed in 0.181671 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表