Мне нужно было, чтобы макрос Excel вставлял изображение в Excel. Включил макро регистратор, вставил картинку. Но когда я использовал записанный код, изображение не появилось ни на каком другом компьютере. Вместо этого я получаю красный крестик там, где должно быть изображение.
Код, используемый для работы в Excel 2007 или более ранней версии. Но что-то изменилось в Excel 2010. Когда вы запускаете код для ActiveSheet.Pictures.Insert, Excel * не * вставляет изображение. Вместо этого он вставляет ссылку на изображение.
Конечно, когда вы запускаете код на своем компьютере, кажется, что все работает. Изображение появляется.

Но когда кто-то открывает книгу на другом компьютере, он получает красный крестик и сообщение о том, что изображение могло быть перемещено или переименовано.

Ну конечно изображения нет на компьютере моего менеджера. Я не просил Excel создавать ссылку на картинку. Я попросил Excel вставить картинку. Но записанный код вставляет ссылку на картинку.
Решение - перейти на другой код. Используя Shapes.AddPicture, вы можете указать LinkToFile:=msoFalse
. Вот код для использования:
Sub HowToInsertPicture() ' This code fails in 2010 or newer ' ActiveSheet.Pictures.Insert( _ ' "C:UsersBillDesktopPhotoPrintAll RocketaWalg180422-3.jpg.webp").Select NewFN = "C:UsersBillDesktopPhotoPrintAll RocketaWalg180422-3.jpg.webp" ActiveSheet.Shapes.AddPicture(Filename:=NewFN, _ LinkToFile:=msoFalse, _ SaveWithDocument:=msoTrue, _ Left:=1, Top:=1, Width:=140, Height:=195).Select End Sub
Смотреть видео
Стенограмма видео
Изучите Excel из подкаста, эпизод 2214: Действительно раздражающая ошибка VBA, когда вы пытаетесь вставить изображение.
Хорошо. Итак, это началось в Excel 2010. Недавно я снова обгорел.
Итак, я собираюсь вставить изображение в эту книгу, но я хочу записать это действие, чтобы я мог сделать это автоматически. Просмотр, макросы, макрос записывающего устройства, HowToInsertAPicture. Отлично. И я просто вставлю сюда картинку: иллюстрации, картинки, давайте выберем одну из наших фотографий ракеты и вставим. Хорошо, останови запись. Прекрасный. Теперь я избавлюсь от этого. Я хочу взглянуть на макросы, поэтому Alt + F8, HowToInsertAPicture, Edit, и там написано: ActiveSheet.Pictures.Insert, а затем путь к картинке. Хорошо. Да, звучит хорошо. И, по сути, у нас должно получиться запустить это. Итак, Alt + 8, HowToInsertAPicture и Run, и мы получаем картинку - это прекрасно. Пока я не сохраню эту книгу и не позволю вам скачать ее или отправить кому-нибудь еще, а затем изображение не изменится.Я вообще не появляюсь - все, что я получаю, это красный крестик со словами: «Эй, мы больше не можем найти картинку». Что вы имеете в виду, что не можете найти картинку? Я просил вас вставить картинку, а не ссылку на картинку. Но начиная с Excel 2010 этот записанный код фактически вставляет ссылку на изображение. И если я открою эту книгу где-нибудь на компьютере, у которого нет доступа к этому диску и этой картинке: красный X. Супер раздражает.
Хорошо. Итак, по какой-то причине в Excel 2010 вместо ActiveSheet.Pictures.Insert появилась новая функция - ActiveSheet.Shapes.AddPicture. Хорошо. И мы все еще можем указать имя файла, но затем эти дополнительные аргументы, которые у нас есть: LinkToFile = msoFalse - другими словами, не создавайте глупую красную ссылку - а затем SaveWithDocument: = msoTrue - что означает, что на самом деле поместите чертову картинку туда, и они могут указать, где она должна быть - слева, сверху …
Теперь, как нам определить высоту и ширину? Хорошо. Что ж, мы хотим изменить его размер пропорционально, верно? Итак, я собираюсь удерживать нажатой клавишу Shift, например, чтобы вернуться к менее чем одному экрану, заполненному данными, может быть, вот так вот. Это моя цель. Я хочу вставить изображение и получить луч такого размера с выбранным размером. Я вернусь к VBA Alt + F11, Ctrl + G для непосредственного окна, и я спрошу:? selection.width - это вопросительный знак, пробел, ширина точки выбора и вопросительный знак, высота точки выбора (? Selection.height). Хорошо, это говорит мне о 140 и 195 - так что ширина, 140 и 195, вот такие. Избавьтесь от непосредственного окна, а затем здесь мы удалим это и запустим код, и он фактически вставил его. Это правильный размер, его можно будет открыть, когда вы его загрузите,или я загружу это, если у вас нет доступа к исходному изображению.
Я понял, все меняется, пришлось изменить код. Но тот факт, что они не обновили средство записи макросов, а средство записи макросов выдало нам неверный код, не работает. Это очень раздражает.
Что ж, чтобы узнать больше о макросах, ознакомьтесь с этой книгой «Макросы VBA для Excel 2016», написанной Трейси Сирстад и мной. На самом деле у нас есть его версия для каждой версии, начиная с Excel 2003. Итак, что бы у вас ни было, при условии, что это Windows, есть версия для вас.
Хорошо, подведем итоги - это моя проблема. Я записал код для вставки изображения, и он создает ссылку на изображение, поэтому все, кому я отправляю книгу, не могут видеть изображение. Вместо этого я использую средство записи макросов, которое выполняет ActiveSheets.Shape.Picture, используйте этот новый ActiveSheet.Shapes.AddPicture. Или мы можем указать LinkToFile, нет; сохранить с документом, да; и тебе будет хорошо идти.
Что ж, привет, спасибо за просмотр, увидимся в следующий раз на другой сетевой трансляции от.
Скачать файл Excel
Чтобы загрузить файл Excel: vba-insert-picture-bug.xlsm
Часто средство записи макросов в Excel записывает неправильный код. С исправлением выше вы можете успешно вставлять изображения с помощью VBA.
Идея дня в Excel
Я попросил совета у моих друзей-мастеров Excel по поводу Excel. Сегодняшняя мысль задуматься:
«Excel - это инструмент для людей, которым приходится жить с последствиями».
Оз дю Солей