Word Macro: импорт / форматирование изображений из папки и удаление лишних страниц - PullRequest
0 голосов
/ 08 февраля 2019

Я совершенно новичок в макросах и пытаюсь сделать следующее:

Импортировать все изображения из папки на жестком диске в файл Word - каждое из которых имеет свою собственную страницу и изменяется для заполнения.страница (портрет А4), сохраняя при этом ее соотношение.

Мне уже удалось выполнить «импорт», чтобы каждое изображение получило свою страницу с таким кодом:

Sub BilderImport()
    Dim Path As String
    Dim Img As Object
    Dim fs As Object
    Dim f As Object
    Dim fc As Object
    Dim i As Integer
    Dim fsize As Integer

    Path = "C:\tmp"
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(Path)
    Set ff = f.Files
    i = 0
    fsize = ff.Count

    For Each Img In ff
        If Right(Img.Name, 4) = ".bmp" Or Right(Img.Name, 4) = ".jpg" Or Right(Img.Name, 4) = ".gif" Or Right(Img.Name, 4) = ".png" Then
            i = i + 1
            Selection.InlineShapes.AddPicture FileName:=Img 

            Selection.InsertBreak Type:=wdLineBreak 'Add file name below every img
            Selection.TypeText Text:=Img.Name

            If i < fsize Then 'No line break after the last img
                Selection.InsertBreak Type:=wdPageBreak 'Inserts line break after every img
            End If
        End If
    Next
End Sub

ПроблемаЯ уже сталкивался: Word также добавляет разрыв строки после каждого изображения, и если изображение уже довольно высокое, этот разрыв строки переходит на следующую страницу, которая добавляет дополнительную пустую страницу из-за разрыва, который я уже добавил.

Как мне это предотвратить или проверить?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Попробуйте:

Sub BilderImport()
    Dim Path As String
    Dim fs As Object
    Dim ff As Variant
    Dim Img As Variant
    Dim i As Long
    Dim fsize As Long

    Path = "C:\tmp"
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set ff = fs.GetFolder(Path).Files
    i = 0
    fsize = ff.Count
    With ActiveDocument
        For Each Img In ff
            Select Case Right(Img.Name, 4)
                Case ".bmp", ".jpg", ".gif", ".png"
                    i = i + 1
                    .Characters.Last.InlineShapes.AddPicture FileName:=Img
                    .Characters.Last.InsertBefore Chr(11) & Img.Name & Chr(12)                End Select
        Next
        'No page break after last pic
        .Characters.Last.Previous.Delete
    End With
End Sub
0 голосов
/ 08 февраля 2019

Есть два подхода к решению проблемы.Я бы предпочел комбинацию обоих:

  • Если вы изменяете размеры изображений, измените их размер немного меньше (учитывая дополнительный разрыв строки)
  • установите размер шрифта на 0или 1 и задайте для абзаца небольшую высоту строки перед добавлением изображений

В зависимости от размера изображения будет достаточно второй точки.

Существует третья возможность: у вас будетпроверить количество страниц до ввода изображения и после.Но это замедлит весь макрос.

...