ADN Club > VBA
Вставка блока из другого файла
Дамир:
Результаты экспериментов с подключением к COM-объекту AutoCAD 2013 LT.
Дано: установлены AutoCAD 2014, AutoCAD 2014 VBA Enabler, AutoCAD 2013 LT
Ассоциация с файлами dwg привязана на AutoCAD 2013 LT
Мои попытки:
--- Код - Visual Basic [Выбрать] ---Set AcadApp = CreateObject("C:\Program Files\Autodesk\AutoCAD LT 2013\acadlt.exe")Set AcadApp = CreateObject("C:\Program Files\Autodesk\AutoCAD LT 2013\acadlt.exe","AutoCAD.Application")Set AcadApp = CreateObject(,"AutoCAD.Application")Set AcadApp = CreateObject(,"AutoCAD.Application.**") '** - пробежал по вариантам: 17, 18, LT18, 18LTSet AcadApp = GetObject(,"AutoCAD.Application") ' при открытом AutoCAD 2013 LTSet AcadApp = GetObject(,"AutoCAD.Application.**") '** - пробежал по вариантам: 17, 18, LT18, 18LT
все варианты приводили к различным ошибкам: "Невозможно создание контейнером объекта ActiveX..."
На сторонних сайтах нашел следующую информацию:
http://www.cadtutor.net/forum/showthread.php?30446-vb-code-to-open-drawings-in-autocad-lt
--- Цитировать ---I do not believe the LT version can be accessed with VB in it's present state.
--- Конец цитаты ---
--- Цитировать ---That's right. You have no COM interface in LT, so you have nothing like
Set acadLTApp = CreateObject("AutoCADLT.Application")
--- Конец цитаты ---
http://www.vbaexpress.com/forum/showthread.php?24269-Solved-How-to-control-AutoCad-LT-with-Visual-Basic-6
--- Цитировать ---autocad LT do not support vb in its present version..this is the response i got from the autodesk customer support...
--- Конец цитаты ---
--- Цитировать ---This is correct, you cannot control Autocad LT with the createobject/getobject methods. You can however write a script that will open Autocad LT and insert the drawing(s) that you want and close it.
--- Конец цитаты ---
Все это наводит на мысль, что я никак не смогу обратиться к COM-объекту AutoCAD 2013 LT версии.
Может есть какие идеи на этот счет?
Александр Ривилис:
--- Цитата: Дамир от 15-08-2014, 14:38:23 ---Все это наводит на мысль, что я никак не смогу обратиться к COM-объекту AutoCAD 2013 LT версии.
Может есть какие идеи на этот счет?
--- Конец цитаты ---
Мысль абсолютно правильная. Всё что можно делать с LT я указал здесь: http://adn-cis.org/forum/index.php?topic=917.0
Дамир:
Александр Ривилис, благодарю. Я как новичок не знал об этом. Поэтому и привел лишь результаты своих поисков по этой теме. Благодарю. Значит будем работать на полноценных версиях AutoCAD. Пока эксперименты провел на 14 версии. Планирую проверить на 12, и 15. По результатам отпишу!
art_rrc:
Я в своих программах использую следующий код собственного сочинения. Гуру СНГ программирования он покажется смешным, но для моих потребностей вполне хватает :)
В программе:
--- Код - Visual Basic [Выбрать] ---On Error Resume NextSet NewBlock = .ModelSpace.InsertBlock(nPnt, nameBlock, 1, 1, 1, 0)If Err Then Err.Clear Call art_InsertBaseBlocks(nameBlock) Set NewBlock = .ModelSpace.InsertBlock(nPnt, nameBlock, 1, 1, 1, 0)End If Сама процедура:
--- Код - Visual Basic [Выбрать] ---Public Sub art_InsertBaseBlocks(strName As String)Dim XRef As AcadExternalReferenceDim insPnt(0 To 2) As Double Dim FileWay As StringDim objDel As AcadBlockDim strDel As StringWith ThisDrawinginsPnt(0) = 1#: insPnt(1) = 1#: insPnt(2) = 0#FileWay = "D:\All_For_Acad_2015\Acad_Blocks\Blocks.dwg"Set XRef = .ModelSpace.AttachExternalReference(FileWay, "БазаДанныхБлоков", insPnt, 1, 1, 1, 0, False).Blocks.Item(XRef.Name).Bind TrueXRef.DeleteFileWay = "ВаляКоля"'On Error Resume NextSet XRef = .ModelSpace.AttachExternalReference(FileWay, "Шило", insPnt, 1, 1, 1, 0, False).Blocks.Item("БазаДанныхБлоков").DeleteFor Each objDel In .Blocks strDel = objDel.Name If strDel <> strName Then .Blocks.Item(strDel).Delete End IfNextEnd WithEnd Sub
Дамир:
Здорово! Спасибо. Моя проблема заключалась в том, что я пишу на VBS, а не на VBA. На основании чего столкнулся с массой проблем связанной с восприятием типов данных VBS'ом.
Навигация
Перейти к полной версии