Картинка в примечании к ячейке

Хотите использовать фотографию или рисунок в качестве примечания к ячейке? Например, вот так:

picture-in-comment1.png

Это может быть удобно при создании списков людей с их фотографиями, прайс-листов с изображениями товаров и т.п.

Способ 1. Одиночная вставка

  1. Щелкните по ячейке, в которую будем вставлять примечание правой кнопкой мыши и выберите в контекстном меню Добавить примечание (Add comment).
  2. Чтобы примечание во время настройки постоянно не пропадало, щелкните по ячейке правой кнопкой мыши и выберите команду Отобразить/Скрыть примечание (Show/Hide Comment).
  3. Щелкните правой кнопкой мыши по штрихованной рамке вокруг примечания (штриховка при этом должна превратиться в точки) и выберите в контекстном меню команду Формат примечания (Format Comment).
  4. В открывшемся окне перейдите на вкладку Цвета и линии (Colors and Lines) и из раскрывающегося списка Цвет (Color) выберите опцию Способы заливки (Fill Effects):

    picture-in-comment2.png

  5. В появившемся окне перейдите на вкладку Рисунок (Picture) и, щелкнув по кнопке Рисунок (Select Picture), выберите нужный файл с изображением. Дополнительно можно установить флажок Сохранять пропорции рисунка (Lock picture aspect ratio).
  6. Жмем ОК во всех окнах и, возможно, немного подгоняем размеры примечания, чтобы картинку было хорошо видно.

Способ 2. Вставка оптом

Как видно из первого способа, вставка одной картинки в одно примечание - процедура хоть и не сложная технически, но не очень-то быстрая. Поэтому для вставки картинок в массовых масштабах (например, изображений товаров в прайс) лучше использовать простой макрос. В качестве исходных данных примем, что у нас есть:

  • список наименований товаров в прайс-листе, к ячейкам которых мы и хотим добавить примечания
  • список путей к файлам изображений этих товаров (его можно, кстати, формировать тоже автоматически с помощью вот такого макроса).

Выглядит все это, допустим, так:

picture-in-comment3.png

Откройте редактор Visual Basic (сочетание клавиш Alt+F11), вставьте новый пустой модуль (меню Insert - Module) и скопируйте туда текст этого макроса:

Sub InsertPicturesInComments()

    Dim rngPics As Range, rngOut As Range
    Dim i As Long, p As String, w As Long, h As Long
    
    Set rngPics = Range("B1:B5")    'диапазон путей к картинкам
    Set rngOut = Range("A1:A5")     'диапазон вывода примечаний
    
    rngOut.ClearComments        'удаляем старые примечания
    
    'проходим в цикле по ячейкам
    For i = 1 To rngPics.Cells.Count
    
        p = rngPics.Cells(i, 1).Value       'считываем путь к файлу картинки
        w = LoadPicture(p).Width            'и ее размеры
        h = LoadPicture(p).Height
        
        With rngOut.Cells(i, 1)
            .AddComment.Text Text:=""       'создаем примечание без текста
            .Comment.Visible = True
            .Comment.Shape.Select True
        End With
        With rngOut.Cells(i, 1).Comment.Shape   'заливаем картинкой
            .Fill.UserPicture p
            .ScaleWidth 1, msoFalse, msoScaleFromTopLeft
            .ScaleHeight h / w * 1.8, msoFalse, msoScaleFromTopLeft     'корректируем размеры
        End With
    Next i
End Sub

Диапазоны rngPics и rngOut можно, естественно, заменить на свои.

Теперь осталось открыть окно управления макросами (Alt+F8) и запустить наш созданный макрос кнопкой Выполнить (Run). Результат будет примерно такой:

picture-in-comment4.png

Красота!

P.S.

  • Вставленные в примечания картинки и фотографии будут неизбежно утяжелять файл. При большом количестве изображений имеет смысл их заранее обработать (сжать до нужных размеров, оптимизировать цветовую гамму и разрешение) с помощью специальных программ.
  • Отобразить или скрыть сразу все примечания можно на вкладке Рецензирование - Показать все примечания (Review - Show all comments).
  • Удалить все примечания из выделенных ячеек можно на вкладке Главная - Очистить - Примечания (Home - Clear - Comments).

Ссылки по теме

 



monstryuga
17.11.2012 18:57:20
Огромное спасибо, я такой списочек задвинул с изображениями, благодаря информации из этой статьи :)
Ольга
17.11.2012 18:57:42
Огромной удачи тому, кто создал этот сайт! это просто спасение для начинающих екселяшек!
17.03.2019 09:43:11
Не только для начинающих0)
Мария
17.11.2012 18:58:13
ОГРОМНОЕ СПАСИБО!!!!ВСЕ пОЛУЧИЛОСЬ,мечта сбылась!
pvmail
17.11.2012 18:59:54
Возможно ли реализовать следующую задачу?
При вставке в новый лист скопированной ячейки, которая имеет примечание с рисунком, осуществлялся бы автоматический перенос и примечания.
Т.е. при вставке в новое место скопированных ячеек с текстом необходимо их графическое "отображение". Спасибо.
17.11.2012 19:00:23
Не очень понял в чем проблема - при копировании ячейки копируется и примечание. На крайний случай воспользуйтесь Специальной вставкой, чтобы скопировать примечания.
Илья
17.11.2012 19:04:13
Получил файл с картинками в примечаниях. Как эти картинки можно сохранить?
17.11.2012 19:05:47
Если это файл с расширением xlsx или xlsm, то переименуйте расширение в zip и откройте получившийся архив, а в нем папку xl\media. Там и будут все изображения.
Если это xls, то пересохраните его сначала в xlsx.
14.01.2013 11:47:00
Здравствуйте, Николай. Помогите, пожалуйста: в уже существующем прайсе нужно сделать, чтобы размер примечания подстраивался под оригинальный размер картинки и в дальнейшем не изменялся (после редактирования прайса приходится вручную восстанавливать нормальные размеры расползшихся или схлопнувшихся примечаний).  И ещё вопрос по поводу выше представленного макроса: можно, чтобы после указания исходной папки картинки сами подтягивались без указания пути для каждой (картинки названы точно так же, как товар в ячейке, куда вставляется примечание с картинкой)?
20.01.2013 21:06:27
Замените 14 строку
p = rngPics.Cells(i, 1).Value
на что-то похожее на:
p = "D:\Картинки\" & rngOut.Cells(i,1).Value & ".jpg"
Путь к папке с картинками и расширение нужно подставить свои.
21.02.2013 09:39:19
Скажите Николай
а можно добавить в Примечание данные из таблицы находящейся на другом листе. Объясню для чего это нужно. В таблице с данными находятся с десяток документов которые переодически обновляются. В ячейку где высвечивается Примечание необходимо вставить порядковый номер этих документов. Каждый раз прыгать с одной страницы на другую не совсем удобно. Помогите если это возможно.
Спасибо Георгий!
21.02.2013 22:44:30
Вставить таблицу (да еще и с обновлением) в примечание нельзя. Но ссылку на ячейку с порядковым номером с другого листа - почему бы нет?
18.03.2013 15:26:39
А можна (если можна, то как) сделать картинку в примечании к ячейке, стандартную для всего документа? То есть, вставляем сколько нужно примечаний, а картинка (одна и та же) прописывается в этой рабочей книги автоматически.
28.08.2013 08:42:45
Самый простой вариант - скопировать примечание с одной ячейки-образца на другие с помощью Специальной вставки (Ctrl + Alt + V)
19.04.2013 14:26:53
Николай, здравствуйте!
Макрос отлично работает, но я столкнулся с небольшой проблемой: скрипт так же добавляет примечание в следующую (пустую) после последней заполненной ячейки из диапазона, ругаясь при этом на строчку ".Fill.UserPicture p"
19.04.2013 21:38:17
Денис, мой макрос в приложенном файле точно ничего лишнего не добавляет - это уже ваших рук дело :)
У вас диапазоны точно правильно прописаны в 6 и 7 строчках? Различий в их размерах нет? Если не разберетесь сами, то шлите ваш файл мне на почту - посмотрю, ага?
15.05.2013 15:16:58
Николай, кажется, разобрался. Уже не помню как, к сожалению, вникнуть толком не удается - приходится сразу переключаться на другие задачи, все просто не помещается в голову. Спасибо Вам!
19.06.2013 01:49:37
Всем здравствуйте!
Прием классный. Но есть нюанс. А именно, что физический вес файла будет увеличиваться пропорционально увеличивающемуся суммарному весу загружаемых в него картинок. Для файла с сотней позиций это еще сносно, но если в прайсе несколько тысяч позиций...
А теперь, уважаемые знатоки, вопрос. Возможно ли запрограммировать макрос таким образом, чтобы при наведении курсора на ячейку с примечанием, макрос подгружал изображение из папки на сервере в интернете? А после завершения работы с файлом загруженные изображения просто удалялись бы с компьютера. Такое решение стало бы настоящей находкой для тех, кто рассылает прайсы с многокилометровой номенклатурой.
19.08.2013 12:21:48
Здравствуйте Николай!
Первый раз обращаюсь лично к Вам (до этого пользовался ссылками на Ваши советы). Можно ли в Excel 2007 установить самому место появления примечания, а не только справа вверху от соответствующей ячейки.
Спасибо!
28.08.2013 08:40:54
Без макросов - точно нет, только программированием перехватывать событие выделения ячейки и перемещать окно примечания в нужное место.
28.08.2013 01:09:48
Возможно ли запрограммировать макрос таким образом, чтобы при наведении курсора на ячейку с примечанием, макрос подгружал изображение из папки на сервере в интернете? А после завершения работы с файлом загруженные изображения просто удалялись бы с компьютера. Такое решение стало бы настоящей находкой для тех, кто рассылает прайсы с многокилометровой номенклатурой.
Николай, возможен ли такой вариант? Также очень интересует.
28.08.2013 05:56:59
А не проще уже тогда сам прайс в формате HTML со всплывающими картинками (rollover) сделать и рассылать ссылочку на него? :)
16.10.2013 10:22:18
Хочу поделиться своей надстройкой для быстрой вставки фото в примечание. Как можно это сделать?
17.10.2013 07:48:15
Можно выложить в раздел "Копилка Идей" на Форуме- мы для этого его и создавали.
31.12.2013 15:50:43
А вот как можно дополнить способ 1 пунком 1.1. Вставка одной картинки в примечание макросом
(думаю что этот код являлся бы промежуточным для перехода к более сложному варианту с
Sub test()
Dim s As String
s = Application.GetOpenFilename("Image Files (*.bmp;*.gif;*.jpg;*.jpeg)," & "*bmp;*gif;*.jpg;*.jpeg") ' - вызываем окно, в которой выберем нашу картинку
ActiveCell.AddComment.Text "Текст примечания"'- при необходимости можем написать текст примечания
ActiveCell.Comment.Shape.Fill.UserPicture s
End Sub 
29.01.2014 14:02:43
А как сделать так, чтобы не вылетала ошибка, если на какую то из моделей нет фото?
28.08.2014 09:38:32
Здравствуйте, уважаемые программисты!
Попробовал макрос, выдается ошибка:
Run time error '91'
Objekt variable or With block variable not found
Отсыл в макросе идет к строке:
.Comment.Visible = True
Подскажите, если не сложно где я не прав, сам вряд ли быстро разберусь?
Спасибо за помощь!
А как сделать следующее : я хочу чтобы картинка при разных условиях (к примеру отклонения от другой ячейки) появлялась разная. К примеру человек выполнил бонус - счастливая, не выполнил - печалька, ну конечно несколько между
09.12.2014 21:50:01
Ирина, я бы на вашем месте не мучился с макросами, а сделал это через проверку условий функцией ЕСЛИ с последующим выводом рожиц различной степени счастливости функцией СИМВОЛ по коду из какого-нибудь спец.шрифта вроде Windings или Webdings.
Спасибо за отличное решение!
А есть ли возможность сделать так, чтобы в одно примечание прицеплялась многокадровая gif-ка и кадры внутри примечания сменялись?
И еще: есть ли возможность, чтобы примечание формировалось только когда на ячейке стоит курсор (ячейка выделена) и удалялось после того, как перешли на другую ячейку.
И совсем как начинающий спрошу: какими командами можно управлять размерами такого примечания и его месторасположением относительно выделенной ячейки.
Заранее спасибо!
09.12.2014 21:55:04
1. Анимированные gif не поддерживаются - будет видно только первый кадр.
2. Автоматически создавать или удалять примечание при выделении ячейки можно только макросом, через обработку события выделения диапазона.
3. Например ActiveCell.Comment.Shape.ScaleWidth и ActiveCell.Comment.Shape.ScaleHeight. А вообще - справка вам в помощь, помнить все свойства всех объектов VBA нереально. Ставите в коде курсор на слово Comment и жмете F1 - увидите полное описание со всеми параметрами.
09.12.2014 18:39:07
Здраствуйте!
Как добавлять фото по одному в разные ячейки используя этот код

Sub test() Dim s As String s = Application.GetOpenFilename("Image Files (*.bmp;*.gif;*.jpg;*.jpeg)," & "*bmp;*gif;*.jpg;*.jpeg";) ' - вызываем окно, в которой выберем нашу картинку ActiveCell.AddComment.Text "Текст примечания"'- при необходимости можем написать текст примечания ActiveCell.Comment.Shape.Fill.UserPicture s End Sub
но чтобы формат фото в примечании был как в коде из статьи.
09.12.2014 21:56:03
Очевидно добавить в ваш макрос команды для форматирования высоты и ширины из последнего блока With...End With из моего макроса.
10.12.2014 20:05:59
получилось примерно так

Sub test_add_foto()
    Dim s As String
    Dim w As Long, h As Long
    
    s = Application.GetOpenFilename("Image Files (*.bmp;*.gif;*.jpg;*.jpeg)," & "*bmp;*gif;*.jpg;*.jpeg" _
    ' - âûçûâàåì îêíî, â êîòîðîé âûáåðåì íàøó êàðòèíêó
    
    ActiveCell.AddComment.Text "" '- ïðè íåîáõîäèìîñòè ìîæåì íàïèñàòü òåêñò ïðèìå÷àíèÿ
    ActiveCell.Comment.Shape.Fill.UserPicture s
    ActiveCell.Comment.Shape.ScaleWidth 1, msoFalse, msoScaleFromTopLeft
    ActiveCell.Comment.Shape.ScaleHeight 3, msoFalse, msoScaleFromTopLeft
    
End Sub
но при єтом не сохраняются пропорции
как єто исправить?
11.12.2014 10:42:31
Сергей, посмотрите 26-ю строчку в моем макросе - она как раз корректирует искажение пропорций, которое получается при обычной вставке.
11.12.2014 11:29:14
спасибо получилось вот код

Sub add_foto()
    Dim s As String
    Dim w As Long, h As Long
    
    s = Application.GetOpenFilename("Image Files (*.bmp;*.gif;*.jpg;*.jpeg)," & "*bmp;*gif;*.jpg;*.jpeg" _
    ' - âûçûâàåì îêíî, â êîòîðîé âûáåðåì íàøó êàðòèíêó
    
     w = LoadPicture(s).Width      'è åå ðàçìåðû
     h = LoadPicture(s).Height
    
    ActiveCell.AddComment.Text "" '- ïðè íåîáõîäèìîñòè ìîæåì íàïèñàòü òåêñò ïðèìå÷àíèÿ
    ActiveCell.Comment.Shape.Fill.UserPicture s
    ActiveCell.Comment.Shape.ScaleWidth 1, msoFalse, msoScaleFromTopLeft
    ActiveCell.Comment.Shape.ScaleHeight h / w * 1.8, msoFalse, msoScaleFromTopLeft     'êîððåêòèðóåì ðàçìåðû
    
End Sub
11.12.2014 12:27:30
Совет: когда копируете код макроса из редактора VBA ставьте русскую раскладку - тогда кириллица не превращается в крякозяблы :)
А вообще - спасибо за макрос, может кому пригодится.
06.03.2015 07:35:10
помогите пожалуйста, формат примечания и все стоп там нету вкладок вообще что делать ?
Коллеги добрый день. При работе с картинками возникла проблема.
Если удалять либо перемещать столбцы на листе слетают размеры картинки в примечании и вся работа идет на смарку.
Помогите что сделать или как изменить макрос???
08.05.2015 13:43:06
Добрый день!

Прошу помочь. Очень прошу.

Цель: Вставка в диапазон
Set rngOut = Range("A1:A5")  "диапазон вывода примечаний

НЕ примечания, а именно сами изображения.

Уровень знаний в VBA - методом "тыка"

Я удалил этот кусок:

With rngOut.Cells(i, 1)
           .AddComment.Text Text:=""       'создаем примечание без текста
           .Comment.Visible = True
           .Comment.Shape.Select True
       End With


НЕ могу изменить эту часть под свои нужды (вставка изображения в ячейку а не в примечание к ячейке)

       With rngOut.Cells(i, 1).Comment.Shape   'заливаем картинкой

           .Fill.UserPicture p
           .ScaleWidth 1, msoFalse, msoScaleFromTopLeft
           .ScaleHeight h / w * 2#, msoFalse, msoScaleFromTopLeft      'корректируем размеры
       End With


Очень прошу помочь. Заранее благодарен!
22.07.2015 10:35:22
Всем привет!
Спасибо создателю сайта. Очень облегчает жизнь.:)
Интересно! Можно ли автоматически добавлять картинку в ячейку, допустим по фамилии? Ввел фамилию в одну ячейку, а в соседней появилось фото!
Если есть нормальные решения, то интересно почитать.
16.07.2016 09:18:11
И у меня такой же интерес, надо вставить в ячейку изображение (логотип команды) по значению в определенной ячейке (название команды). Названия команд естественно будут меняться. Возможно ли сделать это только формулами ???
09.09.2016 02:29:05
Возможно ли в качестве пути использовать ссылку на картинку в интернете, то есть, чтобы вместо D\Товары\1.jpeg была ссылка на картинку?
Спасибо!
18.10.2016 13:08:59
Подскажите, как заставить макрос определять размеры картинок по гиперсылкам?
Если использовать исходный код, то ошибка "Fail not found".
Если закомментировать (см. ниже), то код отрабатывает, НО картинки в примечании расстянутые.
w = LoadPicture(p).Width            'и ее размеры
h = LoadPicture(p).Height
.ScaleWidth 1, msoFalse, msoScaleFromTopLeft
.ScaleHeight h / w * 1.8, msoFalse, msoScaleFromTopLeft     'корректируем размеры

Заранее спасибо!
30.11.2016 15:47:03
Кто-нибудь может подсказать? я нашел только платное дополнение (PastePictures.xla), которое может вставлять картинки в примечания с сохранением пропорций((
15.12.2016 16:51:16
Скажите пожалуйста, что нужно добавить в текст макроса чтобы не вылетала ошибка если нет картинки?
04.01.2017 16:38:47
Попробуйте написать второй строкой в макросе универсальное: On Error Resume Next
31.05.2017 16:27:40
 Не получается Microsoft excel для Mac версия 15.32
06.09.2017 00:47:23
Добрый вечер,

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

Спасибо
11.09.2017 08:04:18
Добрый день, подскажите как сделать Способ №1 в Excel версии 15.14, никак не могу найти окно формат примечания, помогите пожалуйста, заранее спасибо!
20.01.2018 07:13:45
Доброго времени суток! Подскажите пожалуйста как задать несколько диапазонов вывода примечаний

Изначальный код текста:
Set rngPics = Range ("B1:B5";)  диапазон путей к картинкам
Set rngOut = Range ("A1:A5";)  диапазон вывода примечаний


а мне нужен диапазон:
Set rngPics = Range (B1:B5;B8:B9;B11:B12;) - но простым путем перечисления диапазона макрос не работает
Set rngOut = Range  (A1:A5;A8:A9;A11:A12;)
10.02.2018 15:02:29
Здравствуйте!
Столкнулась с проблемой. Очень прошу помочь. Есть большой прайс. Есть ссылки на картинки. Надо сделать, чтобы вместо ссылок появились картинки.
Взяла Вашу обработку, но выдается ошибка на эти размеры
w = LoadPicture(p).Width
h = LoadPicture(p).Height
"can"t execute code in break mode"

Изучаю VBA методом тыка)
К понедельнику надо все сделать, вручную при всем желании  не успею(((
помогите пожалуйста
23.05.2018 11:29:16
Здравствуйте, Николай!
Огромное вам спасибо за этот супер макрос! Вы могли бы подсказать, как в макросе вставки картинок по одной
1) установить галочку "Сохранять пропорции рисунка"
2) установить размеры картинки побольше
27.03.2019 08:55:32
Доброго времени суток! Николай, задумка такая. у меня к ячейкам привязаны фото через примечания. не могу ни придумать, ни найти в форумах как мне фото из примечаний перенести на форму в Image. Смог только скопировать фото в буфер.  Может есть какой нибудь способ. Спасибо за помощь


If SafetyListRow.Range(3).Comment Is Nothing Then Exit Sub
  SafetyListRow.Range(3).Comment.Shape.Visible = True
   SafetyListRow.Range(3).Comment.Shape.CopyPicture
Наверх