Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2012, 07:48   #1
Святой Дьявол
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 34
По умолчанию взаимодействие vba с компасом

Доброго времени суток уважаемые форумчане! Решил я попробовать из vba excel чертить в компасе. открываю компас, открываю чертеж, черчю первую линию
Код:
Set kompas = New Kompas6API5.Application 'открываем компас
   kompas.Visible = True
    Set ksdoc = kompas.Document2D 'чертеж
   ksdoc.ksOpenDocument (Range("K1").Value & "\шаблон\пост4" & Range("D4").Value & ".cdw"), False 'открываем шаблон
   Dim x, x0, y, y0 As Double
   x0 = Range("C165").Value '=618
   y0 = Range("C166").Value ' =158
   x = Range("C171").Value * Range("C174").Value '0.98*1.53
   Dim i, j As Double
   i = Range("C176").Value ' i=12
   j = 1
   Do While j <= i
   ksdoc = ksdoc.ksLineSeg((x0 + j * x), (y0 - Range("C173").Value), (x0 + j * x), (y0 + Range("C173").Value), 1) 'чертим линии  
   j = j + 1
  Loop
цикл do while выполняется только один раз, после чего выскакивает ошибка Run-time error 424 Object required. Гуру подскажите в чем может быть ошибка? Заранее спасибо!
Не бойся делать то, чего не умеешь. Помни! ковчег был построен любителем, профы построили Титаник...
Святой Дьявол вне форума Ответить с цитированием
Старый 31.01.2012, 10:46   #2
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Поставь в начале модуля Option Explicit
И правильно объяви переменные. В компасе не работал, но судя по коду
Код:
Set ksdoc = kompas.Document2D 'чертеж
одной переменной присваивается объект - документ, а потом ей же линия. А у линии нет такого метода, который есть у документа
Код:
ksdoc = ksdoc.ksLineSeg
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 31.01.2012, 11:41   #3
Святой Дьявол
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 34
По умолчанию

Цитата:
Поставь в начале модуля Option Explicit
И правильно объяви переменные. В компасе не работал, но судя по коду
Код:

Set ksdoc = kompas.Document2D 'чертеж

одной переменной присваивается объект - документ, а потом ей же линия. А у линии нет такого метода, который есть у документа
Код:

ksdoc = ksdoc.ksLineSeg
Alex, попробую вечером поэксперементировать, но мне кажется если бы переменные были неправильно то первый раз цикл бы тоже не проходил. ошибка выскакивает при повторном прохождении цикла, первая линия строится на чертеже нормально
Не бойся делать то, чего не умеешь. Помни! ковчег был построен любителем, профы построили Титаник...
Святой Дьявол вне форума Ответить с цитированием
Старый 02.02.2012, 10:22   #4
Святой Дьявол
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 34
По умолчанию

извиняюсь за долгое молчание, были проблемы с инетом( разобрался я со своими баранами, может кому пригодиться
Код:
Set kompas = New Kompas6API5.Application 'открываем компас
   kompas.Visible = True
    Set ksdoc = kompas.Document2D 'чертеж
   ksdoc.ksOpenDocument (Range("K1").Value & "\шаблон\пост4" & Range("D4").Value & ".cdw"), False 'открываем шаблон
   Set doc = kompas.ActiveDocument2D
   ksdoc = doc.ksMtr(618.28, 154.28, 0, 1, 1) 'временые координаты
   
   
   Dim x, y As Double
  
   x = Range("C171").Value * Range("C174").Value
    y = Range("C172").Value * Range("C175").Value
   Dim i, j As Double
   i = Range("C176").Value
   j = 1
         Do While j <= i
   ksdoc = doc.ksLineSeg(j * x, -Range("C173").Value, j * x, Range("C173").Value, 1)  
   ksdoc = doc.ksText(j * x - 2.5, -7, 0, 3.5, 1, 4096, j * Range("C171").Value) 
   ksdoc = doc.ksLineSeg(-j * x, -Range("C173").Value, -j * x, Range("C173").Value, 1)   
    ksdoc = doc.ksLineSeg(-Range("C173").Value, j * y, Range("C173").Value, j * y, 1)
    ksdoc = doc.ksText(-10, j * y - 1.5, 0, 3.5, 1, 4096, j * Range("C172").Value) 
     ksdoc = doc.ksLineSeg(-Range("C173").Value, -j * y, Range("C173").Value, -j * y, 1) 

   j = j + 1
           Loop

  ksdoc = doc.ksDeleteMtr 'зыкрываем временные координаты
Не бойся делать то, чего не умеешь. Помни! ковчег был построен любителем, профы построили Титаник...
Святой Дьявол вне форума Ответить с цитированием
Старый 19.12.2012, 22:27   #5
Shurup_89
Новичок
Джуниор
 
Регистрация: 19.12.2012
Сообщений: 1
По умолчанию

Здравствуйте, я общался с VB в windows, то есть писал макросы, подпрограммки к экселю, разные базы данных, но сейчас передо мной встала задача: открыть компас при помощи VB и подгружать в открытый документ 3D модели. Я конечно понимаю, что дурак, но я перечитал весь мануал из папки SDK и даже после этого у меня не получается даже открыть компас, не говоря уже о чём-то большем.

Пробовал Вашу программу, тоже ни в дугу, максимум чего добился - 413 ошибки
Shurup_89 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взаимодействие ячеек Nenado БД в Delphi 2 17.01.2012 21:18
Взаимодействие с программой Blightn Общие вопросы Delphi 1 25.05.2010 17:48
Взаимодействие C# и 1с Sparky Свободное общение 1 05.02.2010 04:31
Межпроцессное взаимодействие ilham Win Api 5 16.12.2008 13:01
взаимодействие с QIP Toxa Общие вопросы Delphi 5 20.06.2008 19:39