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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA, После закрытия userform кнопка запуска макроса(зеленый треугольник) не активен

VBA, После закрытия userform кнопка запуска макроса(зеленый треугольник) не активен

Ответ
Поиск в этой теме
Непрочитано 17.03.2018, 12:30 #1
VBA, После закрытия userform кнопка запуска макроса(зеленый треугольник) не активен
Simson
 
Регистрация: 08.03.2018
Сообщений: 45

создал пустую форму без кнопок кода и тд... написал макрос запуска этой формы и последующей выгрузки( ну или без нее)
Код:
[Выделить все]
Sub test()

    UserForm1.show
    Unload UserForm1
    
End Sub
открывается форма закрываю ее на крестик. процедура заканчивается но треугольничек остается неактивным будто идут какие то процессы еще.. в чем дело? что происходит там в фоне? как это решить?

Последний раз редактировалось Simson, 17.03.2018 в 13:00.
Просмотров: 6760
 
Непрочитано 17.03.2018, 12:55
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Редактор VBA порою живет своей жизнью, причем рандомно) Смиритесь и перезагружайтесь, к примеру) В том же NET API есть специальные функции для запуска модальных форм в контексте именно самого приложения акад.

----- добавлено через 58 сек. -----
p.s. Указывайте в заголовке язык программирования, плиз.
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.03.2018, 13:09
#3
Simson


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


спасибо, почитаю
Simson вне форума  
 
Непрочитано 17.03.2018, 13:26
#4
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


просто раньше альтернативы не было - либо лисп (он непривычен, проблемы с созданием диалогов) либо VBA. ObjectARX стоял в сторонке особняком, из-за низкоуровневой работы с акадом там надо хорошо понимать, что делаешь) А сейчас уже много материала на Net (в том числе и на русском), сама среда исполнения представлена уже в виде оберток над низкоуровневыми функциями, с внутренними проверками - т.е. чтобы уронить акад в фатал, надо приложить определенные усилия. Сред разработки, включая бесплатных - тоже достаточно. Изучать полностью талмуты в тысячи страниц, чтобы начать писать на Net - совершенно не обязательно. Во всяком случае, чтобы выйти на уровень того - что можно написать на VBA)
Сергей812 вне форума  
 
Непрочитано 17.03.2018, 13:33
#5
Бахил

?
 
Регистрация: 17.06.2014
Царицын
Сообщений: 12,868


Цитата:
Сообщение от Simson Посмотреть сообщение
Код:

Sub test()

UserForm1.show
Unload UserForm1

End Sub
Offtop: Из серии "Программисты шутят"
Используй .Showmodal.

----- добавлено через ~5 мин. -----
Offtop: А вообще надо хоть немного понимать как работает ОС
__________________
Специалисты - это те, кто ничего не понимают лучше всех
Бахил вне форума  
 
Автор темы   Непрочитано 17.03.2018, 13:39
#6
Simson


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


неужели должны быть проблемы чтоб обработать обычную форму? это же основа.. может какую то строчку упустил ?
просто вба уже встроен и с ним просто работать.. в связке с екселем тоже

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от Бахил Посмотреть сообщение
Используй .Showmodal.
такого нет ..
UserForm1.show vbModal
пробовал и выходит то же самое
Simson вне форума  
 
Непрочитано 17.03.2018, 13:49
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Simson Посмотреть сообщение
UserForm1.show vbModal
и просто UserForm1.show эквиваленты в VBA.

----- добавлено через ~13 мин. -----
Цитата:
Сообщение от Simson Посмотреть сообщение
просто вба уже встроен и с ним просто работать..
как раз он не встроен в акад по умолчанию) А насчет простой работы - когда поработаешь в даже бесплатных студиях, а потом садишься кодить в VBA (для офиса) - становится очень грустно от безнадежно застывшего в развитии языка и среды разработки.
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.03.2018, 14:06
#8
Simson


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


почему в таком случае Net а не С# например?
Simson вне форума  
 
Непрочитано 17.03.2018, 14:11
#9
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Simson Посмотреть сообщение
почему в таком случае Net а не С# например?
разберитесь в терминологии: .Net - это фреймворк, а C# - лишь один из языков программирования с использованием .Net.
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.03.2018, 14:13
#10
Simson


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


похоже пора начать разбираться.. я просто только начал постигать это.. и начал с вба собственно. спасибо

----- добавлено через ~1 мин. -----
а может подскажете на каком языке актуальнее, проще, удобнее писать?
Simson вне форума  
 
Непрочитано 17.03.2018, 14:24
#11
Бахил

?
 
Регистрация: 17.06.2014
Царицын
Сообщений: 12,868


Цитата:
Сообщение от Simson Посмотреть сообщение
такого нет
Есть! Попробуй
Код:
[Выделить все]
Sub test()
UserForm1.showmodal
End Sub
Почувствуешь разницу
__________________
Специалисты - это те, кто ничего не понимают лучше всех
Бахил вне форума  
 
Автор темы   Непрочитано 17.03.2018, 14:26
#12
Simson


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


если это шутка то так себе
Simson вне форума  
 
Непрочитано 17.03.2018, 14:33
#13
Бахил

?
 
Регистрация: 17.06.2014
Царицын
Сообщений: 12,868


В екселе работает...
__________________
Специалисты - это те, кто ничего не понимают лучше всех
Бахил вне форума  
 
Автор темы   Непрочитано 17.03.2018, 14:39
#14
Simson


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


кажется форум dwg называется...
Simson вне форума  
 
Непрочитано 17.03.2018, 14:46
#15
Бахил

?
 
Регистрация: 17.06.2014
Царицын
Сообщений: 12,868


Так VBA он для любого приложения...
Offtop: Впрочем...Если такой "умный" хрена вопросы задавать? Переходи на Сишарп. Там гораздо больше глюков у тебя будет.
__________________
Специалисты - это те, кто ничего не понимают лучше всех
Бахил вне форума  
 
Непрочитано 17.03.2018, 14:56
#16
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


ShowModal
причем через браузер объектов (F2) этого свойства нет, доступен лишь через палитру свойств формы. Хотя при этом пишут - что свойство доступно только для чтения во время выполнения)
Сергей812 вне форума  
 
Непрочитано 17.03.2018, 16:45
#17
Бахил

?
 
Регистрация: 17.06.2014
Царицын
Сообщений: 12,868


Offtop: Код ТС - БСК. К сожалению он не может понять, что ему советуют. Правильный код в № 5. Если человек...
__________________
Специалисты - это те, кто ничего не понимают лучше всех
Бахил вне форума  
 
Автор темы   Непрочитано 17.03.2018, 16:55
#18
Simson


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


да пробовал я так вводить ничего не меняется!! к тому же как уже сказали выше это роли не играет! если нажмешь на форму у нее в параметрах по умолчанию стоит modal true! в екселе работает и без modal!в автокаде никак.
Simson вне форума  
 
Непрочитано 17.03.2018, 17:14
#19
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Бахил Посмотреть сообщение
Правильный код в № 5.
браузер объектов редактора VBA не "видит" ShowModal в программной модели, официальный хелп от Майкрософт говорит - что это свойство. При этом вы пытаетесь уверить, что это правильный код:
Цитата:
Сообщение от Бахил Посмотреть сообщение
UserForm1.showmodal
Цитата:
Сообщение от Бахил Посмотреть сообщение
В екселе работает...
в принципе, можно свойство написать так - что при присвоении какого-то значения оно будет выполнять определенный код. Но тогда должно быть справа присвоение значения, а не попытка вызова свойства как процедуры/функции.
Сергей812 вне форума  
 
Непрочитано 17.03.2018, 17:56
#20
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Simson, попробуй так вызывать

Код:
[Выделить все]
Dim lDlg as new UserForm1
lDlg.Show
Unload lDlg
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.03.2018, 20:21
#21
Simson


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


пробовал.. не помогает.
написал end в конце.. иначе не смог остановить эту машину
Simson вне форума  
 
Непрочитано 17.03.2018, 20:31
#22
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


попробуй дописать в коде формы обработчик события закрытия

Код:
[Выделить все]
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  If (CloseMode = vbFormControlMenu) Then
    Cancel = 1
    Me.Hide
  End If
End Sub
т.е. чтобы при закрытии крестом или по ALT-F4 просто скрывал форму. А потом Unload в процедуре, откуда вызывал
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.03.2018, 20:39
#23
Simson


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


слишком сложно. обойдусь End
Спасибо)
Simson вне форума  
 
Непрочитано 17.03.2018, 20:53
#24
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


в общем, потестил на виртуалке: такое впечатление, что пока окно активного документа не получит фокус ввода обратно, оно блокирует завершение процесса.
Сергей812 вне форума  
 
Непрочитано 17.03.2018, 22:53
#25
Бахил

?
 
Регистрация: 17.06.2014
Царицын
Сообщений: 12,868


Offtop: Просто не нужно выгружать форму.
__________________
Специалисты - это те, кто ничего не понимают лучше всех
Бахил вне форума  
 
Непрочитано 17.03.2018, 22:59
#26
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Получается, что с End самый рабочий вариант) Отмена выгрузки формы не влияет на проблему.
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.03.2018, 23:46
#27
Simson


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


но этот выход мне до сих пор не нравится... не должно так быть.. в екселе ведь тот же самый код работает как надо
Simson вне форума  
 
Непрочитано 17.03.2018, 23:53
#28
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Simson Посмотреть сообщение
но этот выход мне до сих пор не нравится... не должно так быть.. в екселе ведь тот же самый код работает как надо
Для офиса VBA родной язык изначально) Можно еще оформить это все в виде пользовательской команды акада - но не уверен, что VBA это позволит сделать.
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.03.2018, 23:55
#29
Simson


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


да пускай так будет раз нет более лаконичного решения чем енд
никто никогда не пользовался формами? или почему никто не сталкивался с этим? никто не пишет на вба похоже
Simson вне форума  
 
Непрочитано 18.03.2018, 00:16
#30
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


я тоже писал сначала несколько месяцев на VBA в акаде. И устав от рандомных глюков - ушел с него раз и навсегда, надеюсь) Но для офиса использую достаточно активно в то же время.
Сергей812 вне форума  
 
Непрочитано 18.03.2018, 00:52
#31
trir


 
Регистрация: 18.12.2010
Сообщений: 5,115


Когда AutoCAD стал x64 с VBA случилась жопа, особенно с формами. Хотя в последнее время её подлечили...
trir вне форума  
 
Автор темы   Непрочитано 18.03.2018, 16:08
#32
Simson


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ушел с него раз и навсегда
на что перешли?

----- добавлено через ~2 мин. -----
а если допустим в офисе писать на вба а в акаде на другом языке их между собой можно связать?
Simson вне форума  
 
Непрочитано 18.03.2018, 16:18
#33
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Simson Посмотреть сообщение
на что перешли?
на конечном итоге на C#.

Цитата:
Сообщение от Simson Посмотреть сообщение
а если допустим в офисе писать на вба а в акаде на другом языке их между собой можно связать?
Обрабатывайте информацию внутри акада, отчеты выводите в офис через COM-интерфейс, например. На VBA в офисе пишу вспомогательные макросы лишь для ручных рутинных операций.
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA, После закрытия userform кнопка запуска макроса(зеленый треугольник) не активен



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Пропадают картинки после закрытия программы Mariya_Space AutoCAD 13 16.06.2017 10:10
После применения offset не удаляется (не редактируется) исходный объект Nata1 AutoCAD 7 07.04.2015 09:08
Глюки после установи последнего обновления на Civil 3D 2013 black_mts Вертикальные решения на базе AutoCAD 14 22.01.2013 19:02
Невозможность изменения файла чертежа после его закрытия в Автокаде. Из-за чего!?!? Botan AutoCAD 12 12.04.2009 05:27