mikesmithfl 发表于 2006-5-2 14:48:45

ObjectDBX从AccessVBA-如何关闭acad.exe?

大家好:
新手在这里有一个问题。我终于能够找到足够的信息来弄清楚如何从Access w VBA和ObjectDBX中读取和更改dwg文件中的摘要信息,但是当我清理时,要么我无法启动它,要么acad.exe进程仍然存在。
有人能告诉我如何在不需要用户干预的情况下完成它吗?
如果我这样做,
   Dim objAcad As Object
   Dim dbxDoc As AxDbDocument
   Dim oSumInfo As AcadSummaryInfo
   Dim strDwgName As String
   
   strDwgName = "D:\Working\Doc_nums_and_logs\NewVersionOffice\Drawing1.dwg"
   
   Set objAcad = GetObject(, "AutoCAD.Application.16")
   Set dbxDoc = objAcad.GetInterfaceObject("ObjectDBX.AxDbDocument.16")
   
   dbxDoc.Open (strDwgName)
   Set oSumInfo = dbxDoc.SummaryInfo

   MsgBox "this is it before " & oSumInfo.Comments
   
   dbxDoc.SummaryInfo.Comments = "changed here by me again"
   dbxDoc.SaveAs (strDwgName)
   objAcad.Quit
   
   MsgBox "this is it after " & oSumInfo.Comments
objAcad.Quit
   Set oSumInfo = Nothing
   Set dbxDoc = Nothing
   Set objAcad = Nothing

那么如果没有Autocad已经启动,它就无法工作。
如果我这样做,没有“对象”:
   Dim dbxDoc As AxDbDocument
   Dim oSumInfo As AcadSummaryInfo
   Dim strDwgName As String
   
   strDwgName = "D:\Working\Doc_nums_and_logs\NewVersionOffice\Drawing1.dwg"
   
   Set dbxDoc = GetInterfaceObject("ObjectDBX.AxDbDocument.16")
   
   dbxDoc.Open (strDwgName)
   Set oSumInfo = dbxDoc.SummaryInfo

   MsgBox "this is it before " & oSumInfo.Comments
   
   dbxDoc.SummaryInfo.Comments = "changed here by me again"
   dbxDoc.SaveAs (strDwgName)
   
   MsgBox "this is it after " & oSumInfo.Comments
   Set oSumInfo = Nothing
   Set dbxDoc = Nothing

那么它将在没有Autocad已经启动的情况下正常启动,但它不会正确关闭并保持acad.exe进程处于活动状态。(据我所知)但是如果我没有要关闭的对象,我该怎么办?
感谢您提供任何线索,但真正明目张胆的线索更值得赞赏
**** Hidden Message *****

Dnereb 发表于 2006-5-2 15:27:49

嗨,Mike,
正如Berend所说,您必须检查正在运行的实例,如果没有找到,则创建一个。我还要进一步说,您应该根据您是否实例化了Acad会话将变量设置为T/F,这样您只能在打开它时关闭它。无论如何,请为Acad会话设置一个对象。此外,在需要关闭Acad之前,先设置dbxDoc=没什么,然后关闭它。

Jeff_M 发表于 2006-5-2 15:58:31

谢谢Berend & Jeff——我正在朝那个方向努力,但是我似乎把顺序颠倒了。你应该打扫干净然后关上它?显然睡眠不足——我知道得更清楚...
我刚刚从项目中被拉出来,去扑灭另一场大火,所以我稍后会再回来。
再次感谢!
页: [1]
查看完整版本: ObjectDBX从AccessVBA-如何关闭acad.exe?