请教批量修改扩展数据的问题。
程序执行到第三行时出现错误,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
找到问题所在了,就是对象ID句柄的问题
页:
[1]