Re: Программная отмена выполнения команд, как сделать?
> Gogi
Народ! Простите меня за глупые вопросы.
Это моя ПЕРВАЯ программа. Я вообще далека от программирования.
Прошу, отнеситесь с пониманием................
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Программная отмена выполнения команд, как сделать?
Чтобы отправить ответ, вы должны войти или зарегистрироваться
> Gogi
Народ! Простите меня за глупые вопросы.
Это моя ПЕРВАЯ программа. Я вообще далека от программирования.
Прошу, отнеситесь с пониманием................
> ЛАРИСА
В VB(A) любой код должен быть обрамлен Sub <ИмяПроцедуры> End Sub либо Function <ИмяФункции> End Function. Это не lisp, где допускается внефункциональный код.
Люди! Помогите! Ну не понимаю я!!!
В книге С.Каммингса "VBA для чайников"на с.64 черным по белому написано: "...VBA создает процедуру для часто используемого события. Первой строкой созданного программного кода будет: Private Sub OKbutton_Click(). Последней строкой будет: End Sub". Между этими строками пишется программный код. Я так и сделала. И все работало.
После того, как переписала код, оформив его как отдельные процедуры, у меня и пошли проблемы.
Теперь что-то проясняется..........
> ЛАРИСА
Я искренне надеюсь, что Администратор форума не даст мне по голове за такое приличное отступление от темы. Тебя же прошу не обижаться, если что-то покажется резким. Все, что ниже - касается VBA (чистый VB не беру).
Есть несколько "окон", в которых пишется код: это "окно кода формы" и "окно кода модуля". Эти окна не просто так сделаны разными - в первом пишется обработка формы и ее элементов (нажатий, двойных кликов, получения / потери фокуса и т.п.); во втором - общие моменты.
В первом имя процедуры имеет следующий вид:
Private Sub btnOK_Click()
Здесь:
Private - указывает, что эту процедуру можно вызывать только внутри этой формы. Попытка вызвать ее из другого места потерпит фиаско.
Sub - это процедура; никакого значения не возвращает, просто выполняет некоторые дейтвия
btnOK - имя нажимаемого (мышкой или Enter'ом - неважно) элемента формы.
В принципе, никто не запрещает и в этом модуле (формы) прописывать процедуры или функции. Проблема с их использованием состоит в том, что они будут доступны только пока форма не выгружена из памяти.
Во втором типе модуля можно использовать также приватные процедуры и функции. Можно кроме того объявлять глобальные переменные, константы, функции и т.п.
Для понимания этих вещей настоятельно рекомендую выкинуть и никогда больше не покупать книги разряда "для чайников". Я тоже сдуру в свое время купил "С++ для чайников", как был чайником, так и остался.
В твоем варианте будет проще всего взять литературу более высокого уровня для понимания этих и подобных вопросов (рекомендовать ничего не буду, потому как я изучал в основном по справке VBA).
Посмотри еще раз на мой код > kpblc (2006-07-19 11:26:22)
Я ж не зря вынес рисование элементов в отдельные Sub. Эти Sub'ы я занес в отдельный модуль проекта, а из btnOK_Click уже вызывать именно их.
Со структурой кода разобралась. А полилиния теперь не замыкается и не меняет цвет:
Sub AddPline(list() As Double, Optional Col As Integer = acRed, Optional Clos As Boolean = True) Dim Pline As AcadPolyline On Error Resume Next Set Pline = ThisDrawing.ModelSpace.AddLightWeightPolyline(list) Pline.Color = Col Pline.Closed = Clos End Sub
И как ты ее вызываешь? Полилиния вообще отрисовывается? Слой не заблокирован?
Полилиния отрисовывается, но не замыкается и красного цвета быть не хочет.
У меня примерно следующее:
Sub AddFUND Dim PTS(0 To 7) As Double PTS(0) = returnPnt(0) - A / Mb PTS(1) = returnPnt(1) - C / Mb PTS(2) = PTS(0) + WTH / Mb PTS(3) = PTS(1) PTS(4) = PTS(2) PTS(5) = PTS(3) + HGT / Mb PTS(6) = PTS(4) - WTH / Mb PTS(7) = PTS(5) AddPline PTS End Sub
Пример из справки
Color Example Sub Example_Color() ' This example creates a polyline and colors it red. ' It then displays the current color setting for the polyline. Dim plineObj As AcadPolyline Dim currentcolor As Variant ' Create Polyline Dim points(8) As Double points(0) = 3: points(1) = 7: points(2) = 0 points(3) = 9: points(4) = 2: points(5) = 0 points(6) = 3: points(7) = 5: points(8) = 0 Set plineObj = ThisDrawing.ModelSpace.AddPolyline(points) ' First set the color of the object to Red plineObj.Color = acRed ThisDrawing.Regen (True) '<...> - Удалено за ненадобностью End Sub
Форматирование нмного слетело. Кстати, задачка на читаемость кода :)
Так у меня ведь то же самое (в Sub AddPline) , только вместо Pline.Color=Col, а Col=acRed. Я пробовала явно задавать Pline.Color = acRed. Цвет не меняет.
Хотя до этого , когда код был таким:
Set PLINE = ThisDrawing.ModelSpace.AddLightWeightPolyline(PTS) PLINE2.Color = acRed ThisDrawing.Regen PLINE.Closed = True 'close polyline (True)
все было ОК. Честное слово, не понимаююююююююю, почему, загоняя повторы в одну процедуру, не меняется цвет и не замыкается полилиния?? Может тонкости какие?
Попробуй Pline.Color = 1 'это код красного цвета. И обязательно пройди в Debug-ere - выполняется эта строчка или нет (если выполняется, то посмотри, что при этом происходит на экране). Может, при создании полилинии возникает ошибка и оно само молча выходит из функции ривоания? У меня когда-то подобное было...
Честное слово, не понимаююююююююю
Лариса, давай без паники. Все когда-то писали первый раз. Некоторые ещё помнят это ощущение - "я написал прогу - а она не работает!". Нет нерешемых проблем, просто мы не всегда знаем методы их решения. :) Прорвёмся!
Огромное спасибо вам, добрые люди! Буду "рыть" дальше!
> kpblc
настоятельно рекомендую выкинуть и никогда больше не покупать книги разряда "для чайников".
Готов присоединиться к этой рекомендации за исключением:
Стив Каммингс
"VBA для чайников".
Хороший он парень, и книжка у него хорошая.
> LeonidSN
А я вообще книг не читаю ;) поэтому и пишу с ошЫбками :)
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Программная отмена выполнения команд, как сделать?
Форум работает на PunBB, при поддержке Informer Technologies, Inc