Excel 使用VBA更新AutoCAD中的表格数据链接
我有一个问题,有一个AutoCAD文件,其中包含大量数据链接,并且只想更新与特定表相关的数据链接。 类似于选择带有数据链接的表的功能,右键单击并选择更新表数据链接 我有以下代码:Excel 使用VBA更新AutoCAD中的表格数据链接,excel,vba,autocad,data-linking,Excel,Vba,Autocad,Data Linking,我有一个问题,有一个AutoCAD文件,其中包含大量数据链接,并且只想更新与特定表相关的数据链接。 类似于选择带有数据链接的表的功能,右键单击并选择更新表数据链接 我有以下代码: Private Sub Update_table_data_link(tblRef As AcadTable) ThisDrawing.SendCommand "DATALINKUPDATE" & vbCr & "U" & vbCr & "K" & vbCr End Sub
Private Sub Update_table_data_link(tblRef As AcadTable)
ThisDrawing.SendCommand "DATALINKUPDATE" & vbCr & "U" & vbCr & "K" & vbCr
End Sub
它可以工作,但会更新图形中的所有数据链接(这是一个问题),因此完美的解决方案可以让我获得与tblRef相关联的链接
并将行更改为:
ThisDrawing.send命令“DATALINKUPDATE”&vbCr&“U”&vbCr&“D”&vbCr&“datalink\U name\U from\U tblRef”&vbCr
或者直接发送命令更新到tblRef
的链接,在经过大量挖掘和帮助后,以下是答案:
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
请注意,“更新表格数据链接”有一个表格作为输入经过深入研究和大量帮助,以下是答案:
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
请注意,“更新表格数据链接”有一个表格作为输入我对AutoCAD对象模型一点也不熟悉,但是DATALINKUPDATE
命令是否采用其他(可选)参数<代码>此绘图
听起来很像是宿主文档;点击F2以打开对象浏览器,并搜索“SendCommand”-该方法是否仅作为该绘图的成员存在?我的意思是可能有一个TableLink.SendCommand
方法;如果是这种情况,那么您可能可以取消对要更新的特定表的引用,并对其运行范围更严格的命令。sendcommand不是真正的问题,它只是模拟在autocad命令栏中键入命令,DATALINKUPDATE可以采用多个路径,“U”使其更新现有datalink,然后是“K”选项更新全部,而“D”选项将更新一个特定的选项,这是我遇到墙的地方,因为我不知道我必须为我选择的每个表更新哪个。我将展示自己,并将此选项留给了解AutoCAD对象模型的人;-)我对AutoCAD对象模型一点也不熟悉,但是DATALINKUPDATE
命令是否采用其他(可选)参数<代码>此绘图听起来很像是宿主文档;点击F2以打开对象浏览器,并搜索“SendCommand”-该方法是否仅作为该绘图的成员存在?我的意思是可能有一个TableLink.SendCommand
方法;如果是这种情况,那么您可能可以取消对要更新的特定表的引用,并对其运行范围更严格的命令。sendcommand不是真正的问题,它只是模拟在autocad命令栏中键入命令,DATALINKUPDATE可以采用多个路径,“U”使其更新现有datalink,然后是“K”选项更新全部,而“D”选项将更新一个特定的选项,这是我遇到墙的地方,因为我不知道我必须为我选择的每个表更新哪个。我将展示自己,并将此选项留给了解AutoCAD对象模型的人;-)