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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2014, 22:56   #1
bel62
Пользователь
 
Регистрация: 20.07.2012
Сообщений: 17
По умолчанию Внедрённый рисунок в Excel 2010 и 2013

С другой программы через скрипт внедряю в вновь создаваемую книгу Еxcel 2007 рисунок типа WMF или JPEG. Затем исходный рисунок удаляется с компьютера. В Еxcel 2007 всё внедрённое сохраняется.
Почему то же самое невозможно сделать для Excel 2010 и 2013, то есть остается связь с источником рисунка. После удаления исходного рисунка с компьютера, теряется и внедрённый рисунок в Excel 2010 и 2013.

Последний раз редактировалось bel62; 29.01.2014 в 23:11.
bel62 вне форума Ответить с цитированием
Старый 30.01.2014, 00:17   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а посмотрите в свойства рисунка, возможно внедряется не сам рисунок а ссылка на него, и возможно этим можно управлять.

это мысли вслух. я остановился на 2007, следующих офисов не видел.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 01.02.2014, 10:11   #3
bel62
Пользователь
 
Регистрация: 20.07.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
а посмотрите в свойства рисунка, возможно внедряется не сам рисунок а ссылка на него, и возможно этим можно управлять.

это мысли вслух. я остановился на 2007, следующих офисов не видел.
Так и есть. В 2010 и 2013 внедряется не сам рисунок а ссылка на него, а в 2007 внедряется сам рисунок. Думаю что-то в установочных файлах Excel надо менять. Но в каких?
bel62 вне форума Ответить с цитированием
Старый 01.02.2014, 15:08   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Так устроены новые версии Excel
Просто макрос надо немного другой:
http://excelvba.ru/code/PastePictures#comment-3126

Цитата:
Для Excel 2010 нужен другой способ вставки картинок, более сложный: не Pictures.Insert, а Shapes.AddPicture

Код:
Sub ВставкаКартинкиВВыделенныйДиапазонЯчеек()
    PicLocation = Application.GetOpenFilename("Image Files (*.jpg),*.jpg", , "Select Image File", , False)
    If PicLocation = False Then Exit Sub        ' если отказ от выбора файла

    With ActiveSheet.Shapes.AddPicture(PicLocation, msoFalse, msoCTrue, 0, 0, 0, 0)
        .Top = Selection.Top
        .Left = Selection.Left
        .Width = Selection.Width
        .Height = Selection.Height
    End With
End Sub
Перед использованием этого макроса, выделите диапазон ячеек, куда будет вставлена картинка
А если надоест макросы писать, - можно воспользоваться готовым решением (моей надстройкой для вставки картинок, которая корректно вставляет любые картинки в любой версии Excel):
http://excelvba.ru/programmes/PastePictures
EducatedFool вне форума Ответить с цитированием
Старый 01.02.2014, 18:47   #5
bel62
Пользователь
 
Регистрация: 20.07.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Так устроены новые версии Excel
Просто макрос надо немного другой:
[B][url]http://excelvba.ru/code/PastePictures#comment-3126[/urlB]

Вот у меня скрипт для 2007. Как будет он выглядеть для 2010 (с помощью Shapes.AddPicture)?

Function InsertJPEGPicture(szJPEGPath, WScale)
Dim lWscale
Dim Aspect
Dim Shift

lWscale = Eval(WScale)*1.0

' Привяжемся к верхнему левому углу
rr="A2"
ObjExc.ActiveSheet.PageSetup.Orient ation = 2
objExc.ActiveSheet.Range(rr).Select
Set r1 = objExc.Range("A2:O33")
Set a = ObjExc.ActiveSheet.Pictures.Insert( szJPEGPath)
a.ShapeRange.LockAspectRatio = 0'WScale
a.ShapeRange.Height = r1.Height
a.ShapeRange.Width = r1.Width
Aspect = r1.Height / r1.Width

If lWscale < Aspect Then
a.ShapeRange.ScaleHeight (lWscale/Aspect), msoFalse, msoScaleFromTopLeft
a.ShapeRange.ScaleHeight (1.1), msoFalse, msoScaleFromTopLeft
a.ShapeRange.ScaleWidth (0.9), msoFalse, msoScaleFromTopLeft
a.ShapeRange.IncrementLeft (r1.Width*(0.1)/2)
Else
Shift = (r1.Width-r1.Width*(Aspect/lWscale))/2
a.ShapeRange.ScaleWidth (Aspect/lWscale), msoFalse, msoScaleFromTopLeft
a.ShapeRange.IncrementLeft Shift
End If

End Function
bel62 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Microsoft Spy++ 2010-2013 beegl Софт 4 19.10.2018 13:45
Помогите исправить ошибку с Excel 2013 Alexandr17 Microsoft Office Excel 4 28.12.2013 20:33
Проблема с открытием другой книги с помощью макроса в excel 2013 roborrr Microsoft Office Excel 11 18.10.2013 10:41
Не вставить рисунок в Word 2007-2010 Tongo Microsoft Office Word 0 05.01.2010 20:24