Попытка перебрать таблицы и отформатировать в них определенные таблицы - PullRequest
0 голосов
/ 01 мая 2019

Вместо того, чтобы кодировать каждый конкретный лист для форматирования определенных таблиц, я хочу создать цикл, который форматирует только таблицы в списке на разных листах.

текущий код: (sh и wbTemplate определены и установлены ранее в коде)

Dim AllTableNames As String
Dim TableNames As Variant
Dim i As Long

    AllTableNames = "Table_Dormant_Stock,Table_Overstock,Table_Negative_Stock,Table_Outdated_Stock_Counts,Table_Waste_Returns"
    TableNames = Split(AllTableNames, ",")

    For Each sh In wbTemplate.Worksheets
        For i = LBound(TableNames) To UBound(TableNames)
           sh.ListObjects(TableNames(i)).DataBodyRange.Font.Size = 10
        Next i
    Next sh

Я получаю «Ошибка времени выполнения 9»: нижний индекс вне диапазона ». Я знаю, что это как-то связано со вторым циклом, я никогда не делал этого раньше, поэтому не уверен, как это исправить.

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

Вот один из способов исправить ваш код:

For Each sh In wbTemplate.Worksheets
    For i = LBound(TableNames) To UBound(TableNames)

        For Each tbl In sh.ListObjects
            If tbl.Name = TableNames(i) Then
                tbl.DataBodyRange.Font.Size = 10
            End If
        Next tbl

    Next i
Next sh

Итак, я использовал ваш код для циклического перебора каждого листа и каждого имени таблицы в вашем массиве - но затем вместо запуска кода на , который , мы проверяем каждую таблицу (tbl) на листе sh и если имя соответствует имени, которое вы ищете, , тогда код выполняется.


Если вы хотите обновить все таблицы на каждом листе, это просто:

For Each sh In wbTemplate.Worksheets
    For Each tbl In sh.ListObjects
        tbl.DataBodyRange.Font.Size = 10
    Next
Next sh
1 голос
/ 01 мая 2019

Если у вас есть только одна таблица на каждом листе, вы можете вообще отказаться от второго цикла и массива имен и просто использовать индекс коллекции (1).

Если у вас есть другие таблицы, используйте CLRподход.

Sub x()

Dim wbTemplate As Workbook
Dim sh As Worksheet

For Each sh In wbTemplate.Worksheets
    sh.ListObjects(1).DataBodyRange.Font.Size = 10
Next sh

End Sub
...