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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2017, 09:33   #1
Alexandra3
 
Регистрация: 11.11.2016
Сообщений: 5
По умолчанию Удаление блоков по названию в dwg файле средствами vba excel

Здравствуйте!
Код:
    Set acadApp = New AcadApplication
    Set acadDoc = acadApp.Documents.Open(objFile)
    Set oBlocks = acadDoc.Blocks       'коллекция блоков
    n = acadDoc.Blocks.Count            'общее количество блоков в файле

For i = 0 To n - 1
If oBlocks(i).Name = "8999" Or oBlocks(i).Name = "159159" Then 
 oBlocks(i).Delete
    End If
Next i
В строке
Код:
oBlocks(i).Delete
возникает ошибка:
Run-time error '-2145386240 (80200100)'
На объект имеется ссылка

Подскажите, пожалуйста, как правильно удалить блок? как удалить ссылки на него?
Alexandra3 вне форума Ответить с цитированием
Старый 23.06.2017, 09:40   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Alexandra3 Посмотреть сообщение
возникает ошибка:
Run-time error '-2145386240 (80200100)'
На объект имеется ссылка
абсолютно никогда не работал с ACAD приложениями, тем более, из VBA Excel

но, возможно, Вы делаете типичную ошибку - удаление в прямом цикле, когда количество элементов изменяется в процессе цикла.

избежать этого можно переписав цикл FOR на цикл WHILE или использовать обратный цикл FOR
вот так попробуйте:

Код:
For i = n-1 To 0 Step -1
   If oBlocks(i).Name = "8999" Or oBlocks(i).Name = "159159" Then 
      oBlocks(i).Delete
  End If
Next i
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.06.2017, 09:49   #3
Alexandra3
 
Регистрация: 11.11.2016
Сообщений: 5
По умолчанию

Спасибо, но не помогло, к сожалению.
Alexandra3 вне форума Ответить с цитированием
Старый 23.06.2017, 10:47   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ну, тогда извините.

похоже, что так блоки удалять нельзя.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.06.2017, 08:33   #5
Alexandra3
 
Регистрация: 11.11.2016
Сообщений: 5
По умолчанию

Если кому-то пригодится, нашла решение:

Код:
    Set acadApp = New AcadApplication
    Set aws= acadApp.Documents.Open(objFile)
i = 0
While i < aws.Blocks.Count
   Set c = aws.Blocks.Item(i)

If c.Name = "3312312" Then
    While c.Count > 0
       c.Item(0).Delete
     Wend
   End If
  i = i + 1
aws.Close saveChanges:=True
Wend
Alexandra3 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перемещение блоков в автокаде используя excel vba Kefirrr Microsoft Office Excel 11 04.10.2014 19:55
Экспорт из excel в базу MySQL средствами VBA riko_ltd Microsoft Office Excel 5 18.06.2013 01:50
Разделить значения таблицы в документе word из excel средствами vba xamillion Microsoft Office Word 5 07.11.2010 19:25
Запуск какой либо Windows-программы из Excel средствами VBA kovalevskivf Microsoft Office Excel 3 21.05.2009 15:14
Как средствами VBA экспортировать данные из Excel в Word? Pavel_Ine Microsoft Office Excel 3 20.04.2009 14:14