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

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

VBA Как правильно открыть форму при запуске скрипта?

Ответ
Поиск в этой теме
Непрочитано 07.08.2008, 10:20 #1
VBA Как правильно открыть форму при запуске скрипта?
DonVik
 
Украина
Регистрация: 07.02.2007
Сообщений: 222

В общем задача такая:
Я кликаю по мной созданной кнопке на ToolBarе автокада и должен выполниться скрипт, который просит выбрать блок на листе, после чего должна появиться форма в которой я некоторые атрибуты редактю и заменяю.
Вот скрипт:
Код:
[Выделить все]
Option Explicit
Dim o As Object
Dim varAttributes, p As Variant
Dim br As AcadBlockReference

Private Sub CommandButton1_Click()
 varAttributes(LBound(varAttributes)).TextString = UserForm1.EdRazrab.Text
 If UserForm1.EdObozn.Text <> "" Then
  varAttributes(LBound(varAttributes) + 5).TextString = UserForm1.EdObozn.Text
 End If
 If UserForm1.EdObozn.Text <> "" Then
  varAttributes(LBound(varAttributes) + 12).TextString = UserForm1.EdObozn.Text
 End If
End Sub

Private Sub UserForm_Activate()
 Dim u As String
 Dim fs, a As Variant
 Set fs = CreateObject("Scripting.FileSystemObject")
 Set a = fs.OpenTextFile("d:\EditStampIni.txt", 1)
 EdRazrab.Text = a.ReadLine
 a.Close
End Sub

Private Sub UserForm_Initialize()
 ActiveDocument.Utility.GetEntity br, p, "Âûáåðè øòàìï"
 UserForm1.Show
End Sub
Это обработчики формы
А вот сама главная процедура макроса:
Код:
[Выделить все]
Sub EditStamp()
 UserForm1.hide
End Sub
В тулбаре на кнопке прописано такое:
Код:
[Выделить все]
vbarun _EditStamp
Это название макроса.

Так вот вопросы: Как бы вы решили эту задачу? Как правильно запускать макрос с формой?
Он запускается, но есть два но:
1. Перед запуском вылезает окошко с вопросом какой макрос нужно запустить, это пугает пользователей. Как прописать запуск именно этого макроса
2. Ругается при закрытии формы на
Код:
[Выделить все]
Sub EditStamp()
 UserForm1.hide
End Sub
мол object variable not set
Как от этого избавиться?
Просмотров: 17361
 
Непрочитано 07.08.2008, 11:24
#2
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Я делаю так (всегда) создаю модуль modRunForm
Там такой код
Код:
[Выделить все]
Sub RunMe ()
Dim frm As UserForm1
Set frm = New UserForm1
frm.Show
End Sub
Коды UserForm_Activate и UserForm_Initialize я бы объединил

Код:
[Выделить все]
Private Sub UserForm_Initialize()
 Dim u As String
 Dim fs, a As Variant
 Set fs = CreateObject("Scripting.FileSystemObject")
 Set a = fs.OpenTextFile("d:\EditStampIni.txt", 1)
 EdRazrab.Text = a.ReadLine
 a.Close
Set a = Nothing
Set fs = Nothing
Me.Hide
ActiveDocument.Utility.GetEntity br, p, "Âûáåðè øòàìï"
Me.Show
' далее твой дальнейший код

End Sub
И добавляю кнопку на закрытие формы (дело вкуса)

Код:
[Выделить все]
Private Sub CommandButton2_Click()
Unload Me
End Sub
~'J'~
fixo вне форума  
 
Непрочитано 07.08.2008, 11:47
#3
Vildar

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


DonVik, на счет запуска макроса, попробуй так:
Код:
[Выделить все]
vbarun "Имя_файла.dvb!Имя_модуля.Имя_процедуры"
А что значит символ "_" в: vbarun _EditStamp. Я че-то не догоняю!?

Последний раз редактировалось Vildar, 07.08.2008 в 11:53.
Vildar вне форума  
 
Непрочитано 07.08.2008, 11:52
#4
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Все не так.

Имеем на кнопке макрос:
Код:
В подключаемом лиспе имеем определение команды:
Код:
[Выделить все]
(defun C:E2STYLE()
(vl-vbarun "command.ManageLineStyles")
)
И не имеем никаких проблем со стандартными/нестандартными командами.
И вообще - не должно быть никаких команд, выполняемых только с кнопки. Зашивайте все в (defun C:). Слава клавишникам.

p.s. Прочитал вопрос подробнее. Что и правда за фигня с подчеркиванием? А в русском автокаде есть вообще команда vbarun?
__________________
Reshaping the STEM field

Последний раз редактировалось Александр Бауск, 07.08.2008 в 12:03.
Александр Бауск вне форума  
 
Непрочитано 07.08.2008, 11:54
#5
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Цитата:
Сообщение от Vildar Посмотреть сообщение
DonVik, на счет запуска макроса, попробуй так:
Код:
[Выделить все]
vbarun "Имя_файла.dvb!Имя_модуля.Имя_процедуры"
А если имя dvb файла изменяется с каждой версией, код каждый раз переправлять и перезагружать?
__________________
Reshaping the STEM field

Последний раз редактировалось Александр Бауск, 07.08.2008 в 11:59.
Александр Бауск вне форума  
 
Непрочитано 07.08.2008, 12:26
#6
Vildar

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


Цитата:
Сообщение от Александр Бауск Посмотреть сообщение
Все не так.
А в русском автокаде есть вообще команда vbarun?
Да. Открывается диалоговое окно макросов. Вы наверно имели ввиду, работает ли без "_". Да, работает.
Цитата:
Сообщение от Александр Бауск Посмотреть сообщение
А если имя dvb файла изменяется с каждой версией, код каждый раз переправлять и перезагружать?
Т.е. действовать нужно так:
Код:
[Выделить все]
(defun C:E2STYLE()
(vl-vbarun "command.ManageLineStyles")
)
А как Вы предварительно загружаете сами файлы макроса. Через пути поиска, в настройках акада?
А если загружено несколько разных файлов dvb, с одинаковыми именами модулей и процедур. Какой макрос будет выполнятся?
Если можно, по-подробнее. Спасибо.
Vildar вне форума  
 
Автор темы   Непрочитано 07.08.2008, 12:29
#7
DonVik


 
Регистрация: 07.02.2007
Украина
Сообщений: 222


Цитата:
fixo
ок сделал так:
Код:
[Выделить все]
Sub EditStamp()
 Dim frm As UserForm1
 Set frm = New UserForm1
 frm.Show
End Sub
И форма:
Код:
[Выделить все]
Option Explicit
'Private Declare Function GetUserLogin Lib "D:\_Projects\Delphi_projects\EditStamp\ESlib.dll" (ByVal s As String, l As Integer) As Boolean

Dim o As Object
Dim varAttributes, p As Variant
Dim br As AcadBlockReference

Private Sub CommandButton1_Click()
 varAttributes(LBound(varAttributes)).TextString = UserForm1.EdRazrab.Text
 If UserForm1.EdObozn.Text <> "" Then
  varAttributes(LBound(varAttributes) + 5).TextString = UserForm1.EdObozn.Text
 End If
 If UserForm1.EdObozn.Text <> "" Then
  varAttributes(LBound(varAttributes) + 12).TextString = UserForm1.EdObozn.Text
 End If
 If UserForm1.EdNazv.Text <> "" Then
  varAttributes(LBound(varAttributes) + 15).TextString = UserForm1.EdNazv.Text
 End If
 If UserForm1.CBMat.Text <> "" Then
  varAttributes(LBound(varAttributes) + 19).TextString = UserForm1.CBMat.Text
 End If
Unload Me
End Sub

Private Sub UserForm_Activate()
 
 
End Sub

Private Sub UserForm_Initialize()
 Dim u As String
 Dim fs, a As Variant
 Set fs = CreateObject("Scripting.FileSystemObject")
 Set a = fs.OpenTextFile("d:\EditStampIni.txt", 1)
 u = String(100, Chr(0))
 'If GetUserLogin(u, 100) Then
 'End If
 EdRazrab.Text = a.ReadLine
 a.Close
 ActiveDocument.Utility.GetEntity br, p, "Âûáåðè øòàìï"
 varAttributes = br.GetAttributes
 UserForm1.Show
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 Unload Me
End Sub
При запуске все пучком, но когда закрываю форму или кликаю по кнопке
он пишет ошибку: Object variable not set на коде:
Код:
[Выделить все]
Set frm = New UserForm1
Походу всетки UserForm1 не видит

И еще:
Если я раскоментирую:
Код:
[Выделить все]
'Private Declare Function GetUserLogin Lib "D:\_Projects\Delphi_projects\EditStamp\ESlib.dll" (ByVal s As String, l As Integer) As Boolean
.....................
'If GetUserLogin(u, 100) Then
 'End If
То акад просто вылетает без вопросов.

Я хочу использовать собственную библу написанную на делфи, но акад улетает, что посоветуете?

Цитата:
А что значит символ "_" в: vbarun _EditStamp. Я че-то не догоняю!?
Это осталось от проработок.
Сейчас я убрал подчерк )

Цитата:
В подключаемом лиспе имеем определение команды:
Что значит в подключаемом?

Цитата:
Если можно, по-подробнее. Спасибо.
Пардон, это мне вопрос?
DonVik вне форума  
 
Непрочитано 07.08.2008, 12:46
#8
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


>А если загружено несколько разных файлов dvb
Выполнится первый из загруженных файлов.
Нужно дописать имя нужного проекта через восклицательный знак, хотя вообще такого совпадения нельзя допускать.

>А как Вы предварительно загружаете сами файлы макроса.
Эмм, дай Бог памяти. А, вот. В комплекте поставки идет загрузчик на Лиспе, например, файл называется AltoLoader.lsp.
Ссылка на этот файл цепляется в конец acad2005doc.lsp при установке программы и удаляется из него при деинсталляции.

Вот начало загрузчика. За стиль не пинать, я не программист.

В Файле AltoLoad.lsp прописаны разные функции, в их числе:
Код:
[Выделить все]
(defun C:ALTOLOAD()
;;Бла-бла-бла, куча вызовов к реестру, проверок всяких, сотня строк кода.
    	;;Теперь можно подгружать модули, если они не подгружались
    	;;до выполнения команды ALTOLOAD
    	(LoadAltoModules AltoPath)
           ;;Еще что-то...
(princ)
);;Конец команды ALTOLOAD
Функция LoadAltoModules в том же файле:
Код:
[Выделить все]
;;Выполнять каждый раз при загрузке, если включен AltoCE
(defun LoadAltoModules (AltoPath / AltoVersion) ;Принимает пути с "/"
;;Получаем номер версии
(setq AltoVersion (vl-registry-read "HKEY_LOCAL_MACHINE\\Software\\NERL Alto" "Version"))
(prompt (strcat "\nAlto for AutoCAD ver." AltoVersion " © 2006 Alexander Bausk.\n"))
(prompt (strcat "Loading Alto commands and scripts from " AltoPath ", please wait\n"))
(load (strcat AltoPath "AltoAutoExec.lsp"))
(load (strcat AltoPath "AltoCommands.lsp"))
(vl-vbaload  (strcat AltoPath "Alto2005.dvb"))
(vl-vbarun "Main.InitializeApp")
(princ)
)
Небольшое пояснение.
Команда ALTOLOAD аналогична команде EXPRESSTOOLS в своем действии - загружает надстройку по желанию пользователя.
В этом же файле, AltoLoad.lsp, содержится алгоритм определения, нужно ли нам загружать модули VBA или они уже загружены, или же пользователь вообще отключил нашу надстройку.
__________________
Reshaping the STEM field

Последний раз редактировалось Александр Бауск, 07.08.2008 в 12:56. Причина: Не сам файл, а ссылка, конечно.
Александр Бауск вне форума  
 
Непрочитано 07.08.2008, 12:48
#9
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


>>В подключаемом лиспе имеем определение команды:
>Что значит в подключаемом?


Который загружается вместе с Автокадом, см. выше.
__________________
Reshaping the STEM field
Александр Бауск вне форума  
 
Непрочитано 07.08.2008, 12:48
#10
Vildar

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


Что значит в подключаемом?
Загруженном, любым способом, лисп.

Если можно, по-подробнее.
Это Александру Бауск.

Offtop: Да... собрались программеры. Это я про себя в первую очередь. Катострофическая нехватка ... Вместо многоточия можно много всего написать.
Vildar вне форума  
 
Непрочитано 07.08.2008, 12:52
#11
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Насчет Дельфи см. в соответствующей ветке на
caduser.ru

Насчет формы пишу по памяти

Попробуй так

Код:
[Выделить все]
sub RunMe()
  Dim frm As New UserForm1
  frm.Show
  Set frm = nothing
End Sub
~'J'~
fixo вне форума  
 
Непрочитано 07.08.2008, 12:57
#12
Vildar

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


Александр Бауск, спасибо за #8. Хоть и не все понятно пока (по описанным причинам в #10), но стратегия ясна.
Vildar вне форума  
 
Непрочитано 07.08.2008, 13:02
#13
Vildar

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


fixo, Какой смысл форму в переменную загонять?
Vildar вне форума  
 
Непрочитано 07.08.2008, 13:03
#14
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Я бы сунул сюда весь загрузчик, но пояснения по нему мне давать сложно - писал почти три года назад, с тех пор работает как часы, ни разу в него не лез.
__________________
Reshaping the STEM field
Александр Бауск вне форума  
 
Непрочитано 07.08.2008, 13:03
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835


Прочитал по диагонали, поэтому вопрос: а сама dll-ка то зарегистрирована? И подключена?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.08.2008, 13:07
#16
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Фух, отлегло. Увидел ник последнего написавшего, думал, тут уже матом кроют.

Кака-така DLL-ка? Речь же о DVB-файле, обычный VBA.
__________________
Reshaping the STEM field
Александр Бауск вне форума  
 
Непрочитано 07.08.2008, 13:17
#17
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835


http://dwg.ru/f/showpost.php?p=274814&postcount=7:
Цитата:
Я хочу использовать собственную библу написанную на делфи, но акад улетает, что посоветуете?
Такое бывает, если СОМ-объект не создать.
Прикола насчет "матом кроют" не понял
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.08.2008, 13:23
#18
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


>Прикола насчет "матом кроют" не понял
Когда я публикую свой код, в присутствии "настоящих сварщиков" у меня начинается комплекс неполноценности.
__________________
Reshaping the STEM field
Александр Бауск вне форума  
 
Автор темы   Непрочитано 07.08.2008, 13:25
#19
DonVik


 
Регистрация: 07.02.2007
Украина
Сообщений: 222


Цитата:
Такое бывает, если СОМ-объект не создать.
Упс...тупанул stdcall в ДЛЛ не написал
С ДЛЛ вроде разобралси..

Цитата:
Который загружается вместе с Автокадом, см. выше.
а-а-а поняв.

Цитата:
fixo
неа... ТА же ошибка.

Последний раз редактировалось DonVik, 07.08.2008 в 13:33.
DonVik вне форума  
 
Непрочитано 07.08.2008, 13:31
#20
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Offtop: В этом весь API Автокада.
В одной теме код на VBA, Лисп и Дельфи.
Проклятые рудники.
__________________
Reshaping the STEM field
Александр Бауск вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA Как правильно открыть форму при запуске скрипта?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мониторы LCD CRT Разное 94 17.06.2008 10:51
БРЕД СИВОЙ КОБЫЛЫ Kryaker Разное 1876 29.12.2006 23:41
Как скрыть tesselation lines при печати 3d solids в hidden? tdv AutoCAD 3 04.10.2004 15:42
Свернуть окно при запуске /вопрос по ВинДос/ Perezz!! Программирование 9 25.05.2004 20:16