我有一个两阶段的计划。Can#039;由于保密协议,我无法详细说明,因此我';我试着解释一下
这里有AutoCAD 2005和AutoCAD 2009机器。Excel VBA程序I';ve WRITE启动AutoCAD并运行编辑图形的VLISP文件。在我的机器上效果很好
现在,将该过程移动到具有不同版本AutoCAD的用户。这取决于Excel程序启用的正确引用类型。适用于AutoCAD 2005 don#039;t与2009年合作,反之亦然。我想出了一种方法来确定机器上有哪个版本的AutoCAD,并加载正确的参考
所以我试着把这两部分放在一起,作为一个过程。设置参考,然后运行AutoCAD…不那么容易。我将代码的部分分为两个不同的模块。我可以运行设置引用的第一部分。然后我可以运行第二个部分,它完成AutoCAD的工作。所以我觉得很好,我将在第一个模块的末尾放置一个call语句,以调用第二个模块中的主函数。但是当我这样做的时候';就像第一部分中的所有代码一样,get#039;s跳过了。当我单步执行(F8)程序时,它直接跳转到第二部分中的Dim语句,因为引用不是';t启用后,它就在那里崩溃了  
好的,我拿出了任何能让我进入荷兰语的东西,这是我';我正在努力完成
- ------- BEGIN MODULE 1 ------------------------------------------------------------------
- Sub AddReference()
- Dim strGUID1 As String, strGUID2 As String, theRef As Variant, i As Long
- Dim ACADVersion As String
-
- '************************************************************************
- ' OPEN TEXT FILE ON USERS' HOME DRIVE AND GET ACAD VERSION NUMBER
- '************************************************************************
- Open "H:\ACADVersion.txt" For Input As #1
- Input #1, ACADVersion
- Close #1
- If ACADVersion = 2009 Then
- strGUID1 = "{851A4561-F4EC-4631-9B0C-E7DC407512C9}" ' ACAD 2009
- Else
- strGUID1 = "{1EFD8E85-7F3B-48E6-9341-3C8B2F60136B}" ' ACAD 2005
- End If
- strGUID2 = "{FC0C6DFB-96E9-4520-B0D2-993650F89DD4}" ' COMMON
-
- ' 'Set to continue in case of error
- On Error Resume Next
-
- 'Remove any missing references
- For i = ThisWorkbook.VBProject.References.Count To 1 Step -1
- Set theRef = ThisWorkbook.VBProject.References.Item(i)
- If theRef.isbroken = True Then
- ThisWorkbook.VBProject.References.Remove theRef
- End If
- Next i
-
- 'Clear any errors so that error trapping for GUID additions can be evaluated
- Err.Clear
-
- 'Add the reference
- ThisWorkbook.VBProject.References.AddFromGuid _
- GUID:=strGUID1, Major:=1, Minor:=0
-
- ThisWorkbook.VBProject.References.AddFromGuid _
- GUID:=strGUID2, Major:=1, Minor:=0
-
- 'If an error was encountered, inform the user
- Select Case Err.Number
- Case Is = 32813
- 'Reference already in use. No action necessary
- Case Is = vbNullString
- 'Reference added without issue
- Case Else
- 'An unknown error was encountered, so alert the user
- MsgBox "A problem was encountered trying to" & vbNewLine _
- & "add or remove a reference in this file" & vbNewLine & "Please check the " _
- & "references in your VBA project!", vbCritical + vbOKOnly, "Error!"
- End Select
- On Error GoTo 0
- 'Main
- End Sub
- ------- END OF MODULE 1 ------------------------------------------------------------------
- ------- BEGIN MODULE 2 ------------------------------------------------------------------
- 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
- 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
- Private Declare Function SetFocus Lib "user32" (ByVal hwnd As Long) As Long
- Sub Main()
- '************************************************************************
- '* WRITE THE TEXT FILE IN THE USERS' HOME FOLDER
- '************************************************************************
- Dim ce As Range
- Open "H:\tf.txt" For Output As #1
- For Each ce In Worksheets("Sheet1").Range("D5:D6,K6,M6,D8,F12:F19,F21,F23:F27,F29:F30,F32:F33,F35,F38:F39,I17")
- Write #1, ce.Value
- Next ce
- Close #1
- '************************************************************************
- '* 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:\Path_to_Dwg.dwg"
- Set acDoc = acApp.Documents.Open(strDrawing)
- acDoc.Activate
- Set acDoc = acApp.ActiveDocument
- acDoc.SendCommand ("(load ""MyLisp.lsp"" ""The load failed"") doit" & Chr(13))
- Err_Control:
- End Sub
- ------- END OF MODULE 2 ------------------------------------------------------------------
更新:;我现在明白了……我把模块2顶部的四个Dim语句移到了子主线的正下方,它';现在正在工作。如果任何人对此I 35; 039;我很感激。
|