Можно ли использовать VBA для подсчета количества встроенных картинок в нескольких таблицах? - PullRequest
0 голосов
/ 25 июня 2019

Попытка записать некоторый код, который автоматически изменит размер встроенных изображений в таблицах по всему документу в зависимости от количества изображений в каждой таблице.Документ может содержать от 1 до> 10 отдельных отчетов, и моей конечной целью является размещение каждого отдельного отчета на одной странице.Таким образом, если в первом отчете есть только одна картинка, я бы изменил ее размер до 75%, если во втором отчете есть две картинки, я бы изменил их размер до ~ 60% (сохраняя при этом изображение первого отчета на уровне 75%.), и так далее.Каждый отчет имеет 2 отдельные таблицы, а рисунки всегда находятся во второй строке 2-й таблицы отчета.

Прямо сейчас мой код (показан) меняет все изображения в отчете на один определенный размер.У меня нет проблем с подсчетом общего количества изображений в общем документе с использованием .InlineShapes.Count и даже общего количества таблиц с использованием ActiveDocument.Tables.Count, но я не могу понять, как ссылаться только на количество изображений вкаждый стол.Я попытался перебрать все таблицы в документе, но каждый раз, когда я пытаюсь подсчитать количество изображений в таблице, он всегда возвращает общее количество в документе.

Sub resize()
Dim i As Long
With ActiveDocument
    For i = 1 To .InlineShapes.Count
        With .InlineShapes(i)
            .ScaleHeight = 45
            .ScaleWidth = 45
        End With
    Next i
End With
End Sub

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Использование Option Explicit может помочь с ошибками компиляции (опция Explicit должна быть в верхней части модуля перед любыми объявлениями), также ваш код может быть упрощен:

Option Explicit

Private Const LARGE_IMG As Long = 75
Private Const MEDIUM_IMG As Long = 60
Private Const SMALL_IMG As Long = 45

Sub dependentResize()
    Dim i As Long
    Dim scaleTo As Long
    Dim ilShape As InlineShape

    For i = 1 To ActiveDocument.Tables.Count
        With ActiveDocument.Tables(i).Range
            Select Case .InlineShapes.Count
                Case 1
                    scaleTo = LARGE_IMG
                Case 2
                    scaleTo = MEDIUM_IMG
                Case Else
                    scaleTo = SMALL_IMG
            End Select

            For Each ilShape In .InlineShapes
                With ilShape
                    .ScaleHeight = scaleTo
                    .ScaleWidth = scaleTo
                End With
            Next
        End With
    Next i
End Sub
0 голосов
/ 25 июня 2019

Пришлось работать с некоторыми ошибками компиляции, но приведенный ниже код работал последние пару часов. Он начинается с первой таблицы в документе, подсчитывает количество фигур в этой таблице и изменяет размеры формы до другого масштаба, который зависит от количества фигур в таблице. Он продолжает цикл по всем таблицам в документе до завершения. Спасибо Tomalak за толчок в правильном направлении.

Sub Dependent_Resize()

Dim t As Table
Dim i As Integer
Dim j As Integer
Dim k As Integer

For i = 1 To ActiveDocument.Tables.Count
    Set t = ActiveDocument.Tables(i)
    j = t.Range.InlineShapes.Count
    If j = 0 Then
    ElseIf j = 1 Then
        With t.Range.InlineShapes(j)
            .ScaleHeight = 75
            .ScaleWidth = 75
        End With
    ElseIf j = 2 Then
        For k = 1 To j
         With t.Range.InlineShapes(k)
            .ScaleHeight = 60
            .ScaleWidth = 60
        End With
        Next k
    ElseIf j > 2 Then
        For k = 1 To j
        With t.Range.InlineShapes(k)
            .ScaleHeight = 45
            .ScaleWidth = 45
        End With
        Next k
    End If
Next i

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...