Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用VBA更新AutoCAD中的表格数据链接_Excel_Vba_Autocad_Data Linking - Fatal编程技术网

Excel 使用VBA更新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

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

我有以下代码:

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对象模型的人;-)