AutoCAD VBA. Как написать автоматически выполняемый код?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AutoCAD VBA. Как написать автоматически выполняемый код?

AutoCAD VBA. Как написать автоматически выполняемый код?

Ответ
Поиск в этой теме
Непрочитано 14.12.2010, 16:40 #1
AutoCAD VBA. Как написать автоматически выполняемый код?
Лиспер
 
Регистрация: 11.10.2010
Сообщений: 979

Собственно вопрос такой. Необходимо написать dvb-код (да, именно так, другие варианты не катят), который сразу после загрузки через vl-vbaload будет выполняться. Такое возможно? Если возможно, то как? Беглый поиск по форуму результата не дал
Спасибо.
__________________
(/= RegDate StartReadDate)
Просмотров: 6807
 
Непрочитано 14.12.2010, 17:19
1 | #2
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Собственно вопрос такой. Необходимо написать dvb-код (да, именно так, другие варианты не катят), который сразу после загрузки через vl-vbaload будет выполняться. Такое возможно? Если возможно, то как? Беглый поиск по форуму результата не дал
Спасибо.
Может, так:
Код:
[Выделить все]
Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
 If CommandName = "VBARUN" Then
  If Application.VBE.ActiveVBProject.FileName = "E:\12345\LEP_04KV\EtotVBA.dvb" Then
     main
  End If
 End If
End Sub
Соответственно, в строке сравнения должно быть имя файла этого dvb проекта.. Ну и main - имя главного модуля..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 15.12.2010, 01:17
#3
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


AlexV, спасибо, но проблема в том, что я загружать dvb-модуль буду без команд, а через ActiveX (я не уверен, что сработает событие EndCommand).
В Excel, по-моему, можно было создать самозапускаемый макрос, со специальным именем (нечто типа Auto_Load или Auto_Start, точно уже не помню) - он срабатывал при загрузке документа, в котором он был прописан. И внутри AutoCAD очень сильно хочется подобный фокус получить...
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 15.12.2010, 01:28
1 | #4
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Лиспер, тогда, еще как вариент, почитай в справке по vba про acad.dvb. Если не найдешь, завтра отпишусь.

Цитата:
Automatically Run a VBA Macro


You can automatically run any macro in the acad.dvb file by calling it with the command line version of VBARUN from an AutoCAD startup facility like acad.lsp. For example, to automatically run the macro named drawline, first save the drawline macro in the acad.dvb file. Next, invoke notepad.exe and create (or append to) acad.lsp the following lines:

(defun S::STARTUP()
(command "_-vbarun" "drawline")
)
You can cause a macro to run automatically when VBA loads by naming the macro AcadStartup. Any macro in your acad.dvb file called AcadStartup will automatically get executed when VBA loads.
Vildar вне форума  
 
Автор темы   Непрочитано 15.12.2010, 01:34
#5
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Vildar, я про acad.dvb где-то читал. Насколько я помню, это гарантирует загрузку dvb-модуля, но не запуск какого-либо кода из него. А мне надо именно запустить код, с загрузкой проблем нет никаких...
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 15.12.2010, 01:40
1 | #6
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Цитата:
You can cause a macro to run automatically when VBA loads by naming the macro AcadStartup.
Вы можете автоматически запускать макрос при его загрузке, назвав его AcadStartup

Э, ты успел прочитать цитату из справки, перед своим постом?

acad.dvb, используется для автоматического запуска макроса при загрузке акада. Тебе ето вроде не нужно.
Vildar вне форума  
 
Автор темы   Непрочитано 15.12.2010, 01:44
#7
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Вот оно!
То есть, я правильно понимаю, что я делаю обычный модуль (не класс), в нем прописываю
Код:
[Выделить все]
Public Sub AcadStartup()
' Чего-то тут
И этого достаточно?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 15.12.2010, 01:56
#8
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Цитата:
Сообщение от Лиспер Посмотреть сообщение
И этого достаточно?
Проверишь, скажешь )
Vildar вне форума  
 
Автор темы   Непрочитано 17.12.2010, 09:02
#9
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Похоже, руки у меня не из оттуда растут. Написал модуль acad.dvb, положил его в пути доступа. Код:
Код:
[Выделить все]
Public sProfileName As String

Public Sub AcadStartup()
  sProfileName = ThisDrawing.Application.Preferences.Profiles.ActiveProfile
  If UCase(sProfileName) Like "*DEBUG*" Then
    ThisDrawing.Utility.Prompt Chr(10) & "*** Running VBA modules ***" & Chr(10) & Chr(13)
    MsgBox "Load DVB!", vbOKOnly + vbApplicationModal + vbCritical, sProfileName
  End If
End Sub
И в результате код срабатывает только при запуске AutoCAD, а хотелось бы в каждом документе. Это возможно решить, не привлекая vl-vbarun?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 17.12.2010, 09:23
#10
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Перейди в модуль ThisDrawing, в acad.dvb.
В верхнем выпадающем списке выбери AcadDocument. А во втором выпадающем списке выбери Activate.
Таким образом ты подпишешся на событие активации документа.
В этой процедуре выполняй нужные действия.

Не понятно, в каком случае должен запускаться твой код? Во время создания нового документа? Или во время активации, т.е. при каждом переходе на документ (и во время открытия нового тоже будет срабатывать).
Если только при открытии нового документа. То наверное нужно подписаться на событие запуска команды.

Последний раз редактировалось Vildar, 17.12.2010 в 09:30.
Vildar вне форума  
 
Автор темы   Непрочитано 17.12.2010, 09:50
#11
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


По идее должен запускаться один раз при открытии существующего документа или создании нового (аналог "самозапуска" lisp). В .NET это событие называется, дай бог памяти, DocumentCreated. В VBA аналога что-то не вижу, кроме Activate.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 17.12.2010, 10:00
1 | #12
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Лиспер, тогда нужно подписаться на событие Application.BeginOpen.
Щас прикреплю макрос. Минут через пять. Пришлю ЛС.

Почитай справку по VBA. Раздел Use Eventes.
Вложения
Тип файла: dvb acad.dvb (48.0 Кб, 150 просмотров)

Последний раз редактировалось Vildar, 17.12.2010 в 10:28.
Vildar вне форума  
 
Автор темы   Непрочитано 17.12.2010, 10:01
#13
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Это получается, что надо использовать уже класс?
Код:
[Выделить все]
Option Explicit

Public WithEvents ACADApp As AcadApplication

Private Sub AcadApp_BeginOpen(sFileName As String)
  OnNewOrOpenFile
End Sub

Private Sub ACADApp_NewDrawing()
  OnNewOrOpenFile
End Sub

Private Sub OnNewOrOpenFile()
  'И здесь чаво хочу
End Sub
??
P.S. от кода или готового dvb не откажусь
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 17.12.2010, 10:33
#14
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Это получается, что надо использовать уже класс?
Да. Все правильно. Молоток.

Цитата:
Сообщение от Лиспер Посмотреть сообщение
P.S. от кода или готового dvb не откажусь
См. мой предыдущий пост. Прикрепил макрос для примера.
Vildar вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AutoCAD VBA. Как написать автоматически выполняемый код?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взлом пароля VBA для Autocad Didar Программирование 6 03.12.2010 11:58
Как написать программу для AutoCAD 2009?, которая используя координаты хранящиеся в Access 2003 начертит трассу со свойством PLine и выбором слоя. rassom Программирование 34 29.10.2010 13:44
Как в программе autocad автоматически посчитать длину арматуры? Шаман Растаманов AutoCAD 2 03.04.2010 20:18
развертка именно в autocad можно ли автоматически? sassw AutoCAD 4 21.07.2009 00:13
Автоматически выполнить макрос VBA передав ему строку. Sergei_Nikolaev Программирование 4 30.06.2009 13:38