通过 VBA 在不打开的情况下访问 autocad 对象属性

Access autocad object properties without opening it by VBA

我一直在使用 VBA 的文件夹浏览器,我可以粘贴它的代码,但最重要的是我得到的是作为字符串返回的文件名。 有什么方法可以在不打开的情况下访问绘图属性(即布局数量)?

Public Sub TestFileDialog()
    dwgname = FileBrowseOpen("C:", "*", ".dwg", 1) 'dwgname is typeof string
End Sub

这只是第一步(显示了 FileBrowseOpen 功能的使用,但我也可以使用 FolderBrowse 并收集文件夹内的所有 .dwg),实际上我想将所选 .dwg 的所有布局批量导出到当前打开一个。有机会吗?

要有效读取 .dwg 文件,您需要打开 AutoCAD,否则无法访问信息。有些属性可能是,例如作者,但不是布局数量...

但您可以使用 AutoCAD 控制台 (accoreconsole.exe) 运行 无头 AutoCAD 并使用 API 读取您需要的任何信息。这对于读取大量文件来说非常快,用户不会看到它 运行ning(但无论如何都需要安装)。

http://aucache.autodesk.com/au2012/sessionsFiles/3338/3323/handout_3338_CP3338-Handout.pdf

您可以留在 VBA 并使用 ObjectDBX 它导致与 .NET 中的 accoreconsole.exe on 非常相似的方法,即您不会在 UI 中看到任何打开的绘图,因为它在数据库本身上工作 它需要将库引用(工具-> 引用)添加到 "AutoCAD/ObjectDBX Common XX.Y Type Library",其中 "XX.Y" 是 AutoCAD 2014 的“19.0” 一个最小的功能代码是

Sub main()

Dim myAxDbDoc As AxDbDocument
Dim FullFileName As String

FullFileName = "C:\..\mydrawing.dwg"  '<== put here the full name of the file to be opened
Set myAxDbDoc = AxDb_SetDrawing(FullFileName)
MsgBox myAxDbDoc.Layers.Count

End Sub



Function AxDb_SetDrawing(FullFileName As String) As AxDbDocument
Dim DBXDoc As AxDbDocument

Set DBXDoc = Application.GetInterfaceObject("ObjectDBX.AxDbDocument.19") '<== place correct AutoCAD version numeber ("19" works for AutoCAD 2014)

On Error Resume Next
DBXDoc.Open FullFileName
If Err <> 0 Then
    MsgBox "Couldn't open" & vbCrLf & vbCrLf & FullFileName, vbOKOnly + vbCritical, "AxDB_SetDrawing"
Else
    Set AxDb_SetDrawing = DBXDoc
End If
On Error GoTo 0

End Function

不过,您必须有一个 AutoCAD 会话 运行ning 从中创建此子 运行!不过既然说了"currently open"画

你就应该有