Автоматическая загрузка изображений и ссылок в Excel через VBA
Автоматическая загрузка изображений и ссылок в Excel через VBA
В этой статье разберём, как автоматизировать заполнение прайс-листа в Microsoft Excel с помощью VBA:
- загружать изображения по URL;
- вставлять картинки в ячейки;
- автоматически подгонять размер;
- добавлять гиперссылки к названиям товаров;
- сохранять изображения внутри файла Excel для работы без интернета.
В итоге получится аккуратный каталог товаров прямо внутри Excel.
В этой статье разберём, как автоматизировать заполнение прайс-листа в Microsoft Excel с помощью VBA:
- загружать изображения по URL;
- вставлять картинки в ячейки;
- автоматически подгонять размер;
- добавлять гиперссылки к названиям товаров;
- сохранять изображения внутри файла Excel для работы без интернета.
В итоге получится аккуратный каталог товаров прямо внутри Excel.
Что делает скрипт
Скрипт выполняет следующие действия:
| Столбец | Содержимое |
| B | Название товара |
| E | URL изображения |
| F | URL страницы товара |
После запуска:
- картинка вставляется в столбец D
- название в столбце B становится кликабельной ссылкой
- изображения автоматически масштабируются до 50×50
- картинки сохраняются внутри файла Excel
Подготовка Excel
1. Открыть редактор VBA
Нажмите:
ALT + F11
2. Создать модуль
В меню:
Insert → Module
3. Вставить код
В открывшееся окно вставьте VBA-скрипт.
Sub InsertImages_And_Hyperlinks()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim imageUrl As String
Dim linkUrl As String
Dim filePath As String
Dim http As Object
Dim stream As Object
Dim pic As Shape
Dim shp As Shape
Dim boxSize As Double
boxSize = 50
Set ws = ActiveSheet
' ? ускорение Excel
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
' ? удаляем старые картинки в колонке D
For Each shp In ws.Shapes
If Not Intersect(shp.TopLeftCell, ws.Columns("D")) Is Nothing Then
shp.Delete
End If
Next shp
' Последняя строка
lastRow = ws.Cells(ws.Rows.Count, "E").End(xlUp).Row
' Размер колонки D
ws.Columns("D").ColumnWidth = 8
For i = 2 To lastRow
' =========================
' ? КАРТИНКА
' =========================
imageUrl = Trim(ws.Cells(i, "E").Value)
If imageUrl <> "" Then
filePath = Environ("TEMP") & "\img_" & i & ".jpg"
On Error Resume Next
' загрузка картинки
Set http = CreateObject("MSXML2.XMLHTTP.6.0")
http.Open "GET", imageUrl, False
http.Send
If http.Status = 200 Then
' сохранение временного файла
Set stream = CreateObject("ADODB.Stream")
stream.Type = 1
stream.Open
stream.Write http.ResponseBody
stream.SaveToFile filePath, 2
stream.Close
' вставка картинки
Set pic = ws.Shapes.AddPicture( _
Filename:=filePath, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=ws.Cells(i, "D").Left, _
Top:=ws.Cells(i, "D").Top, _
Width:=-1, _
Height:=-1)
With pic
.LockAspectRatio = msoTrue
.Placement = 1
' размер строки
ws.Rows(i).RowHeight = boxSize
' вписывание в 50x50
If .Width > .Height Then
.Width = boxSize
Else
.Height = boxSize
End If
' центрирование
.Left = ws.Cells(i, "D").Left + (ws.Cells(i, "D").Width - .Width) / 2
.Top = ws.Cells(i, "D").Top + (ws.Cells(i, "D").Height - .Height) / 2
End With
' удаление временного файла
Kill filePath
End If
On Error GoTo 0
End If
' =========================
' ? ССЫЛКА НА ТОВАР
' =========================
linkUrl = Trim(ws.Cells(i, "F").Value)
If linkUrl <> "" Then
On Error Resume Next
ws.Cells(i, "B").Hyperlinks.Delete
On Error GoTo 0
ws.Hyperlinks.Add _
Anchor:=ws.Cells(i, "B"), _
Address:=linkUrl, _
TextToDisplay:=ws.Cells(i, "B").Value
End If
Next i
' возврат Excel
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
MsgBox "Готово!"
End Sub
Как работает скрипт
1. Загрузка изображения
Set http = CreateObject("MSXML2.XMLHTTP.6.0")
http.Open "GET", imageUrl, False
http.Send
Этот блок выполняет HTTP-запрос и скачивает изображение по URL.
2. Сохранение файла
Set stream = CreateObject("ADODB.Stream")
stream.Type = 1
stream.Open
stream.Write http.ResponseBody
Изображение сохраняется во временный файл.
3. Вставка картинки в Excel
Set pic = ws.Shapes.AddPicture(...)
Картинка вставляется как объект Shape.
Ключевые параметры:
| Параметр | Значение |
| LinkToFile | False |
| SaveWithDocument | True |
Это означает:
- изображение встраивается в Excel
- файл работает без интернета
4. Масштабирование изображения
If .Width > .Height Then
.Width = boxSize
Else
.Height = boxSize
End If
Изображение автоматически вписывается в квадрат 50×50 без искажений.
5. Создание гиперссылки
ws.Hyperlinks.Add _
Anchor:=ws.Cells(i, "B"), _
Address:=linkUrl
Название товара становится кликабельной ссылкой.
Как запускать скрипт
В Excel:
ALT + F8
Выберите:
InsertImages_And_Hyperlinks
Нажмите:
Run
Возможные ошибки
Картинки не вставляются
Проверьте:
- URL должен вести напрямую на JPG/PNG
- сайт не должен блокировать загрузку
- интернет должен быть доступен
Макросы отключены
Включите:
Файл → Параметры → Центр управления безопасностью → Макросы
Как улучшить скрипт
Можно дополнительно реализовать:
- обрезку изображений в квадрат;
- сжатие картинок;
- кнопку «Обновить каталог»;
- ускоренную загрузку для 10 000+ товаров;
- автоматическое обновление по расписанию.
Итог
После внедрения этого VBA-скрипта Excel превращается в полноценный товарный каталог:
- изображения загружаются автоматически;
- ссылки создаются автоматически;
- всё хранится внутри файла;
- прайс можно отправлять другим людям без потери картинок.
Это отличный способ автоматизировать каталоги, прайсы и товарные таблицы без стороннего ПО.

