Тема: Interface-Program

Начал заниматься программированием CAD. Назрела такая необходимость. Не получается присвоить переменным значения через UserForm. ?Это же элементарно, Ватсон!? Согласен, элементарно. С трудами, но получается рисование необходимого через VBA. Но найти как задавать значения через удобный пользовательский интерфейс не могу. В радиусе 8000 км спросить некого.
Помогите чайнику, если можете.

Re: Interface-Program

http://www.cad.dp.ua/stats/a_vba/

Re: Interface-Program

> bender
Спасибо за ответ. Во всем этом очень полезном сайте ни разу не встречается даже термина TextBox и, конечно же, нет разъяснений как им пользоваться.
Все, что мне нужно рассчитать и начертить, мой макрос считает и чертит. Мне нужно, чтобы исходные данные вводились через удобный пользовательский интерфейс, потому что я должен передать макрос для пользования еще большему лоху, чем я.
При запуске макроса выполняется UserForm1.Show.
UserForm1 имеет четыре TextBox для ввода значений и управляющие кнопки ?Сброс? и ?ОК?.  При нажатии кнопки ?Сброс? все TextBox должны очищаться и это выполняется. При нажатии ?ОК? переменным должны присваиваться текущие значения TextBox,  UserForm1 должна закрыться и продолжается выполнение основной программы:
Private Sub CommandButton1_Click()
     TextBox1 = ""
     TextBox2 = ""
     TextBox3 = ""
     TextBox4 = ""
End Sub
Private Sub CommandButton2_Click()
    Dim A1 As String
    Dim B1 As String
    Dim C1 As String
    Dim D1 As String
    A1 = TextBox1.Text
    B1 = TextBox2.Text
    C1 = TextBox3.Text
    D1 = TextBox4.Text
    UserForm1.Hide
End Sub
Но основная программа тормозится на последней строке, потому что переменным не присваиваются значения и имеет место деление на ноль:
   ........................
    Dim A As Double
    Dim B As Double
    Dim C As Double
    Dim D As Double
    Dim E As Double
    Dim F As Double
    Dim G As Double
    Dim H As Double
    UserForm1.Show
    A = Val(A1)
    B = Val(B1)
    C = Val(C1)
    D = Val(D1)
    E = A / 3.1415926536
    F = B / 3.1415926536
    G = Sqr(((E - F) / 2) ^ 2 + C ^ 2 - D ^ 2)
    H = 3.1415926536 / 2 - Atn(2 * C / (E - F)) + Atn(D / G)
   ..................................................................................
Вопрос простой: как присвоить переменным значения, введенные в TextBox?
Где именно про это можно прочитать?

Re: Interface-Program

Dim Dialog As New myForma
Load myForma
myForma.Show
With Dialog
    A = .Text
    B = .Text
    C = .Text
    D = .Text
End With
Unoad myForma
........

Re: Interface-Program

Прошенья просим.

Dim Dialog As New myForma
Load myForma
myForma.Show
With Dialog
    A = TextBox1.Text
    B = TextBox2.Text
    C = TextBox3.Text
    D = TextBox4.Text
End With
Unoad myForma
........

Re: Interface-Program

> bender
Спасибо!
Все получилось.
В тексте основной программы без With:
    A = Val(UserForm1.TextBox3.Text)
    B = Val(UserForm1.TextBox4.Text)
    C = Val(UserForm1.TextBox5.Text)
    D = Val(UserForm1.TextBox6.Text)
    Unload UserForm1
Вы мне здорово помогли.
Не подскажете как запустить AutoCAD из макроса Excel, не указывая адрес excel.exe?
Заранее благодарен.

Re: Interface-Program

Господи, ну сколько же можно об одном и том же, об одном и том же. Пользуйтесь поиском!
В общем виде

Dim appAutoCAD As Object
Set appAutoCAD = GetObject(, "AutoCAD.Application")
If Err <> 0 Then
    Set appAutoCAD = CreateObject("AutoCAD.Application")
End If

Re: Interface-Program

pi=atn(1)*4

Re: Interface-Program

> bender
Объяснять непонимающим ? очень тяжелая работа. Вы даже не представляете как я Вам сочувствую.
Один раз мы меня отправили с моими проблемами по TextBox на сайт, где этот термин даже не упоминается. Дали вариант решения, который не работает.
Теперь дали решение по другой проблеме. Создал макрос в Excel, подгрузил Reference на все автокадовское, между Sub и End Sub вставил Ваш ?общий вид?. Предполагается, что Автокад должен запуститься, но при запуске макроса Excel предлагается сделать Debug ?Set appAutoCAD = GetObject(, "AutoCAD.Application")?.
Спасибо за совет пользоваться поиском. Перелопатил кучу сайтов на английском, испанском и русском. Решения проблемы не нашел. В этой конференции попросил совета тех, кто понимает.
Получил Ваш. Я спрашиваю, потому что не знаю. Почему Вы советуете, если мы оба не знаем? Особенно не стоит  советовать, если наивные вопросы очень уж раздражают.
Если много раз было сказано ?об одном и том же?, не могли бы Вы дать ссылку где можно было бы прочитать объяснения грамотного человека?

Re: Interface-Program

Ответ был дан скорее всего по памяти.
у меня например АКАД не всегда под рукой
строка
If Err <> 0 Then
ловит ошибку Err
но чтобы ловить ее надо указать явно
Dim appAutoCAD As Object
'указание ловить ошибку
on error resume next
'или что-то вроде етого, не помню точно,смотрите мат.част про on error
Set appAutoCAD = GetObject(, "AutoCAD.Application")
If Err <> 0 Then
    Set appAutoCAD = CreateObject("AutoCAD.Application")
End If
Удачи

Re: Interface-Program

> Gringo
Не надо сочувствовать, надо уметь находить то, что Вам нужно. Верхнее образование небось имеется?

Один раз мы меня отправили с моими проблемами по TextBox на сайт, где этот термин даже не упоминается. Дали вариант решения, который не работает.

Там полно примеров с диалоговыми окнами. И главное понять принципы их создания и работы с ними.
Что значит: не работает?

Sub qqq()
Dim Dialog As New myForma
Dim A As Double, B As Double, C As Double, D As Double
Dim E As Double, F As Double, G As Double, H As Double
Load Dialog
Dialog .Show
With Dialog
    A = .TextBox1.Text
    B = .TextBox2.Text
    C = .TextBox3.Text
    D = .TextBox4.Text
End With
Unoad Dialog
E = A / 3.1415926536
F = B / 3.1415926536
G = Sqr(((E - F) / 2) ^ 2 + C ^ 2 - D ^ 2)
H = 3.1415926536 / 2 - Atn(2 * C / (E - F)) + Atn(D / G)
Set Dialog=Nothing
End Sub

И Вы хотите сказать, что этот код не работает?
Кстати не забудьте в модуле формы организовать проверку корректности введенным пользователем данных.

Теперь дали решение по другой проблеме. Создал макрос в Excel, подгрузил Reference на все автокадовское, между Sub и End Sub вставил Ваш ?общий вид?. Предполагается, что Автокад должен запуститься, но при запуске макроса Excel предлагается сделать Debug ?Set appAutoCAD = GetObject(, "AutoCAD.Application")?.
Спасибо за совет пользоваться поиском. Перелопатил кучу сайтов на английском, испанском и русском. Решения проблемы не нашел. В этой конференции попросил совета тех, кто понимает.

cadhelp (2004-04-15 08:10:45)  конечно прав, я поторопился. Действительно, перед тем как пытаться получить доступ к приложению (в данном случае к АКАДу) надо организовать обработчик ошибок (On Error Resume Next).
По поводу поиска. Искал только на этом сайте. Привожу только две ссылки (было гораздо больше).
https://www.caduser.ru/forum/topic4375.html
https://www.caduser.ru/forum/topic4327.html
Кстати, по поводу "подгрузил Reference на все автокадовское".
https://www.caduser.ru/forum/topic7690.html
https://www.caduser.ru/forum/topic6703.html
Раздражают не наивные вопросы (не бывают они наивными или не наивными), а то, что ответы ищут не там где надо. Книжки надо читать, и справкой пользоваться. Благо по VBA она очень приличная (на мой взгяд).

Re: Interface-Program

Абсолютно согласен с бендером. Есть офис там справка тоже очень приличная. Даже для хохмы -  97 офис. Там хелп на русском. Более ранние офисы с русским хелпо не попадались.

Re: Interface-Program

поздние

Re: Interface-Program

Не хотелось бы переходить на личности, вопрос-то был чисто технический, но для блага общества...
Я не знаю Бендер ли Вы (мне это знать не обязательно, да это ничего и не меняет), но я действительно gringo.
Совет читать книжки очень хороший и правильный. Но на нашем хуторе можно купить литературу только по VB, не по VBA. Очень похоже, но это всё про VB "в собственном соку", речь идет только о создании приложений на VB.
Хотите верьте, хотите нет, во всем испаноязычном интернете не удалось обнаружить то, что легко находится в русском: анонс книги о программировании AutoCAD средствами VBA, VisualLisp, C++... с адресами магазинов и ценами.
Я бы предпочел иметь такую книгу на английском, они есть, но ближайшая ко мне лавка, где ее можно было бы купить, находится в Хьюстоне, Техас. Это в нескольких тысячах километров от меня, да и за границей, а кредитной карточки, чтобы купить через интернет, у меня нет.
Вы такой умный по трём, по меньшей мере, причинам: Вы просто от природы такой даровитый; у Вас есть несколько книг по VB, VBA, AutoLisp... (не говорите, что все Вы узнали из help'a, не смешите народ); у Вас есть люди, с которыми Вы можете поговорить, посоветоваться, поспорить о предмете.
Вы, наверное, относительно легко сможете представить, что я не так одарен от природы, как Вы. Полное отсутствие литературы Вам будет представить уже трудней. А уж вообразить себе ситуацию, когда из всех знакомых, занимающихся программированием CAD, есть только не виденный никогда в глаза знакомый знакомого, который, говорят, пишет макросы для презентаций в Inventor ? такого Вы себе представить не сможете, это ж Зазеркалье какое-то. Правильно, это оно и есть, Зазеркалье.
При поиске выражения "Activate Application" (а именно это я и хочу сделать) в help'e  появляется длинный список, в котором искомым решением, по неопытности, кажется AppActivate Statement. Но то, что там находится, не подходит для решения стоящей задачи: запустить AutoCAD из Excel, не указывая пути к acad.exe.
Поэтому появляется желание спросить у толковых людей, как это делается.
Со второго захода Вы мне прислали ссылку
https://www.caduser.ru/forum/topic4327.html
Огромное спасибо! Во-первых, безукоризненно работает, просто копируется в модуль текст программы ? и работает.  Во-вторых, автор кода для меня просто образец: не поинтересовался, закончил ли спрашивающий церковно-приходскую школу, не послал рыскать по help'у или еще куда, а просто ответил.
Я позволил себе перейти на мою личность и обстоятельства не потому, чтобы Вы как-то по-особенному ко мне лично отнеслись. Понимая столько в программировании, Вам не худо было бы понимать, что люди все разные, обстоятельства и способности у них разные, а потому не стоит мерить всех по себе и горячиться, если кто-то мерке не соответствует. Если Вы это поймете, пользы от Вас ещё больше будет.
Почитал ссылки по поводу Reference. Могёте. Спасибо.
О том, работает ли присланный Вами код, скажу две вещи.
1.    Скопируйте свой код из форума в чистый модуль и попробуйте запустить макрос.
2.    "Не торопись и не спеши, когда играешь регтайм".
Мне Ваш код у меня заработал.
От души благодарен за помощь.

Re: Interface-Program

> Gringo
Хочется общения? Ну что же, давайте пообщаемся. По пунктам.

...находится в Хьюстоне, Техас. Это в нескольких тысячах километров от меня, да и за границей...

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

Совет читать книжки очень хороший и правильный. Но на нашем хуторе можно купить литературу только по VB, не по VBA. Очень похоже, но это всё про VB "в собственном соку", речь идет только о создании приложений на VB.

Ну и что? Для того чтобы начать программировать на VBA для какого-нибудь приложения (в данном случае под AutoCAD), на мой взгяд, необходимо знать:
1. Объектную модель этого приложения. В переводе - хорошо в нем работать. Без этого все остальное в значительной степени теряет смысл.
2. Функции и процедуры.
3. Типы используемых данных, массивы.
4. Работа с формами (загрузка, отображение, скоытие, выгрузка). Элементы управления, их свойства.
5. Коллекции объектов.
6. Циклы: повтор определенное число раз - For...Next, перебор в коллеции - For Each...Next, условные - Do While...Loop, Do Until...Loop.
7. Инструкции условного перехода: If...Then...Else, Select Case.
8.Обработка ошибок.
9. Маленькие прятные вещи типа Object Browser, окно отладки и т. п.
Все остальное узнается по ходу дела.
Все это я написал - не из желания повыпендриваться, а для того, чтобы показать: все это описывается в любой книге по программированию на VB, или по VBA для любого приложения.
Что до объектной модели конкретно AutoCADa, здесь сложнее. Повторяю, либо надо очень хорошо в нем работать, либо найти в интернете ее описание. Ссылки не даю (просто не помню). Кажется видел на родном сайте Autodesk (могу и ошибаться) в PDF, есесно на аглицком. Там же, кстати, по Lisp и VisualLisp. Книжки российских издателей не привожу. Вам они, как я понял, без надобности.

Вы такой умный по трём, по меньшей мере, причинам: Вы просто от природы такой даровитый; у Вас есть несколько книг по VB, VBA, AutoLisp... (не говорите, что все Вы узнали из help'a, не смешите народ); у Вас есть люди, с которыми Вы можете поговорить, посоветоваться, поспорить о предмете.

Мои умственные способности давайте оставим в покое. К обсуждаемому предмету (программирование под AutoCAD на VBA) они не имеют абсолютно никакого отношения. Мне честно говоря глубоко по-барабану: вызывает это у Вас или у кого-нибудь еще смех. Повторю: все, что я знаю об этом предмете я узнал из справки, т. к. книжки появились значительно позднее. Очень толковая, со множеством примеров. Сиди и разбирайся. И, повторю, умственные способности здесь - дело десятое.
Что до людей, которые есть вокруг меня  и с которыми я могу (далее по тексту): вынужден разочаровать. Нету, к сожалению.

...такого Вы себе представить не сможете, это ж Зазеркалье какое-то. Правильно, это оно и есть, Зазеркалье.

Почему же, могу. Но каждый выбирает для себя. И, кстати, в этом отношении Вы ничем не отличаетесь от такого же разработчика где-нибудь в российской глубинке. А может быть даже находитесь и в лучшем.

, просто копируется в модуль текст программы ? и работает. Во-вторых, автор кода для меня просто образец: не поинтересовался, закончил ли спрашивающий церковно-приходскую школу, не послал рыскать по help'у или еще куда, а просто ответил

По-началу и я так делал. Но потом понял: толку для спрашивающего в таком ответе - никакого. И отсюда же.

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

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

...а потому не стоит мерить всех по себе и горячиться, если кто-то мерке не соответствует.

А с чего это Вы взяли, что я всех меряю и горячюсь? Отнюдь.

Если Вы это поймете, пользы от Вас ещё больше будет.

Мне положительно нравиться Ваш менторский тон. Да, и еще: а пользы для кого, позвольте узнать, уважаемый?
За сим, с пожеланиями всяческих успехов, заканчиваю.

Re: Interface-Program

> bender
Согласен: не будем о больном или болезненном.
По некоторым Вашим пассажам мне показалось, что Вы раздражены. Извините, ошибся: это Ваш обычный тон.
Мне жаль, что я Вас оклеветал, предположив, что у Вас есть книги по предмету, которыми Вы успешно пользуетесь. Все не так: книги Вы приобрели, но ничего полезного Вам из них не удалось почерпнуть, Вы остались точно в том же состоянии, как и до их приобретения и бесполезного прочтения. Извините, я ошибся, предположив обратное, что польза все-таки от чтения была.
Задавая вопрос, предполагал, что поможет человек, умеющий читать, понимать прочитанное, знающий предмет и способный дать точный ответ.
Предмет Вы знаете безмерно лучше, чем я. А что до остального... Я с самого начала сказал: "Начал заниматься программированием CAD". То есть не вообще программированием, а программированием CAD. Имея некоторый опыт в программировании электронных таблиц с помощью VBA и LotusScript, я не спрашивал, как же программировать CAD : да точно так же, а если что непонятно, то в help.
Моя задача автоматизировать проектирование машины из 900 с лишним деталей в AutoCAD, используя один файл Excel как контейнер, потому что расчетных функций в Excel несколько больше, чем в VBA, и потому что очень легко устанавливается связь между параметрами.
Поэтому предполагаю ? возможно, ошибочно, - что для решения этой задачи надо пользоваться именно VBA, а не AutoLisp.
Столкнулся с тем, что эта тема (Excel ? контейнер, AutoCAD ? клиент) нигде не освещается отдельно и достаточно тщательно, несмотря на всю мощь, которую может дать такое взаимодействие программ.
Вы же мне объясняете, как учить VB и VBA. Спасибо, но я не спрашивал Вас об этом. На какой-то стадии (чтение, понимание, формулирование адекватного ответа) произошел прокол.
"Да, и еще: а пользы для кого, позвольте узнать, уважаемый?"
Да всё для них же, для собратьев моих из российской глубинки, у которых нет доступа к литературе (для некоторых интернет очень дорог и они не имеют возможности долго рыскать по нему), а потому они ищут помощи и в Ваших точных ответах в том числе. А вы присылаете для "толка" "тренировочные" ответы с намеренными (?!) ошибками. Ваш однофамилец так не делал: он впарил Эллочке нормальное ситечко, без "тренировочной" дырочки диаметром 1 см.
Огромных Вам успехов!

Re: Interface-Program

bender пишет:

Ссылки не даю (просто не помню). Кажется видел на родном сайте Autodesk (могу и ошибаться) в PDF, есесно на аглицком. Там же, кстати, по Lisp и VisualLisp. Книжки российских издателей не привожу. Вам они, как я понял, без надобности.

Все полезное, что можно качнуть бесплатно на русском, польском, словацком, украинском, испанском, португальском и английском языках, меня интересует. Если можете, дайте ссылку, только, пожалуйста, в абсолютно чуждой Вам манере: точно. За возможность скачать книжки именно российских издателей был бы особенно благодарен. Моему вкусу они соответствуют больше, дело не в языковых трудностях или предпочтениях.
Если искать AutoCAD+VBA, то, среди прочего, появляются несколько страниц Autodesk,  которые цитируют части сайта
http://www.caddigest.com/subjects/autoc … amming.htm
Там есть про VBA, Visual LISP, etc. Это не в PDF, но, возможно, именно этот сайт запал Вам в душу, но не в память.
Есть еще сайт, среди многих,
firststeps.narod.ru
Не берусь судить, сколько там просто скопированного help'a (90% или 95%), но зато все на русском, если кому это важно.
Писал же: "Все, что мне нужно рассчитать и начертить, мой макрос считает и чертит". Вы указываете на путь изучения основ и азбуки VBA. В самом деле не читаете то, на что пишете ответы?
А ведь Вы могли бы быть блестящим консультантом. Почему Вы не хотите быть им?

Re: Interface-Program

> Gringo

> Gringo
Отвечю, пожалуй, что в последний раз.

Согласен: не будем о больном или болезненном.

Это Вы о чем?

Мне жаль, что я Вас оклеветал, предположив, что у Вас есть книги по предмету, которыми Вы успешно пользуетесь. Все не так: книги Вы приобрели, но ничего полезного Вам из них не удалось почерпнуть, Вы остались точно в том же состоянии, как и до их приобретения и бесполезного прочтения. Извините, я ошибся, предположив обратное, что польза все-таки от чтения была.

Где это Вы, уважаемый, у меня такое вычитали. Передергивать не надо. Или это Ваш обычный способ вести дискуссии?

Вы же мне объясняете, как учить VB и VBA. Спасибо, но я не спрашивал Вас об этом.

Вы указываете на путь изучения основ и азбуки VBA. В самом деле не читаете то, на что пишете ответы?

Прошу у Вас прощения, но по исходному вопросу

Не получается присвоить переменным значения через UserForm.

я предположил, что проблема как раз в знании азов. Т. к., на мой взгяд, проще этого в VB ничего нет. Еще раз извините.

Re: Interface-Program

"Согласен: не будем о больном или болезненном."   
Это Вы о чем?

Это я о том, что Вы просите не трогать. Я и не  трогаю больше. Я уже не знаю на какую ногу перед Вами встать, чтоб не обидеть. То ли надо сказать: "Это полностью противоположное тому, что Вы подумали"; то ли: "Это именно то, что Вы подумали".

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

Это Вы не писали. А кто писал? Папа римский писал? Отсюда я сделал вывод, что книги Вам, по Вашему мнению, не помогли никак. Думаю, что все-таки помогли.
Программировал расчетные таблицы  с помощью VBA и LotusScript. Данные вводил с помощью обычных средств Lotus и Excel : значений в клетках. Необходимость ввода данных через UserForms возникла только при попытках программировать AutoCAD, который не имеет собственных средств ввода данных.
Вы уходите навсегда. Жаль. А как же ссылки на книги о VBA AutoCAD на русском языке, которые можно было бы скачать? Впрочем, если Вы никогда их  не имели, то не особенно и жаль. "Viento en popa". Не обижайтесь, "попа" ? это "корма" на castellano. Я желаю Вам ветра в корму. Валите, если Вам хочется.
Если Вы живете в местечке из 10000 жителей и кто-то еще занимается тем же, что и Вы, и у вас нет ни оппонентов, ни единомышленников ? это, наверное, повод для размышлений на тему всё ли в порядке с Вами лично.
Ругаться с Вами мне совершенно неинтересно. Узнать необходимое ? да, хочется и нужно.
Что мне было бы интересно. Открыть сайт на тему "автоматизация проектирования и конструирования". Это не обязательно VBA для AutoCAD. Может быть Automation of SE или/и Automation of SW (имею хорошие контакты с продавцами обеих программ в Зазеркалье). Я бы заплатил за hosting, обеспечивая рекламу и, по мере сил и интеллектуальных возможностей, принимая участие в решении проблем. Вы бы решали, кого бы привлечь к решению проблем, и собственно проблемы. Если Вам интересно не только советовать и ругаться, но и иметь с этого доход, пишите:
glan@galeon.com
У Вас, наверное, Божий дар (подчиняюсь, в этой части, современной орфографии). Пожалуйста, усарьте его на пользу людям.
Как Вы считаете, мне удалось выучить русский язык достаточно прилично?
Всех Вам благ.