Недавно коллеги попросили помочь им с оформлением отчёта, в котором должно было быть приложение из кучи рисунков.
Рисунков было много, они лежали в отдельной папке и названия файлов рисунков в документе должны были быть оформлены в виде подписей к этим рисункам. Дополнительно, подписи к рисункам должны были быть пронумерованы и оформлены в соответствии с ГОСТом.
Делать это вручную муторно и долго, поэтому я написал небольшой скрипт, который сделает всю эту работу за пару секунд.
Private Sub vstavka_ris() Dim iDialog As FileDialog Dim FileItem As Object, ComItem As Object, ExtFile$ 'Выбираем папку с рисунками Set ComItem = CreateObject("Scripting.FileSystemObject") Set iDialog = Application.FileDialog(msoFileDialogFolderPicker) If Not iDialog.Show Then Exit Sub 'Добавляем рисунки из папки в документ For Each FileItem In ComItem.getfolder(iDialog.SelectedItems(1)).Files ExtFile = LCase(Mid(FileItem.Name, InStrRev(FileItem.Name, ".") + 1)) If ExtFile = "jpg" Or ExtFile = "jpeg" Or ExtFile = "bmp" _ Or ExtFile = "gif" Or ExtFile = "png" Or ExtFile = "TIFF" _ Or ExtFile = "tif" Or ExtFile = "emf" Or ExtFile = "eps" Then ActiveDocument.Paragraphs.Add.Range.InlineShapes.AddPicture(FileItem.Path).Select With Selection .Style = "Рисунок" 'Присваиваем объекту рисунок стиль "Рисунок" .InsertAfter vbCr 'Переходим на новую строку и добавляем нумерованную подпись .InsertCaption Label:="Рисунок" 'Подпись рисунка через тире (по госту) - название файла рисунка .InsertAfter ChrW(160) & "-" & ChrW(160) & ComItem.GetBaseName(FileItem.Name) .Next.Style = "Рисунок Название" 'Присваиваем подписи стиль "Рисунок Название" End With End If Next FileItem End Sub
Перед запуском скрипта поместите курсор туда, куда вы собираетесь добавлять рисунки.
Я сознательно сформировал только 2 стиля для рисунков и для подписей к рисунку, и никаких дополнительных манипуляций со стилем рисунков и подписей к ним в скрипте я не делал, т.к. удобнее потом отредактировать эти 2 стиля чтобы "причесать" разом все рисунки и все подписи к ним во всём документе.
И да, не забывайте, что .InsertCaption Label:="Рисунок" это название подписи типа рисунок, этот тип у вас может называться под другому, пожалуйста проверьте у себя в word (меню Ссылки/вставить название). В случае, если у вас тип рисунка назван по-другому, используйте своё название (откорректируйте скрипт ... Label:="Ваше название подписи типа рисунок"
Естественно, вставьте в скрипт те названия стилей для рисунков и подписей к ним, которые используются в вашем документе. Удачи!
P.S. Уважаемый @Emulyator в комментариях предложил написать этот скрип используя только процедуру Dir и даже написал часть кода. С удовольствием поддерживаю эту инициативу ) Вот, какой у меня получился код в этом случае - работает аналогично:
Private Sub vstavka_ris() Dim iDialog As FileDialog Dim FileName$, ExtFile$, fNameNoExt$, FolderPath$ Set iDialog = Application.FileDialog(msoFileDialogFolderPicker) If Not iDialog.Show Then Exit Sub FolderPath = iDialog.SelectedItems(1) & "\" ' Debug.Print FolderPath FileName = Dir(FolderPath) While FileName <> "" And InStr(1, FileName, ".") > 0 ExtFile = LCase(Mid(FileName, InStrRev(FileName, ".") + 1)) fNameNoExt = Left(FileName, InStrRev(FileName, ".") - 1) If InStr(".jpg.jpeg.bmp.gif.png.emf.eps.", "." & ExtFile & ".") > 0 Then ActiveDocument.Paragraphs.Add.Range.InlineShapes.AddPicture(FolderPath & FileName).Select With Selection .Style = "Рисунок" .InsertAfter vbCr .InsertCaption Label:="Рисунок" .InsertAfter ChrW(160) & "-" & ChrW(160) & fNameNoExt .Next.Style = "Рисунок Название" End With End If FileName = Dir Wend End Sub
