Тема: Как заставить макрос работать без закрытия формы?

По кнопки на форм запускается цикл, вытягивающий данные из БД. Макрос должен вставлять обьекты типа текст в Layout'ы.
Происходит следующее: идет выполнение подпрогаммы а все результаты записываютя в последний лист и то после закрытия формы. как заставить макрос работать без закрытия формы.

Re: Как заставить макрос работать без закрытия формы?

Типа так

Dim Layouts As AcadLayouts, xLayout As ACADLayout
Dim LayBlock as AcadBlock
Dim textObj As AcadText
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim height As Double
textString = "Hello, World."
insertionPoint(0) = 2: insertionPoint(1) = 2: insertionPoint(2) = 0
height = 0.5
Set Layouts = ThisDrawing.Layouts
For Each xLayout In Layouts
   Set LayBlock = xLayout.Block
   Set textObj =LayBlock.AddText(textString, insertionPoint, height)
Next

Re: Как заставить макрос работать без закрытия формы?

Да. Типа так, только мне необхдмо запускать с кнопки на форме, на форме идет визуализация с БД. Мокрос срабатывает но вставляет текстовые объекты после закрытия формы и на последний лист цикла.

Re: Как заставить макрос работать без закрытия формы?

[rus]Nichego ne ponjal. V vyshe ukazanom primere vse rabotaet bez zakrytija formy i vstavljaet tekst vo vse lajouty. Privedi chast' problemnogo koda, mozhet togda projasnitsja.
[/rus]

Re: Как заставить макрос работать без закрытия формы?

1.В проекте находится 12 layuot'ов
2. запускаю обработку по нажатию кнопку
Set Layouts = ThisDrawing.Layouts
...
For Each xLayout In Layouts
   If xLayout.name = "Name1" then goto 1:
    ..................
   If xLayout.name = "NameX" then goto X: else goto endd
1:
insertionPoint(0)=100
insertionPoint(1)=150
insertionPoint(2)=0
Endd
..........
Endd:
   Set LayBlock = xLayout.Block
   Set textObj =LayBlock.AddText(textString, insertionPoint, height)
Next
p.s. У меня acad 2002 работаю во встроенной среде. Заметил сразу что при запуске формы обращение к Acad'у блокируется.

Re: Как заставить макрос работать без закрытия формы?

Форма модальная, поехтому при ее(формы) активации, окно автокада становится неактивным. Но ехто не влечет за собой невозможность работы с елементами(примитивами, лаёутами, таблицами...) автокада. Если очень хочется, чтобы были видны изменения в каждом лаёуте, просто нужно етот лаёут делать активным:

ThisDrawing.ActiveLayout = xLayout

[rus](ehtot process obychno zanimaet neskol'ko sekund).
Konechno mozhno i formu sdelat' nemodal'noj, tol'ko nejasno zachem ehto nado.
[/rus]

Re: Как заставить макрос работать без закрытия формы?

Вариант с активным layaut'om пробовал сегодня ночью. И всеравно делает вставку на последний активный Layuot. А как сделать фому не модальной.

Re: Как заставить макрос работать без закрытия формы?

Дело не в модальности формы. У тебя , вероятнее всего, неверно организована структура проверок с переходами.

if ... then goto

  Возможно ни одно имя не подпадает под твои проверки и что тогда? Поставь бреакпоинт на начало цикла и проверь пошагово, что происходит. А ешхе лучше вообшхе избаиться от

if ... then goto

  И пользоватся либо

if ... then
.............
elseif ... then
.............
elseif ... then
.............
else
...
endif

либо

Select Case testexpression
[Case expressionlist-n
[statements-n]] ...
[Case Else
[elsestatements]]
End Select

Re: Как заставить макрос работать без закрытия формы?

Попробую. И все же как сделать форму не модальной?

Re: Как заставить макрос работать без закрытия формы?

> socrat
Поиск обсуждалось не раз

Re: Как заставить макрос работать без закрытия формы?

Все получилось!
У меня в начальном коде использовался PaparSpase в качестве пространства для вставляемых обьектов. А цикл обрабатывал layout'ы. Спасибо Gogi!