我正在使用MS-Access 2010和Autocad 2012 64位并在制造业工作。
我希望能够至少填充标题栏中的字段,更好的是我还想使用访问数据库中的数据将数据写入图纸集(当前系统通过阅读图纸集来工作工作表标题和数字等值在我的标题栏中。)
以下代码是我现在所拥有的全部内容,它将打开autocad并将日期写入命令行。
Private Sub OpenAutocad_Click()
Dim CadApp As AcadApplication
Dim CadDoc As AutoCAD.AcadDocument
On Error Resume Next
Set CadApp = GetObject(, "AutoCAD.Application")
If Err.Number <> 0 Then
Set CadApp = CreateObject("AutoCAD.Application")
End If
On Error GoTo 0
CadApp.Visible = True
CadApp.WindowState = acMax
Set CadDoc = CadApp.ActiveDocument
CadDoc.Utility.Prompt "Hello from Access, the time is: " & TheTime
Set CadApp = Nothing
End Sub
我不知道从哪里开始。有哪些命令可以控制图纸集管理器和更改数据,甚至可以在不打开autocad的情况下编辑.dst文件?是否有所有可用的autocad vba命令和函数的列表?
答案 0 :(得分:1)
如果您将CadApp声明为AcadApplication,则必须添加对AutoCAD的引用。 这意味着您应该能够在VBA IDE中使用对象浏览器查看对象模型。没有? 还有一个非常有用的网站www.theswamp.org,其中有一整节专门介绍AutoCAD VBA。
答案 1 :(得分:1)
如果我正确理解您的问题,您希望直接从MS Access中自动填充图形标题栏中的属性(例如标题,抽屉,部件号等)。
您的代码可以访问Autocad命令行,但 Autocad似乎没有填写绘图属性的确切命令。 (command list)
所以看起来你需要使用COM API以编程方式填充属性。
以下问题似乎与您的问题相关,并且接受的答案确实提供了示例代码:
Is it possible to edit block attributes in AutoCAD using Autodesk.AutoCAD.Interop?
请注意,在该问题中,提问者正在使用C#.NET开发一个独立的应用程序,您将在MS Access中使用VB Automation。由于使用的组件对象模型(COM)是相同的,所以不应该太不相同。
有哪些命令可以控制图纸集管理器和更改数据,甚至可以在不打开autocad的情况下编辑.dst文件?
(抱歉,不能发布超过2个链接)
docs.autodesk.com/ACD/2010/ENU/AutoCAD%202010%20User%20Documentation/files/WS1a9193826455f5ffa23ce210c4a30acaf-7470.htm
但是,没有提及数据变化。
是否有所有可用的autocad vba命令和函数的列表?
是。
%ProgramFiles%\ Common Files \ Autodesk Shared \ acad_aag.chm - 开发人员指南
%ProgramFiles%\ Common Files \ Autodesk Shared \ acadauto.chm - 参考指南
在线版:
help.autodesk.com/cloudhelp/2015/ENU/AutoCAD-ActiveX/files/GUID-36BF58F3-537D-4B59-BEFE-2D0FEF5A4443.htm
help.autodesk.com/cloudhelp/2015/ENU/AutoCAD-ActiveX/files/GUID-5D302758-ED3F-4062-A254-FB57BAB01C44.htm
此处有更多参考资料: http://usa.autodesk.com/adsk/servlet/index?id=1911627&siteID=123112
答案 2 :(得分:0)
:)半途而废;) 如果您的开放式AutoCAD具有已加载的工程图,则可以直接访问整个对象。
Sub block_set_attribute(blo As AcadBlockReference, tagname, tagvalue)
Dim ATTLIST As Variant
If blo Is Nothing Then Exit Sub
If blo.hasattributes Then
tagname = Trim(UCase(tagname))
ATTLIST = blo.GetAttributes
For i = LBound(ATTLIST) To UBound(ATTLIST)
If UCase(ATTLIST(i).TAGSTRING) = tagname Or UCase(Trim(ATTLIST(i).TAGSTRING)) = tagname & "_001" Then
'On Error Resume Next
ATTLIST(i).textString = "" & tagvalue
Exit Sub
End If
Next
End If
End Sub
Sub findtitleblock(TITLEBLOCKNAME As String, attributename As String,
attributevalue As String)
Dim entity As AcadEntity
Dim block As acadblcck
Dim blockref As AcadBlockReference
For Each block In ThisDrawing.BLOCKS
For Each entity In block
If InStr(LCase(entity.objectname), "blockref") > 0 Then
Set blockref = entity
If blockref.effectivename = TITLEBLOCKNAME Then
Call block_set_attribute(blockref, attributename, attributevalue)
exit for
End If
End If
End If
Next
Next
End Sub
call findtitleblock("HEADER","TITLE","Bridge column AXIS A_A")
因此,假设您有一个标题栏,其标题属性为TITLE,那么它将把Attribute设置为图形名称。它也有可能您必须替换此图纸。与您的Caddoc。我通常控制Access和Excel形式的autocad,反之亦然;)
如果“什么也没有发生”,还考虑使用“ REGEN”和“ ATTSYNC”
thisdrawing.sendcommens("_attsync" 6 vblf )