Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2014, 15:50   #1
Kefirrr
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 53
По умолчанию перемещение блоков в автокаде используя excel vba

Вновь обращаюсь к ВАМ за помощью. Пытаюсь немножко автоматизировать процесс построения чертежей используя excel.

Есть .dwg-файл , где располагаются несколько блоков. Хочу один блок (со всеми атрибутами) переместить на новое место. Как мне это сделать?

Конечно, я знаю команду move(откуда, куда). Но не получается переместить блок. Нужно как-то найти определенный блок (скорее всего по elem.handle) и указать нужную точку.

На данный момент у меня получается просто вставить блок, подобный какому-нибудь, в определенное место, НО без атрибутов.
Пожалуйста, подскажите
Вложения
Тип файла: zip move_blocks.zip (85.7 Кб, 16 просмотров)
Kefirrr вне форума Ответить с цитированием
Старый 27.09.2014, 16:15   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Kefirrr, на ошибках не учимся.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 27.09.2014, 16:19   #3
Kefirrr
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 53
По умолчанию

закинула версию 2004 autocad-а
Вложения
Тип файла: zip move_block.zip (100.2 Кб, 19 просмотров)
Kefirrr вне форума Ответить с цитированием
Старый 27.09.2014, 19:37   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Всё тот же принцип поиска блока.
Код:
Const acSelectionSetCrossing As Integer = 1
Sub zamena()
    Set ACADApp = GetObject(, "AutoCAD.Application")
    Set ADOC = ACADApp.ActiveDocument
    Dim pt1(0 To 2) As Double, X As Double, Y As Double
    Dim pt2(0 To 2) As Double
    Dim MovePoint(2) As Double

    MovePoint(0) = 1000
    MovePoint(1) = 1000

    X = 1792.891
    Y = 1503.5127
    pt1(0) = X - 2
    pt2(0) = X + 2
    pt1(1) = Y - 2
    pt2(1) = Y + 2
    Set objSelCol = ADOC.SelectionSets
    For Each objSelSet In objSelCol
        If objSelSet.Name = "a_doober" Then
            objSelSet.Delete
            Exit For
        End If
    Next
    Set objSelSet = objSelCol.Add("a_doober")

    objSelSet.Select acSelectionSetCrossing, pt1, pt2

    For Each entry In objSelSet

        ObjectName = entry.ObjectName
        If ObjectName = "AcDbBlockReference" Then

            entry.InsertionPoint = MovePoint

            entry.Update
        End If
    Next entry

    objSelSet.Delete
    ADOC.Close (True)
    Set ADOC = Nothing
    ACADApp.Quit
    Set ACADApp = Nothing
End Sub
Справка в помощь.
Вложения
Тип файла: rar acad_dev.rar (99.3 Кб, 34 просмотров)
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 27.09.2014 в 19:40.
doober вне форума Ответить с цитированием
Старый 30.09.2014, 06:55   #5
Kefirrr
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 53
По умолчанию

Все работает, спасибо.
Только единственное, что я не могу понять, почему используется команда insertblock? а блок перемещается. Из-за того, что вставляется именно определенный блок?
Туплю страшно, но очень хочется понять, если не сложно, можете последние строчки объяснить
Kefirrr вне форума Ответить с цитированием
Старый 30.09.2014, 13:26   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Нужно как-то найти определенный блок (скорее всего по elem.handle) и указать нужную точку.
Это ваше основное заблуждение.
В базе данных все примитивы и объекты хранятся с ключом ID.
Объект же можно найти и по координатам,что я и делал.
Есть блок,все его свойства хранятся в объекте типа AcDbBlockReference.
InsertionPoint-это координаты точки расположения блока на чертеже.
Это свойство блока.Меняя координаты точки положения-мы меняем положение блока на чертеже.
Команды здесть нигде не используются.
Если вам надо,я могу привести здесь пример использования хендла объекта и команды автокада
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 01.10.2014, 15:49   #7
Kefirrr
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 53
По умолчанию

Doober, спасибо, что разъяснили в чем я заблуждалась.
Если не сложно, можете привести какие-нибудь примеры с Handle, чтобы иметь небольшое представление
Kefirrr вне форума Ответить с цитированием
Старый 01.10.2014, 17:26   #8
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Поиск на листах Автокада внедренных листов Excel,открытие их по очереди.
Вложения
Тип файла: txt Open_Excel.txt (1.7 Кб, 156 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 01.10.2014, 22:55   #9
Kefirrr
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 53
По умолчанию

Doober, простите, что вновь к Вам обращаюсь, надеюсь вы подскажите в чем ошибка.
у меня есть файл с несколькими блоками, эти блоки мне нужно расположить определенным образом. я для каждого блока прописываю нужную координату, а затем(пользуясь кодом, который вы подсказали) хочу переместить на свое место. Все работает, но почему-то некоторые блоки наслаиваются на другие блоки (хотя их координаты разнятся).
Я решила сделать промежуточное перемещение, чтобы проанализировать какие блоки не туда перемещаются,но и при промежуточном такая же фигня получается.

Если не сложно- посмотрите плиз. У меня есть предположение, что дело в самих блоках, но что именно с ними, не знаю
Вложения
Тип файла: zip move_blocs_err.zip (232.6 Кб, 21 просмотров)
Kefirrr вне форума Ответить с цитированием
Старый 02.10.2014, 04:20   #10
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

У вас ошибка есть,нижние блоки остаются на местах.
Подкрасил повторы красным.
С вашего разрешения удалил лишние листы и модули с кодом.
Применил свой подход.
Я долго не мог понять,что должно в итоге получиться.
В результате отсортировал блоки по индексу.
И немного уменьшил количество сторок кода
Вы такой результат ожидали?
Вложения
Тип файла: rar move_block_NO_ошибка.rar (76.9 Кб, 33 просмотров)
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 02.10.2014 в 16:44.
doober вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Совместимость Excel 2007 VBA - Excel 2010 VBA Genas Microsoft Office Excel 2 28.11.2012 15:33
VBA autocad БД динамичных блоков shutup Фриланс 2 05.12.2011 11:23
по VBA, используя МАКРОРЕКОДЕР! avensis Помощь студентам 3 11.06.2011 08:23
по VBA, используя МАКРОРЕКОДЕР! avensis Microsoft Office Excel 6 11.06.2011 08:13
Чертежи в автокаде Lemo Фриланс 4 02.06.2010 06:37