Есть столбец в каждой ячейке кроме 1-й есть рисунок, каждый рисунок прикреплен как связь, требуется вставить рисунок (именно "Вставкой" - добавить в тело файла). В VBA мало понимаю, но записав макрос с вырезанием и вставкой одного рисунка получил:
Код
Sub Макрос1()
ActiveSheet.Shapes.Range(Array("Рисунок 2")).Select
Selection.Cut
Range("G2").Select
ActiveSheet.Pictures.Paste.Select
End Sub
но не знаю как теперь переходить к следующему рисунку автоматом.... подскажите как можно это выполнить. Все картинки также находятся в столбце G со второй ячейки.
Sub Макрос1()
lRow = Cells(Rows.Count, "G").End(xlUp).Row
For I = 2 To lRow
With ActiveSheet
.Shapes.Range(Array("Рисунок " & I)).Cut
.Range("G" & I).Select
.Pictures.Paste.Select
End With
Next
End Sub
Согласие есть продукт при полном непротивлении сторон
Хотя, как я помню - старые картинки необходимо же удалить после копирования? Значит скорее подойдет такой код:
Код
Sub CopyPics()
Dim oSh As Shape
Dim arr(), i As Long
ReDim arr(0 To ActiveSheet.Shapes.Count - 1)
For Each oSh In ActiveSheet.Shapes
arr(i) = oSh.Name
i = i + 1
Next
ActiveSheet.Shapes(1).TopLeftCell.Select
ActiveSheet.DrawingObjects.Copy
ActiveSheet.Paste
ActiveSheet.Shapes.Range(arr).Delete
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Требуется именно ActiveSheet.Pictures.Paste.Select, так как таким способом мы помещаем рисунки в тело файла, по вашему примеру получается как я понял выделить все объекты и вставить как есть.., если поменять ActiveSheet.Paste на ActiveSheet.Pictures.Paste.Select склеваем все рисунки в один, так не подходит
ActiveSheet.Paste как я понимаю просто выполняет ctrl+v, вставляя просто связь, так как картинки вставлены как связь, а ActiveSheet.Pictures.Paste.Select - специальная вставка рисунка, которая заставляет запихать рисунок во внутрь файла xls
Вы не пробовали код-то выполнить на реальном файле? Все на догадках? Или уже опробовали? Просто если Вы догадки за реальность выдаете - зачем нам пытаться дальше что-то изобретать, чтобы дать решение, которое устроит Вас исключительно по Вашим догадкам, а не по реальному выполнению задачи?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
проверял, там сверху есть файл, при выполнении макроса, который вы предложили, путем его сохранения как xlsx, внутри него нет рисунков. У Вас получилось? теперь дошло я то высылаю файл в котором будут указаны связи, рисунков Вы не увидите... поправьте связи на какое нибудь свое изображение и выполните макрос, пожалуйста
А откуда они у меня будут? Они у меня вообще никаким копированием не отображаются. Ни ручным, ни макросом. Потому что у них нет вообще связи с реальными ссылками.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
понял vikttur, The_Prist поправьте связи на какое нибудь свое изображение и выполните макрос, пожалуйста
The_Prist давайте я попытаюсь объяснить более понятно, в документе находится прайс с товарами, создан столбец в котором находятся рисунки на против каждой строки с товаром, данные рисунки отображаются при помощи связи. Требуется при выполнении макроса заменить связи на привязку рисунков по связям к телу файла, единственное решение которое мною было найдено это специальная вставка рисунка. Не много покопавшись понял что есть еще один способ привязать рисунки...
первый столбец таблицы содержит названия файлов изображений, может есть способ экспортировать изображения?
Так не вижу проблем сделать цикл на основе предложенных решений:
Код
Sub CopyPics()
Dim oSh As Shape
Dim arr(), i As Long
ReDim arr(0 To ActiveSheet.Shapes.Count - 1)
For Each oSh In ActiveSheet.Shapes
arr(i) = oSh.Name
i = i + 1
oSh.Copy
oSh.TopLeftCell.Select
ActiveSheet.Pictures.Paste
Next
ActiveSheet.Shapes.Range(arr).Delete
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...