Тема: Выгрузка проекта

Скажите пожалуйста как можно выгрузить проект из Автокада???
UnloadVBA так сказать!
Лазила по справке, но там написано только про то, как выгрузить форму!

Re: Выгрузка проекта

> Дарья

Option Explicit
'требуется ссылка на библиотеку: MicroSoft VBA Extensibility 5.0
Private Function GetVBAProjects() As Variant
Dim objVBE As VBIDE.VBE
Dim objVBProject As VBIDE.VBProject
Dim Index As Integer
Dim Projects() As String
Set objVBE = App.VBE
If objVBE.VBProjects.Count Then
're-dimension array to hold names of projects
ReDim Projects(objVBE.VBProjects.Count - 1)
Else
Exit Function
End If
For Each objVBProject In objVBE.VBProjects
Projects(Index) = objVBProject.Name
Index = Index + 1
Next objVBProject
GetVBAProjects = Projects
End Function

~'J'~

Re: Выгрузка проекта

> Дарья
Проверь сначала на копии!!!

Re: Выгрузка проекта

> fixo
Возникли ошибки. Скажите пожалуйста как их исправить:
1)Требует объявление переменной App.
Как ее объявить As Variant???
2)Говорит что в этой строке ошибка синтаксиса:

ReDim Projects(objVBE.VBProjects.Count — 1)

Библиотеку подключила!

Re: Выгрузка проекта

> Дарья
Я не то загрузил, а то что надо не могу найти :)
Используй этот лисп он будет выполняться автоматически

rvba.lsp
(defun c:rvba (/ adoc cnt dicts)
  (vl-load-com)
  (setq    adoc  (vla-get-activedocument
        (vlax-get-acad-object)
          )
    dicts (vla-get-dictionaries adoc)
  )
  (if (not (vl-catch-all-error-p
         (setq vba_dict (vl-catch-all-apply
                  (function    (lambda    ()
                      (vla-item dicts "ACAD_VBA")
                    )
                  )
                )
         )
       )
      )
    (progn
    (setq cnt 0)
    (vlax-for a    vba_dict
      (vla-delete a)
      (setq cnt (1+ cnt))
    )
  )
  (alert (strcat "Выгружено " (itoa cnt) " проектов")))
  (gc)
  (princ)
)
(c:rvba)
(princ)

~'J'~

Re: Выгрузка проекта

> fixo
Скажите пожалуйста а у Вас есть аналог на VBA?
Я просто не знаю как Лиспом пользоваться.

Re: Выгрузка проекта

> fixo
Вот нашла процедурку:
Syntaxt :
UnloadDVB <Drive:\Path\DVBfilename>
только проблемма в том, что выгружает только с определенного места, я имею ввиду что надо задавать точный путь к выгруженному проекту. А можно ли выгружать без задавания адреса нахождения проекта??

Re: Выгрузка проекта

> Дарья
По-быстрому перевел, только не проверял

Option Explicit
Sub RemProject()
Dim oDicts As AcadDictionaries
Dim oDict As AcadDictionary
Dim vbDict As AcadDictionary
Dim vbObject As AcadObject
Dim i As Integer
On Error GoTo Err_Control
Set oDicts = ThisDrawing.Dictionaries
On Error Resume Next
For Each oDict In oDicts
If oDict.Name = "ACAD_VBA" Then
Set vbDict = oDict
Exit For
End If
If Err Then
Err.Clear
End If
Next
For Each vbObject In vbDict
Debug.Print vbObject.ObjectName
vbObject.Delete
If Err.Number = 0 Then
i = i + 1
End If
Next
MsgBox "There are " & i & " projects was removed"
On Error GoTo Exit_Here
Exit_Here:
On Error Resume Next
Set vbDict = Nothing
Set oDict = Nothing
Set oDicts = Nothing
Exit Sub
Err_Control:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
Resume Exit_Here
End Sub

~'J'~

Re: Выгрузка проекта

> Дарья
Как пользоваться лиспом:
http://dwg.ru/art/8
~'J'~

Re: Выгрузка проекта

> fixo
Пишет:
0 проектов выгружено

Re: Выгрузка проекта

из справки
    Dim FileName As String
    FileName = "c:\drawline.dvb"
    ' Load a sample VBA project DVB file
    LoadDVB FileName
    ' Run the drawline sample macro
    RunMacro "Module1.Drawline"
    ' Unload the drawline VBA project DVB file now.
    UnloadDVB FileName
    MsgBox "The DVB file has been run!"
но у меня появился в связи с этим вопрос
как выгрузить работающий в данный момент проект???

Re: Выгрузка проекта

хотя нет прошу прощения работающий макрос выгружается...

Re: Выгрузка проекта

> A32978
У меня возник тот же ворос!!!!!!!!!!
Я выше об этом писала!!!!

Re: Выгрузка проекта

> A32978
Выгружается потому, что в переменной FileName содержится путь к файлу:
FileName = "c:\drawline.dvb"

Re: Выгрузка проекта

> A32978
А если отрезать верхнюю часть кода, то проект не вугрузится:
Unload the drawline VBA project DVB file now.
UnloadDVB FileName
MsgBox "The DVB file has been run!"

Re: Выгрузка проекта

Дарья вы меня немного запутали, ну вот это должно работать, в любом случае
Sub UNLOAD()
Dim q
Set q = Application.VBE
Dim jP As Long
On Error Resume Next
For jP = q.vbprojects.Count To 1 Step -1
AutoCAD.UnloadDVB q.vbprojects.Item(jP).FileName
Next
End Sub
Выгрузит все кроме себя

Re: Выгрузка проекта

Выгрузка макросов
Я сделал так, чтобы в загруженными были только те макросы, которые необходимы для вы-полнения конкретной задачи. Дело в том, что некоторые встроенные функции работают не на тот макрос, из которого запущены, а на макрос, стоящий по алфавиту выше. Например, при работе в режиме правой мыши…
Конечно, 'требуется ссылка на библиотеку: MicroSoft VBA Extensibility 5.0
Кроме того,  по окончании работы запущенного макроса, наверно, лучше восстановить ста-тус-кво загруженных макросов.
Sub StartMyMacro(i%, row%)
    'given:
        'i% - ListIndex
        'row% - строка в Excel
    Call WriteLastDataIndex(i, row) 'запись индекса в Excel
    Call controlFileExample   'управление файлом-примером
    'выгрузка лишних макросов (DVB files), чтобы не иметь нескольких макросов:
        '- с одинаковыми стартовыми Sub (см. команду RunMacro "mdMain.StartDo")
        '- с режимами работы ПКМ (в этом случае работает макрос первый по алфавиту)
        Dim j%, nMacros%, UnloadMacroCur As Boolean
        Dim MacroPreviousName$, mpn$ 'mpn for MacrosLoadedBefore(j)
        If MacroPreviousName = "" Then 'если общий макрос ещё не работал
            'создание списка уже загруженных макросов
                'сначала надо привязать соответствующую библиотеку, то есть:
                    'Tools/References...
                    'Microsoft Visual Basic for Application Extensibility 5.3
                nMacros = Application.VBE.VBProjects.Count
                ReDim MacrosLoadedBefore(1 To nMacros)
                For j = 1 To nMacros
                    On Error Resume Next 'когда для нового макроса не указан Path
                    MacrosLoadedBefore(j) = Application.VBE.VBProjects(j).fileName
                    Err.Clear
                Next
            'выгрузка
                For j = 1 To nMacros
                    UnloadMacroCur = True
                    mpn = MacrosLoadedBefore(j)
                    If mpn = MacroFileName Then UnloadMacroCur = False
                    If mpn = "C:\ACADadd\ACADmacros\AAAgeneral\General.dvb" Then UnloadMac-roCur = False
                    If mpn = "C:\ACADadd\ACADmacros\AAAgeneral\MyLibrary2.dvb" Then Unload-MacroCur = False
                    If mpn = "C:\ACADadd\ACADmacros\AAAgeneral\MyLibrary3.dvb" Then Unload-MacroCur = False
                    If mpn = "C:\ACADadd\ACADmacros\AAAgeneral\MyLibrary4.dvb" Then Unload-MacroCur = False
                    If UnloadMacroCur Then
                        On Error Resume Next 'макросы, пристроенные к конкретному файлу, не вы-гружаются
                        UnloadDVB mpn
                        Err.Clear
                    End If
                Next
                LoadDVB MacroFileName
        Else
            If MacroPreviousName <> MacroFileName Then
                UnloadDVB MacroPreviousName 'выгрузка предыдущего макроса
                LoadDVB MacroFileName 'загрузка нового макроса
            End If
        End If
        MacroPreviousName = MacroFileName
    'запуск макроса
        RunMacro "mdMain.StartDo"'все мои макросы имеют такие модули и такие стартовые Subs
End Sub

Re: Выгрузка проекта

> Дарья
Наткнулся тут на хороший код, поробуй:
http://www.cpearson.com/excel/vbe.aspx
примерно середина страницы:
"Deleting All VBA Code In A Project"
~'J'~