Тема: Вставка листов Excel в листы AutoCad с помощью VBA

Помогите, пожалуйста, решить следующую задачу:
Необходимо вставить некоторое количество листов Excel в такое же количество листов AutoCad с одинаковыми штампами.
Сценарий очевиден: в "Лист0" файла ACad предварительно создаем пустой штамп, копируем "Лист0" в "Лист1", копируем через буфер лист Excel в "Лист1", копируем "Лист0" в "Лист2", а в "Лист2" - следующий лист Excel и т.д. В конце "Лист0" удаляем. Объясните следующее:
1. Как на VBA реализовать команду "Переместить/копировать" контекстного меню вкладки листа с опцией "сделать копию" и "переместить в конец"?
2. Как программно вставить из буфера OLE-объект, избежав появления диалогового окна установки размеров этого объекта.
3. Как потом сослаться на вставленный объект и изменить его размеры и положение?
PS На первый вопрос ответ кажется нашел:
https://www.caduser.ru/forum/topic29419.html
А нет ли более короткого метода, как например екселевского .Sheets("Лист0").Copy After:=.Sheets(N)?

Re: Вставка листов Excel в листы AutoCad с помощью VBA

Не зря говорят "Молчание - золото". Во всем разобрался сам.:) Осталось решить последний вопрос: как сослаться на вставленный из буфера OLE-объкт (не рисунок), чтобы позиционировать его на листе? SelectionSets пуст, хотя на экране объект выделен. Подскажите, пожалуйста, где его искать.

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> alex
Чуствуется, что это вопль.
Я только что из Курил (три месяца без интернета)
На AutoCAD, на мой взляд, листы из Excel перенести можно только растром из буфера.
Когда-то, давным-давно, я на VBA сделал программку, которая в AutoCAD, средсвами AutoCAD чертит таблицы из Excel (соблюдаются все размеры, что в Excel). Копируются, так же и значеия в ячейках, но только тремя самыми распростаненными шрифтами. Программа сырая - нет времени довести (работа, сон - 4 часа в сутки), но иногда ей пользуюсь и она меня выручает. Могу выслать (бесплатно). Мой e-mail: churaev_s@mail.ru

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> Saor
Интересно, значит ты там встретил Новый год
раньше чем на хваленых островах Фиджи
Чё там забыл на Курилах? Не на Кунашире часом
обретался?
Я тоже давно озабочен такой же проблемой, очень
интересно узнать решение
Заранее благодарен
~'J'~
fixo@yandex.ru

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> Saor
Спасибо за отклик, хоть он и не прибавил оптимизма. Похоже в AutoCAD средствами VBA OLE-объекты действительно нельзя модифицировать (а жаль). С помощью AutoLISP получил имя объекта в базе и координаты его углов, а это уже зацепка, да тоже времени нет продолжить изыскания.
Интересно было бы взглянуть на Вашу программку. Если можно, вышлите исходники на agiarspmu@yahoo.com буду очень признателен.

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> alex
Я даже не начинал такую программу, просто
интересно самому, когда что-то новое
А времени просто нет сейчас самому писать
~'J'~

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> alex,
Fatty
Я опять только, что из командировки. На этот раз г. Макаров (о.Сахалин).
Если сказал "А", то, естественно, говори "Б".
Алгорим моей программы очень простой. Так как у одинаковых объектов AutoCAD и Excel на VBA свойства, методы, шрифты, координаты и т.п., и т.д. не совпадают (мягко сказано), то приходится брать ячейку в Excel, как объект, изучить ее и перевести в AutoCAD. Работа нудная (техника), но мне пришлось ее сделать. Тогда Excel я знал не плохо, а вот в AutoCADе был почти ноль. Я перед Вами похвастался программкой, нашел ее попробовал запусть, а она требует библиотеку, которую я сходу найти не смог. У меня сейчас новый софт - может-быть поэтому? Ну нет у меня сейчас времени разбираться с ней. Программа работает из Excel, поэтому код сюда выкладывать бессмыслено. Я ее вышлю Вам екселевским файлом на адреса.
Думаю, что Fatty сможет ее сократить на 2/3, так как считаю его одним из монстров VBA (когда-то он мне давал советы, правда под другим ником)
К стати, Fatty, я был на Итурпе. Но Кунашир, о. Шикотан, о. Зеленый, о. Юрий то же, иногда, посещаю.

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> Saor
Программу получил, спасибо. У меня на Windows XP SP2 с Autocad 2004 Rus она работает и ничего не требует. К стати, на этом форуме я уже встречал похожую программу:
https://www.caduser.ru/forum/topic337.html
Гдето в конце этой темы есть ссылка на закачку. Если ссылка уже не работает, могу выслать, я её скачал. Тоже файл Excel с макросом на VBA.

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> Saor
Спасибо за программу, буду разбираться
Я примерно такую сделал для одного перца
из Малайзии, только там еще добавлен event
для открытия чертежа, имя которого записано
в ячейке
Сейчас не в форме..., позже отпишусь
Успехов, завидую путешественникам :)
~'J'~

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> alex
Спасибо за ссылку. Я о ней не знал, хотя подобные темы искал.
Да, моя программа мало того, что сырая, ее еще надо дорабатывать и дорабатывать. В AutoCAD вставляются dtext. Не люблю работать с mtext еще с AutoCAD-2000 (были глюки). Но если в ячейке Ecel находится многострочный текст, то его в AutoCAD надо вставлять как mtext. И еще много недоработок. Нет времени (я не программист), так пока вручную потом довожу.
> Fatty, спасибо за пожелание. Путешествия мои вынужденные (командирвки). До чертиков надоели. Но весной опять потянет.
Удачи всем!

Re: Вставка листов Excel в листы AutoCad с помощью VBA

Кхм...я тут влезаю, потому что тема похожа...
Нужно вбить в акад 2006 ячейки из экселя, с сохранением связи, которые будут расбросаны по всему черчежу... Так как таких ячеек на чертеж будет более 200...надо чтобы забивались они путем перетаскивания... или методом "наводки" то есть с прописыванием пути по шаблону, примерно так
лист1/столбец15/строка10/
лист1/столбец15/строка21/
лист1/столбец15/строка31/
И тд...
Заранее спасибо =)

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> tim
В Excel копируем ячейку в буфер. В Autocad меню "Правка" -> "специальная вставка" -> переключатель "Вставить связь" -> "ОК". Этот вариант не подходит?

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> tim
Не совсем понял насчет связей
К примеру, если это блоки, а в ячейках значения
атрибутов, тогда есть варианты, как это можно
сделать малой кровью
~'J'~

Re: Вставка листов Excel в листы AutoCad с помощью VBA

alex пишет:

А нет ли более короткого метода, как например екселевского .Sheets("Лист0").Copy After:=.Sheets(N)?

Во всем разобрался сам.:)

Раз разобрался, мож подскажешь? У меня макрос с таким кодом на Office XP пашет, а на Office 2003 нет.
Записываю в Excel'е из Office 2003 макросорекордером аналогичные действия, выполнить - не хочет! То ли у него глюки, то ли у меня - галюники... Проверил на нескольких машинах.

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> Любознательный
Вообще-то я разобрался в том, как короче реализовать эту операцию в AutoCad, а именно:

Set LayFirst = ThisDrawing.Layouts.Item("Лист1")
Set LayNext = ThisDrawing.Layouts.Add("Лист" & CStr(N))
LayNext.CopyFrom LayFirst

Правда при этом копируются только настройки листа и печати, но меня это устраивает.
Относительно глюков макроса могу пока предложить два варианта:
1. Если установлен антивирус Касперского - запустить макрос при отключенной постоянной защите. В последнее время Касперский не дружит с VBA макросами. Я на это уже нарывался.
2. Гдето я читал, что некоторые версии Excel не позволяют копировать лист в последнюю позицию, хотя в моем Office 2003 он это беспрекословно делает. Попробуй переписать свой макрос так:

Sheets("Лист0").Copy Before:=Sheets(N)
Sheets(N + 1).Move After:=Sheets(N)

Re: Вставка листов Excel в листы AutoCad с помощью VBA

Задачу копировния некоторого количества листов Excel, в такое же количество листов AutoCad с одинаковыми штампами, удалось таки решить. Это решение не универсально, но мои специфические потребности оно удовлетворяет.
Основная идея заключается в том, что каждый лист Excel копируется в пространстве модели через буфер обмена в соответствующий ему отдельный слой, замороженный для всех новых видовых экранов. Затем создаются листы AutoCad, со вставленными в виде блока штамлами, а в каждом из них - видовой экран нужных размеров, перед созданием которого размораживается соответствующий слой, а потом снова замораживается для новых видовых экранов.
Код пока не выкладываю, так как это процедура, входящая в состав модуля Access, и отдельно работать не будет. Если есть вопросы - готов ответить.

Re: Вставка листов Excel в листы AutoCad с помощью VBA

alex пишет:

1. Если установлен антивирус Касперского — запустить макрос при отключенной постоянной защите. В последнее время Касперский не дружит с VBA макросами. Я на это уже нарывался.

Спасибо.

Re: Вставка листов Excel в листы AutoCad с помощью VBA

> [Re:]
alex (2007-01-19 17:03:07
>[Re:] Любознательный (2007-01-20 17:44:44
Ведь об этом было выше сказано. И чему пелеливать из пуостого в порожнее?
Связь ячеки в таблице AutocCAD (с изменяющемися площадями - объемами) возможна только в моодуле AutocCAD
Удачи!