与我在论坛VLISP区域的帖子类似,这个问题是关于我正在使用的一些代码,但我不完全理解它在发生什么。Fixo非常慷慨地为我提供了大部分信息,通过反复试验,主要是我自己的错误,我把一切都做好了。
- Private Declare Function SetFocus Lib "user32" (ByVal hwnd As Long) As Long
- Option Explicit
- '' Require Reference to:
- '' Tools--> References --> AutoCAD 2XXX Type Library
- '' Tools--> References --> AutoCAD Focus Control for VBA Type Library
- '' and also set options here:
- '' Tools--> Options --> General --> Error Trapping -> check 'Break on Unhahdled Errors' button
- Private Declare Function SetFocus Lib "user32" (ByVal hwnd As Long) As Long
- Sub Main()
- Dim acApp As AcadApplication
- Dim AcDocs As AcadDocuments
- Dim acDoc As AcadDocument
- Dim acSpace As AcadBlock
- Dim acdCap As String, ExcCap As String, copyStr As String
- '*******************************************************************
- ' OPEN AUTOCAD THEN OPEN THE DRAWING FILE, LOAD THE VLISP AND EXECUTE IT
- '********************************************************************
- Dim strDrawing As String
- On Error Resume Next
- Set acApp = GetObject(, "AutoCAD.Application")
- If Err.Number <> 0 Then
- Err.Clear
- Set acApp = CreateObject("AutoCAD.Application")
- End If
- On Error GoTo Err_Control
- acApp.Visible = True
- SetFocus acApp.hwnd
- Application.WindowState = xlMinimized
- acApp.WindowState = acMax
- 'strDrawing = "C:\My_Files\My_Dwg.dwg"
- Set acDoc = acApp.Documents.Open(strDrawing)
- acDoc.Activate
- Set acDoc = acApp.ActiveDocument
- acDoc.SendCommand ("(load ""C:\\My_Files\\My_VLISP.lsp"" ""The load failed"") My_Function" & Chr(13))
- Err_Control:
- End Sub
再说一次,我想我可以把大部分注意力集中在这件事上。但例如,第一行是私人声明。。。。我认为这其中有很多部分我可以去掉,还有一些模糊的陈述,也就是我知道我可以去掉的copyStr。
我想问一下所有的专家,你们是否可以逐行,用外行的话来解释这是怎么回事。这是我正在使用的代码的重要部分,我想完全理解它。
这也是我想要尝试和软化的代码部分,这样它可以感觉到AutoCAD的现有运行是否已启动,并使用它,而不是在每次运行时启动它的新实例,除非它最初没有运行。
顺便说一句,如果有人对此感兴趣,我找到了一种方法,可以根据用户运行的AutoCAD版本动态添加AutoCAD类型库引用。它还清除任何缺失的,以防它们是上次运行时留下的。这并不容易,而且是必需的,因为在这里,他们使用的是多个版本的AutoCAD。我听说他们现在看到了标准化这一点的需要,可能很快就会运行联网的AutoCAD,这样每个人都有相同的版本。 |