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

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

VBA. Задание имени блока в Blocks.Add и InsertBlock

Ответ
Поиск в этой теме
Непрочитано 08.11.2013, 16:51 #1
VBA. Задание имени блока в Blocks.Add и InsertBlock
fasadel
 
Регистрация: 17.03.2009
Сообщений: 316

Периодически методы Blocks.Add и InsertBlock ругаются словами "Call method SetObjectId of Interface IAcadBaseObject failed" на параметр с именем блока. Причём если написать в вызове метода имя явно, то всё работает, а если в качестве аргумента там ставлю переменную, объявленную как String, в которую ранее считал строковое значение из файла, то облом. Значение строковой переменной проверял, смотрел при отладке — хорошая строка там.

Последний раз редактировалось fasadel, 09.11.2013 в 11:07.
Просмотров: 3597
 
Непрочитано 08.11.2013, 18:13
#2
swell{d}

гадание на конечно-элементной гуще
 
Регистрация: 31.05.2006
Düsseldorf
Сообщений: 7,604


2. у меня работает такой код для проверки существования блока (если такого нет, то создаём):

Public kr As String

Sub rdv_kr() 'Создаём блок каркаса КР
On Error GoTo ErrorHandler
kr = "kr" + CStr(Int(tsten / 10))
Dim tmp_block As IAcadBlock
Set tmp_block = ThisDrawing.blocks.item(kr)
Exit Sub 'Выходим из процедуры, чтобы не попасть в обработчик
ErrorHandler:
Select Case Err.Number
Case -2145386470 'если блока нет
Dim pt1(2) As Double, pt2(2) As Double
Dim block As IAcadBlock, obj As AcadObject
Set block = ThisDrawing.blocks.Add(pt1, kr)

pt1(1) = -(tsten / 2 - 40)
pt2(1) = tsten / 2 - 40
Set obj = block.AddLine(pt1, pt2)
obj.LineWeight = -2
obj.layer = "КЖ_арматура элементов"

pt1(0) = 10
pt1(1) = -(tsten / 2 - 60)
Set obj = block.AddCircle(pt1, 10)
obj.LineWeight = -2
obj.layer = "КЖ_арматура элементов"

pt1(1) = tsten / 2 - 60
Set obj = block.AddCircle(pt1, 10)
obj.LineWeight = -2
obj.layer = "КЖ_арматура элементов"
End Select
End Sub

вдруг чем поможет.
__________________
.: WikiЖБК + YouTube :.
swell{d} вне форума  
 
Автор темы   Непрочитано 08.11.2013, 18:51
#3
fasadel


 
Регистрация: 17.03.2009
Сообщений: 316


Не в это дело. Если я создаю новый блок Blocks.Add, речь не идёт о проверке, должно работать с любым именем блока.

Суть вот в чём:

Это не работает:
Код:
[Выделить все]
Dim sBName As String
sBName = ' некая строка, считанная из файла. Пусть в итоге sBName = "my_block"
ThisDrawing.Blocks.Add (Point, sBName)
А это работает:
Код:
[Выделить все]
ThisDrawing.Blocks.Add (Point, "my_block")
fasadel вне форума  
 
Непрочитано 08.11.2013, 18:57
#4
swell{d}

гадание на конечно-элементной гуще
 
Регистрация: 31.05.2006
Düsseldorf
Сообщений: 7,604


попробуйте скобки убрать =)
http://vbamodel.narod.ru/AutoCAD/idh_add.htm

вообще это не так работает. нужна конструкция типа:
Dim block As IAcadBlock
Set block = ThisDrawing.blocks.Add(pt1, kr)
__________________
.: WikiЖБК + YouTube :.
swell{d} вне форума  
 
Автор темы   Непрочитано 13.11.2013, 07:47
#5
fasadel


 
Регистрация: 17.03.2009
Сообщений: 316


Разобрался

Строку, загружаемую из файла, не очистил от спецсимволов. Перед именем блока торчал "таб", который не был виден при просмотре переменной при отладке.
fasadel вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Задание имени блока в Blocks.Add и InsertBlock

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Соединение 2 однопролётных плит через пилон в разных уровнях an247 Прочее. Архитектура и строительство 7 13.10.2005 15:43
Масштабирование объектов при печати в разных форматах Yuri AutoCAD 4 13.05.2004 19:27
Отоблажение в разных Viewports разных слоев Torino AutoCAD 2 27.02.2004 13:16