| 
| Вставка картинок и изображений в ячейки листа Excel   Макросы VBA Excel Работа с диапазонами ячеек и листами Работа со звуком и изображениями  
 |  Требуется макросом поместить изображение (картинку) на лист Excel? Используйте функцию ВставитьКартинку, которая позволит вам вставить картинку в выбранную ячейку (или диапазон ячеек). При вызове функции можно задать дополнительные дополнительные параметры, указав, следует ли подгонять картинку (или ячейку) по высоте и ширине. Если вам требуется вставлять много изображений на лист Excel, - то вам поможет надстройка, позволяющая производить поиск изображений в заданной папке, и производить вставку картинок в ячейки или примечания Кроме того, надстройка для вставки изображений в Excel  умеет загружать картинки из интернета (по ссылкам в таблице Excel) Бесплатно скачать надстройку вставки картинок в Excel  В этом примере демонстрируются возможные варианты применения функции вставки картинок: Sub ПримерВставкиИзображенийНаЛист()       ПутьКФайлуСКартинками = "D:\BMP\AboutForm.jpg"    ' полный путь к файлу изображения 
     ' вставка картинки в ячейку A5 (размеры картинки и ячейки не меняются)     ВставитьКартинку Cells(5, 1), ПутьКФайлуСКартинками        ' вставка картинки в ячейку F5 (ячейка подгоняется по ШИРИНЕ под картинку)     ВставитьКартинку Cells(5, 6), ПутьКФайлуСКартинками, True       ' вставка картинки в ячейку E1 (ячейка подгоняется по ВЫСОТЕ под картинку)     ВставитьКартинку [e1], ПутьКФайлуСКартинками, , True       ' вставка картинки в ячейку F2 (ячейка принимает размеры картинки)     ВставитьКартинку Range("F2"), ПутьКФайлуСКартинками, True, True      ' =========================================     ' вставка картинки в ячейку F5 (картинка подгоняется по ШИРИНЕ под ячейку)     ВставитьКартинку Cells(5, 6), ПутьКФайлуСКартинками, True, , True       ' вставка картинки в ячейку E1 (картинка подгоняется по ВЫСОТЕ под ячейку)     ВставитьКартинку [e1], ПутьКФайлуСКартинками, , True, True       ' вставка картинки в диапазон a2:e3 (картинка вписывается в диапазон)     ВставитьКартинку [a2:e3], ПутьКФайлуСКартинками, True, True, True   End Sub А вот и сама функция (скопируйте этот код в стандартный модуль, чтобы иметь возможность вставки картинок одной строкой кода из любого макроса): Sub ВставитьКартинку(ByRef PicRange As Range, ByVal PicPath As String, _                      Optional ByVal AdjustWidth As Boolean, _                      Optional ByVal AdjustHeight As Boolean, _                      Optional ByVal AdjustPicture As Boolean = False)     ' ==========  функция получает в качестве параметров:  ====================     ' PicRange - прямоугольный диапазон ячеек, поверх которого будет расположено изображение     ' PicPath - полный путь к файлу картинки (файл в формате JPG, BMP, PNG, и т.д.)     ' AdjustWidth - если TRUE, то включен режим подбора ширины (подгонка по высоте)     ' AdjustHeight - если TRUE, то включен режим подбора высоты (подгонка по ширине)     ' AdjustPicture - если TRUE, то подгоняются размеры картинки под ячейку,     '                 если FALSE (по умолчанию), то изменяются размеры ячейки 
     On Error Resume Next: Application.ScreenUpdating = False     ' вставка изображения на лист     Dim ph As Picture: Set ph = PicRange.Parent.Pictures.Insert(PicPath)     ' совмещаем левый верхний угол ячейки и картинки     ph.Top = PicRange.Top: ph.Left = PicRange.Left       K_picture = ph.Width / ph.Height    ' вычисляем соотношение размеров сторон картинки     K_PicRange = PicRange.Width / PicRange.Height    ' вычисляем соотношение размеров сторон диапазона ячеек 
     If AdjustPicture Then    ' ПОДГОНЯЕМ РАЗМЕРЫ ИЗОБРАЖЕНИЯ под ячейку (оптимальный вариант) 
         ' если AdjustWidth=TRUE, то высоту не трогаем - изменяем ширину         If AdjustWidth Then ph.Width = PicRange.Width: ph.Height = ph.Width / K_picture           ' если AdjustHeight=TRUE, то ширину не трогаем - изменяем высоту         If AdjustHeight Then ph.Height = PicRange.Height: ph.Width = ph.Height * K_picture           ' AdjustWidth=TRUE и AdjustHeight=TRUE: вписываем картинку в ячейку (без соблюдения пропорций)         If AdjustWidth And AdjustHeight Then ph.Width = PicRange.Width: ph.Height = PicRange.Height         Else    ' ИЗМЕНЯЕМ РАЗМЕРЫ ЯЧЕЙКИ под размеры изображения (нежелательно при вставке НЕСКОЛЬКИХ картинок...) 
         If AdjustWidth Then    ' если AdjustWidth=TRUE, то высоту не трогаем - изменяем ширину             PicRange.Cells(1).ColumnWidth = PicRange.Cells(1).ColumnWidth * ph.Width / PicRange.Cells(1).Width             While Abs(PicRange.Cells(1).Width - ph.Width) > 0.1    ' точный подбор ширины ячейки                 PicRange.Cells(1).ColumnWidth = PicRange.Cells(1).ColumnWidth - 0.2 * (PicRange.Cells(1).Width - ph.Width)             Wend         End If           If AdjustHeight Then    ' если AdjustHeight=TRUE, то ширину не трогаем - изменяем высоту             PicRange.Cells(1).RowHeight = PicRange.Cells(1).RowHeight * ph.Height / PicRange.Cells(1).Height             While Abs(PicRange.Cells(1).Height - ph.Height) > 0.1    ' точный подбор высоты ячейки                 PicRange.Cells(1).RowHeight = PicRange.Cells(1).RowHeight - 0.2 * (PicRange.Cells(1).Height - ph.Height)             Wend         End If       End If End Sub |