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

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

Не удается выполнить команду "select" на VBA

Ответ
Поиск в этой теме
Непрочитано 01.09.2011, 00:00 #1
Не удается выполнить команду "select" на VBA
Dec0rator
 
Регистрация: 02.11.2010
Сообщений: 13

Здравствуйте!
Пишу небольшую программу на VBA (в excel). На чертеже имеются нужные мне блоки, требуется их перенести куда-нибудь в другое место чертежа, там разбить, затем выделив при помощи команды select (по 2-м точкам) выбрать отрезки из которых состоят блоки.
Делаю это в следующей последовательности:

SelectOnScreen - выбираем нужные блоки
затем:
For each Item in SsObj - перебираем выбранные объекты
CopyItem = Item
CopyItem.Move 'перемещаем копию в дальний угол чертежа (где заведомо пусто)
CopyItem.explode 'разбиваем копию и удаляем
CopyItem.Delete '... и удаляем
'теперь нужно выделить то что разбили:
mode = ....window
NewObj.Select mode point1 point2 'создаем новый набор по точкам(которые как раз и определяют тот самый дальний угол)
For each Item1 in NewObj
'......тут я извлекаю нужную информацию из кусков блока
Item.Delete
next Item1
NewObj.Delete


'Вот тут то и происходят странные вещи:
'- если этот самый дальний угол не виден на экране, то NewObj остается пустым
'- если дальний угол виден на экране, то NewObj заполняется примитивами по всем Item кроме последнего
'- если перед заполнением NewObj вставить команду regen и опять же дальний угол виден на экране то в NewObj добавляются 'все Itemы
Next Item

Соответственно вопрос: как избавится от этого косяка? Как сделать чтобы при использовании Select в NewObj попало ВСЕ что лежит внутри рамки вне зависимости от того что видно на экране?
Заранее спасибо за помощь!
Просмотров: 3767
 
Непрочитано 01.09.2011, 01:02
1 | #2
Дима_

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


Никак, у автокада такой глюк, SelectOnScreen (как и лисповский ssget) возращат только с текущего экрана. Либо во время выбора зумировать, либо делать выборку самому (проверять координаты выбранные пользователем итд), но по моему с 2-ым лучше не заморачиваться - объяснить юзерам что такая особенность.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 01.09.2011, 01:11
1 | #3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,124


Намного проще по имени блока обратиться к его описанию и пройтись по составу, чем пытаться что-то куда-то двигать, разбивать и т.д.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.09.2011, 08:36
#4
Dec0rator


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


2Кулик Алексей aka kpblc - а ведь точно! я просто автокад vba совсем мало знаю, и ступил из-за этого, пошел неправильным путем, спасибо за совет!! Буду искать команды чтобы смотреть содержимое блока

2Дима_ - Вы не совсем правильно поняли (или я не правильно описал): проблема не в selectonscreen а в select по 2-м точкам, но в нем тот же глюк как я теперь понимаю.
Правда остается не ясным почему "'- если дальний угол виден на экране, то NewObj заполняется примитивами по всем Item кроме последнего", но теперь уже не так важно =)


Хм, искал команды по разбору блока и наткнулся на ответ на свой вопрос, если все же перетаскивать объекты:
explodedObjects = copyBlock.Explode
copyBlock.Delete
' Перечислим полученные обломки
Dim I As Integer
For I = 0 To UBound(explodedObjects)


explodedObjects(I).Delete
Next

хотя метод, предложенный Алексей aka kpblc куда элегантнее =)

Последний раз редактировалось Dec0rator, 01.09.2011 в 08:59.
Dec0rator вне форума  
 
Непрочитано 01.09.2011, 09:57
1 | #5
Дима_

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


Цитата:
Сообщение от Dec0rator Посмотреть сообщение
Хм, искал команды по разбору блока и наткнулся на ответ на свой вопрос, если все же перетаскивать объекты:
Не занимайтесь ерундой (я изначально Ваш первый пост через строку прочитал, не понял что Вам в конечном итоге нужно). Берите описание блока и вперед (в случае динамических и аттрибутов будет чуть посложней, но сюдя по всему это не Ваш вариант) - ActiveDocument-Blocks-Item-Item... и все отрезки как на ладони.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 01.09.2011, 10:10
#6
Dec0rator


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


2Дима_ - я как прочел пост 3# сразу понял что занимаюсь ерундой, сейчас уже пошел по этому способу, спасибо за совет!
А то что привел пример - это просто ответ на мой собственный вопрос
Dec0rator вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Не удается выполнить команду "select" на VBA

Система Техэксперт дает уверенность в правильности и эффективности принимаемых инженерных решений!
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как автоматически выполнить команду после полной инициализации интерфейса AutoCAD 2012? lexluther Программирование 6 13.04.2018 12:41
Лисп. Как выполнить команду по завершении предыдущей? BetinS LISP 14 19.06.2014 03:25
Автоматически выполнить макрос VBA передав ему строку. Sergei_Nikolaev Программирование 4 30.06.2009 13:38
В 2008 не могу выполнить команду Bater AutoCAD 1 15.01.2009 20:48
транслятор VBA не понимает команду round(expr,d) ! sergeytr Программирование 5 02.05.2007 10:20