Тема: Выгрузка проекта
Скажите пожалуйста как можно выгрузить проект из Автокада???
UnloadVBA так сказать!
Лазила по справке, но там написано только про то, как выгрузить форму!
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Выгрузка проекта
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Скажите пожалуйста как можно выгрузить проект из Автокада???
UnloadVBA так сказать!
Лазила по справке, но там написано только про то, как выгрузить форму!
> Дарья
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'~
> fixo
Возникли ошибки. Скажите пожалуйста как их исправить:
1)Требует объявление переменной App.
Как ее объявить As Variant???
2)Говорит что в этой строке ошибка синтаксиса:
ReDim Projects(objVBE.VBProjects.Count — 1)
Библиотеку подключила!
> Дарья
Я не то загрузил, а то что надо не могу найти :)
Используй этот лисп он будет выполняться автоматически
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'~
> fixo
Скажите пожалуйста а у Вас есть аналог на VBA?
Я просто не знаю как Лиспом пользоваться.
> fixo
Вот нашла процедурку:
Syntaxt :
UnloadDVB <Drive:\Path\DVBfilename>
только проблемма в том, что выгружает только с определенного места, я имею ввиду что надо задавать точный путь к выгруженному проекту. А можно ли выгружать без задавания адреса нахождения проекта??
> Дарья
По-быстрому перевел, только не проверял
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'~
> Дарья
Как пользоваться лиспом:
http://dwg.ru/art/8
~'J'~
из справки
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!"
но у меня появился в связи с этим вопрос
как выгрузить работающий в данный момент проект???
хотя нет прошу прощения работающий макрос выгружается...
> A32978
У меня возник тот же ворос!!!!!!!!!!
Я выше об этом писала!!!!
> A32978
Выгружается потому, что в переменной FileName содержится путь к файлу:
FileName = "c:\drawline.dvb"
> A32978
А если отрезать верхнюю часть кода, то проект не вугрузится:
Unload the drawline VBA project DVB file now.
UnloadDVB FileName
MsgBox "The DVB file has been run!"
Дарья вы меня немного запутали, ну вот это должно работать, в любом случае
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
Выгрузит все кроме себя
Выгрузка макросов
Я сделал так, чтобы в загруженными были только те макросы, которые необходимы для вы-полнения конкретной задачи. Дело в том, что некоторые встроенные функции работают не на тот макрос, из которого запущены, а на макрос, стоящий по алфавиту выше. Например, при работе в режиме правой мыши…
Конечно, 'требуется ссылка на библиотеку: 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
> Дарья
Наткнулся тут на хороший код, поробуй:
http://www.cpearson.com/excel/vbe.aspx
примерно середина страницы:
"Deleting All VBA Code In A Project"
~'J'~
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Выгрузка проекта
Форум работает на PunBB, при поддержке Informer Technologies, Inc