【问题标题】:Update a table data link in AutoCAD using VBA使用 VBA 在 AutoCAD 中更新表数据链接
【发布时间】:2019-02-14 21:50:08
【问题描述】:

我有一个问题,有一个包含大量数据链接的 AutoCAD 文件,并且只想更新与特定表相关的数据链接。 类似于选择带有数据链接的表,右键单击并选择更新表数据链接的功能。

我有以下代码:

Private Sub Update_table_data_link(tblRef As AcadTable)

ThisDrawing.SendCommand "DATALINKUPDATE" & vbCr & "U" & vbCr & "K" & vbCr

End Sub

它可以工作,但会更新绘图中的所有数据链接(这是一个问题),所以一个完美的解决方案可以让我得到与tblRef相关联的链接
并将该行更改为:
ThisDrawing.SendCommand "DATALINKUPDATE" & vbCr & "U" & vbCr & "D" & vbCr & "datalink_name_from_tblRef" & vbCr

或者直接发送命令更新链接到tblRef

【问题讨论】:

  • 我完全不熟悉 AutoCAD 对象模型,但是DATALINKUPDATE 命令是否带有其他(可选?)参数? ThisDrawing 听起来很像主机文档;按 F2 调出 Object Browser,然后搜索“SendCommand” - 该方法是否仅作为 ThisDrawing 的成员存在?我的意思是可能有一个TableLink.SendCommand 方法;如果是这种情况,那么您也许可以取消引用您要更新的特定表并对其运行范围更窄的命令。
  • sendcommand 并不是真正的问题,它只是模仿在 autocad 命令栏中键入命令,DATALINKUPDATE 可以采用多个路径,“U”使其更新现有数据链路,然后“K”选项更新所有,“D”选项将更新一个特定的,那是我碰壁的地方,因为我不知道我必须为我选择的每个表更新哪个。
  • 我会展示自己,然后把这个留给了解 AutoCAD 对象模型的人 ;-)

标签: excel vba autocad data-linking


【解决方案1】:

经过大量挖掘和大量帮助,答案如下:

Private Sub Update_table_data_link(tblRef As AcadTable)

    ThisDrawing.SendCommand "DATALINKUPDATE " & vbCr & "U" & vbCr & Ent2lspEnt(tblRef) & vbCr & vbCr

End Sub

Public Function Ent2lspEnt(entObj As AcadEntity) As String
    'Designed to work with SendCommand, which can't pass objects.
    'This gets an objects handle and converts it to a string
    'of lisp commands that returns an entity name when run in SendCommand.
    Dim entHandle As String

    entHandle = entObj.Handle
    Ent2lspEnt = "(handent " & Chr(34) & entHandle & Chr(34) & ")"
End Function

注意“Update_table_data_link”有一个表作为输入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多