Re: Программная отмена выполнения команд, как сделать?

> Gogi
Народ! Простите меня за глупые вопросы.
Это моя ПЕРВАЯ программа. Я вообще далека от программирования.
Прошу, отнеситесь с пониманием................

Re: Программная отмена выполнения команд, как сделать?

> ЛАРИСА
В VB(A) любой код должен быть обрамлен Sub <ИмяПроцедуры> End Sub либо Function <ИмяФункции> End Function. Это не lisp, где допускается внефункциональный код.

Re: Программная отмена выполнения команд, как сделать?

Люди! Помогите! Ну не понимаю я!!!
В книге С.Каммингса "VBA для чайников"на с.64 черным по белому написано: "...VBA создает процедуру для часто используемого события. Первой строкой созданного программного кода будет: Private Sub OKbutton_Click(). Последней строкой будет: End Sub". Между этими строками пишется программный код. Я так и сделала. И все работало.
После того, как переписала код, оформив его как отдельные процедуры, у меня и пошли проблемы.
Теперь что-то проясняется..........

Re: Программная отмена выполнения команд, как сделать?

> ЛАРИСА
Я искренне надеюсь, что Администратор форума не даст мне по голове за такое приличное отступление от темы. Тебя же прошу не обижаться, если что-то покажется резким. Все, что ниже - касается VBA (чистый VB не беру).
Есть несколько "окон", в которых пишется код: это "окно кода формы" и "окно кода модуля". Эти окна не просто так сделаны разными - в первом пишется обработка формы и ее элементов (нажатий, двойных кликов, получения / потери фокуса и т.п.); во втором - общие моменты.
В первом имя процедуры имеет следующий вид:

Private Sub btnOK_Click()

Здесь:
Private - указывает, что эту процедуру можно вызывать только внутри этой формы. Попытка вызвать ее из другого места потерпит фиаско.
Sub - это процедура; никакого значения не возвращает, просто выполняет некоторые дейтвия
btnOK - имя нажимаемого (мышкой или Enter'ом - неважно) элемента формы.
В принципе, никто не запрещает и в этом модуле (формы) прописывать процедуры или функции. Проблема с их использованием состоит в том, что они будут доступны только пока форма не выгружена из памяти.
Во втором типе модуля можно использовать также приватные процедуры и функции. Можно кроме того объявлять глобальные переменные, константы, функции и т.п.
Для понимания этих вещей настоятельно рекомендую выкинуть и никогда больше не покупать книги разряда "для чайников". Я тоже сдуру в свое время купил "С++ для чайников", как был чайником, так и остался.
В твоем варианте будет проще всего взять литературу более высокого уровня для понимания этих и подобных вопросов (рекомендовать ничего не буду, потому как я изучал в основном по справке VBA).
Посмотри еще раз на мой код > kpblc (2006-07-19 11:26:22)
Я ж не зря вынес рисование элементов в отдельные Sub. Эти Sub'ы я занес в отдельный модуль проекта, а из btnOK_Click уже вызывать именно их.

Re: Программная отмена выполнения команд, как сделать?

Со структурой кода разобралась. А полилиния теперь не замыкается и не меняет цвет:

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

Re: Программная отмена выполнения команд, как сделать?

И как ты ее вызываешь? Полилиния вообще отрисовывается? Слой не заблокирован?

Re: Программная отмена выполнения команд, как сделать?

Полилиния отрисовывается, но не замыкается и красного цвета быть не хочет.
У меня примерно следующее:

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

Re: Программная отмена выполнения команд, как сделать?

Пример из справки

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

Re: Программная отмена выполнения команд, как сделать?

Форматирование нмного слетело. Кстати, задачка на читаемость кода :)

Re: Программная отмена выполнения команд, как сделать?

Так у меня ведь то же самое (в Sub AddPline) , только вместо Pline.Color=Col, а Col=acRed. Я пробовала явно задавать  Pline.Color = acRed. Цвет не меняет.

Re: Программная отмена выполнения команд, как сделать?

Хотя до этого , когда код был таким:

Set PLINE = ThisDrawing.ModelSpace.AddLightWeightPolyline(PTS)
  PLINE2.Color = acRed
  ThisDrawing.Regen
PLINE.Closed = True 'close polyline (True)

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

Re: Программная отмена выполнения команд, как сделать?

Попробуй Pline.Color = 1 'это код красного цвета. И обязательно пройди в Debug-ere - выполняется эта строчка или нет (если выполняется, то посмотри, что при этом происходит на экране). Может, при создании полилинии возникает ошибка и оно само молча выходит из функции ривоания? У меня когда-то подобное было...

Честное слово, не понимаююююююююю

Лариса, давай без паники. Все когда-то писали первый раз. Некоторые ещё помнят это ощущение - "я написал прогу - а она не работает!". Нет нерешемых проблем, просто мы не всегда знаем методы их решения. :) Прорвёмся!

Re: Программная отмена выполнения команд, как сделать?

Огромное спасибо вам, добрые люди! Буду "рыть" дальше!

Re: Программная отмена выполнения команд, как сделать?

> kpblc
настоятельно рекомендую выкинуть и никогда больше не покупать книги разряда "для чайников".

Готов присоединиться к этой рекомендации за исключением:
Стив Каммингс
"VBA для чайников".
Хороший он парень, и книжка у него хорошая.

Re: Программная отмена выполнения команд, как сделать?

> LeonidSN
А я вообще книг не читаю ;) поэтому и пишу с ошЫбками :)