复杂代码澄清
与我在论坛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,这样每个人都有相同的版本。 顺便看看你的其他帖子
页:
[1]