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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2014, 14:20   #1
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию Копирование внедрённых объектов

Можно ли как-то средствами VBA скопировать внедрённый объект (в моём случае из автокада, и это важно) вместе с областью или отдельно с одного листа на другой?
(подразумевается что листов будет много и с каждого нужно копировать эти объекты)
Во вложении с листа 2 нужно скопировать на лист 1
exsampl_copy.zip
who вне форума Ответить с цитированием
Старый 17.09.2014, 15:30   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Можно.
Алгоритм таков.
Находите внедренный объект,получаете его хендл,через командную строку открываете файл,подключаетесь к нему через GetObject,работаете с объектной моделью Автокада.
Задача сложная.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 17.09.2014, 15:43   #3
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию

Мдя... такое я точно не сделаю. Спасибо.
who вне форума Ответить с цитированием
Старый 17.09.2014, 19:20   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Как оказалось,я вас понял не правильно.
Копирование можно элементарно сделать,да и документ открыть не проблема.С автокада открыть внедренный объект сложнее
Код:
Sub PasteAutoCAD()
    Dim Донор As Worksheet, Потребитель As Worksheet
    Set Донор = ThisWorkbook.Worksheets("Изделие 1")
    Set Потребитель = ThisWorkbook.Worksheets("Титульный лист")

    Dim Sh As Shape
    For Each Sh In Донор.Shapes
        If InStr(1, Sh.OLEFormat.progID, "AutoCAD.Drawing", vbTextCompare) > 0 Then
            Sh.Copy
            With Потребитель
                .Activate
                .Range("B10").Select'Ячейка для вставки
                .Paste
            End With
        End If
    Next

End Sub

Sub OpenAutoCAD()
   Dim Донор As Worksheet, Sh As Shape
    Set Донор = ThisWorkbook.Worksheets("Изделие 1")
 
    For Each Sh In Донор.Shapes
        If InStr(1, Sh.OLEFormat.progID, "AutoCAD.Drawing", vbTextCompare) > 0 Then
            Sh.Select
         Selection.Verb Verb:=xlPrimary
        End If
    Next
    Set AppAutoCAD = GetObject(, "AutoCAD.Application.19")
    Set DocAutoCAD = AppAutoCAD.Activedocument
    Set ModelSpace=DocAutoCAD.ModelSpace
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 18.09.2014, 09:25   #5
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
Вопрос

честно говоря я нашёл своё решение, включив запись макроса и определив, как "обзывает" эти объекты сам excel. переименовав их при помощи тогоже VBA:
Код:
Sheets(3).Shapes("Object 32").Name = "Izdelie_1"
и все остальные 9 листов и изделий
(имена вроде не меняются со временем, если их не удалять и не вставлять новые)
копирую их с проверкой наличия на целевом листе:
Код:
On Error Resume Next
Set obj = Sheets(1).Shapes("Izdelie_1")
If obj Is Nothing Then
    Sheets(3).Shapes("Izdelie_1").Copy
    Sheets(1).Range("B13").Select
    Sheets(1).Paste
End If
Set obj = Sheets(1).Shapes("Izdelie_2")
If obj Is Nothing Then
    Sheets(4).Shapes("Izdelie_2").Copy
    Sheets(1).Range("B25").Select
    Sheets(1).Paste
End If
Set obj = Sheets(1).Shapes("Izdelie_3")
If obj Is Nothing Then
    Sheets(5).Shapes("Izdelie_3").Copy
    Sheets(1).Range("B37").Select
    Sheets(1).Paste
End If
    'Stop
Set obj = Sheets(1).Shapes("Izdelie_4")
If obj Is Nothing Then
    Sheets(6).Shapes("Izdelie_4").Copy
    Sheets(1).Range("B49").Select
    Sheets(1).Paste
End If
Set obj = Sheets(1).Shapes("Izdelie_5")
If obj Is Nothing Then
    Sheets(7).Shapes("Izdelie_5").Copy
    Sheets(1).Range("B61").Select
    Sheets(1).Paste
End If
Set obj = Sheets(1).Shapes("Izdelie_6")
If obj Is Nothing Then
    Sheets(8).Shapes("Izdelie_6").Copy
    Sheets(1).Range("B73").Select
    Sheets(1).Paste
End If
Set obj = Sheets(1).Shapes("Izdelie_7")
If obj Is Nothing Then
    Sheets(9).Shapes("Izdelie_7").Copy
    Sheets(1).Range("B85").Select
    Sheets(1).Paste
End If
Set obj = Sheets(1).Shapes("Izdelie_8")
If obj Is Nothing Then
    Sheets(10).Shapes("Izdelie_8").Copy
    Sheets(1).Range("B97").Select
    Sheets(1).Paste
End If
Set obj = Sheets(1).Shapes("Izdelie_9")
If obj Is Nothing Then
    Sheets(11).Shapes("Izdelie_9").Copy
    Sheets(1).Range("B109").Select
    Sheets(1).Paste
End If
Set obj = Sheets(1).Shapes("Izdelie_10")
If obj Is Nothing Then
    Sheets(12).Shapes("Izdelie_10").Copy
    Sheets(1).Range("B121").Select
    Sheets(1).Paste
End If
только что-то с проверкой пока не получается.
без проверки копируется

хотя и с этим разобрался добавив к каждой проверке obj1, obj2 и т.д...
просьба сильно не пинать, я фактически самоучка (только Delpy 5 вроде в универе лет 11-12 назад)

Последний раз редактировалось who; 18.09.2014 в 09:39.
who вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование фигур(объектов) из Excel в Word c3Tpeucep Microsoft Office Excel 4 17.12.2012 22:25
копирование объектов xrob Общие вопросы Delphi 2 12.06.2011 20:51
Копирование объектов из WORD dgleg Общие вопросы Delphi 0 28.12.2010 15:35
Копирование объектов в Multithreading exploys Общие вопросы C/C++ 4 29.11.2010 10:41
Копирование и преобразование объектов joker Общие вопросы Delphi 1 23.03.2008 14:47