Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Вставить блок из другого файла.

VBA. Вставить блок из другого файла.

Ответ
Поиск в этой теме
Непрочитано 10.03.2014, 21:32 #1
VBA. Вставить блок из другого файла.
art_rrc
 
Минск
Регистрация: 28.01.2013
Сообщений: 379

Доброго времени суток. Уважаемые форумчане, подскажите пожалуйста, реализуема ли средствами VBA такая задача... "Если в чертеже нет блока с именем "Блок1", то вставить его в чертеж из другого файла, путь к которому известен".
Порывшись в литературе нашел вот это:
Но у меня этот код не работает выдает error 424 Object required.
Ругается вот на эти строки:
Код:
[Выделить все]
dlgOpenFile.Filter = "AutoCAD Blocks (*.DWG) | *.dwg"
dlgOpenFile.InitDir = Application.Path
dlgOpenFile.ShowOpen]
Подскажите пожалуйста, как быть, куда копать? Система w7x64 (на всякий случай)
Заранее спасибо!

Полный код из книги Joe Stuphin'a :
Код:
[Выделить все]
Private Sub CommandButton1_Click()
Dim objBlockRef As AcadBlockReference
Dim varInsertionPoint As Variant
Dim dblX As Double
Dim dblY As Double
Dim dblZ As Double
Dim dblRotation As Double
'' get input from user
dlgOpenFile.Filter = "AutoCAD Blocks (*.DWG) | *.dwg"
dlgOpenFile.InitDir = Application.Path
dlgOpenFile.ShowOpen
If dlgOpenFile.FileName = "" Then Exit Sub
Me.Hide
With ThisDrawing.Utility
.InitializeUserInput 1
varInsertionPoint = .GetPoint(, vbCr & "Pick the insert point: ")
.InitializeUserInput 1 + 2
dblX = .GetDistance(varInsertionPoint, vbCr & "X scale: ")
.InitializeUserInput 1 + 2
dblY = .GetDistance(varInsertionPoint, vbCr & "Y scale: ")
.InitializeUserInput 1 + 2
dblZ = .GetDistance(varInsertionPoint, vbCr & "Z scale: ")
.InitializeUserInput 1
dblRotation = .GetAngle(varInsertionPoint, vbCr & "Rotation angle: ")
End With
'' create the object
On Error Resume Next
Set objBlockRef = ThisDrawing.ModelSpace.InsertBlock _
(varInsertionPoint, dlgOpenFile.FileName, dblX, _
dblY, dblZ, dblRotation)
If Err Then
MsgBox "Unable to insert this block"
Exit Sub
End If
objBlockRef.Update
Me.Show
End Sub
Просмотров: 5528
 
Непрочитано 10.03.2014, 21:41
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от art_rrc Посмотреть сообщение
Если в чертеже нет блока с именем "Блок1", то вставить его в чертеж из другого файла, путь к которому известен
Вариант 1 - Вставить файл как внешнию ссылку (см. метод InsertBlock) - тогда все вложенные блоки будут импортированы в текущий документ.
Вариант 2 - см. метод CopyObjects.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 10.03.2014, 22:51
#3
art_rrc


 
Регистрация: 28.01.2013
Минск
Сообщений: 379


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Вариант 1 - Вставить файл как внешнию ссылку (см. метод InsertBlock) - тогда все вложенные блоки будут импортированы в текущий документ.
Вариант 2 - см. метод CopyObjects.
Большое спасибо, буду копать! Но это уже завтра, сейчас нет возможности. Пока второй вариант не понял (буду изучать матчасть), но по поводу первого.. Т.е. если я правильно понял, можно вставить чертеж как ссылку, затем вставить нужный мне блок, затем удалить ссылку и все, нужный мне эффект достигнут! Верно?
И еще по поводу первой части вопроса.. Есть методы которые позволяют определить есть ли блок в чертеже? Или нужно анализировать возможное появление ошибки и при ее возникновении лезть в др. файл?
Спасибо.
art_rrc вне форума  
 
Непрочитано 10.03.2014, 23:36
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от art_rrc Посмотреть сообщение
можно вставить чертеж как ссылку, затем вставить нужный мне блок, затем удалить ссылку и все, нужный мне эффект достигнут! Верно?
Да, только надо учесть ситуацию когда блоков в файле несколько.
Цитата:
Сообщение от art_rrc Посмотреть сообщение
Есть методы которые позволяют определить есть ли блок в чертеже?
По правильному вначале проверять коллекцию блоков (Document.Blocks) на наличие соответствующего описания блока, НО если автокад используется "снаружи" (работает как COM сервер для внешней программы), то быстрее будет проверить через обработку ошибки т.к. кол-во запросов к COM модели будет равно количеству описаний блоков (в случае если блок не найдется, ну или пока не обнаружим), которых может быть достаточно много, а каждый внешний запрос это время на его подготовку - которое значительно больше чем время самого запроса.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Вставить блок из другого файла.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ССылка на текст из другого файла Kosenko Sasha AutoCAD 8 18.07.2013 20:39
Поле - ссылка на текст другого файла Kosenko Sasha Программирование 7 22.03.2013 19:52
Летние Олимпийские игры 2012. Болеем за наших! T-Yoke Разное 303 13.09.2012 11:56
Болеем за наших на Олимпиаде T-Yoke Разное 472 28.04.2009 17:40
структурированный список Holon Программирование 22 11.09.2007 14:09