VBA Excel печатает указанные листы на основе имени и цвета - PullRequest
0 голосов
/ 19 июня 2020

Я хотел бы напечатать листы, которые: 1. Основаны на указанном цвете 2. Названы как пожаротушение другим цветом

, а также исключить некоторые листы с указанный цвет вкладки.

Глядя на мое изображение ниже, у меня есть большинство листов бледно-синего цвета, которые я хотел бы напечатать. Я знаю, как напечатать все тускло-синие листы, но мне нужно: 1. Включить 4 красных вкладки - Противопожарная защита 2. Исключить 2 светло-голубых вкладки: Материалы - Технические характеристики и Лист для удаления капли волокна.

За исключением листов, я могу просто скрыть их, как в приведенном ниже коде:

Sub RAtoPDF()
Dim sh As Worksheet
Dim ArraySheets() As String
Dim custom_name As String
Dim x As Variant

Sheets("Fibre drop release sheet").Visible = False
Sheets("Materials - Specifications").Visible = False


For Each sh In ActiveWorkbook.Worksheets
    If sh.Tab.ColorIndex = 33 Then
        ReDim Preserve ArraySheets(x)
        ArraySheets(x) = sh.Name
        x = x + 1
    End If
    'If st.Tab.Name = "*Fire Stopping*" Then
        'ReDim Preserve ArraySheets(x)
        'ArraySheets(x) = sh.Name
        'x = x + 1
    'End If

Next sh

Sheets(ArraySheets).Select


custom_name = "RA_" & ThisWorkbook.Name & ".pdf"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                                ThisWorkbook.Path & "\" & custom_name, _
                                Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                                IgnorePrintAreas:=False, OpenAfterPublish:=True

Sheets("Fibre drop release sheet").Visible = True
Sheets("Materials - Specifications").Visible = True

Sheets("Frontsheet").Select
End Sub

, но я получаю сообщение об ошибке:

Не удалось выбрать метод класса листов

с отладчиком, указывающим следующую строку:

   Sheets(ArraySheets).Select

enter image description here

Для включения дополнительных красных вкладок я подготовил что-то вроде этого:

    If st.Tab.Name = "*Fire Stopping*" Then
        ReDim Preserve ArraySheets(x)
        ArraySheets(x) = sh.Name
        x = x + 1
    End If

то, что вы также можете найти в основном коде, где он был отключен. В этом случае я получаю следующую ошибку:

Требуется объект

с указанием следующей строки:

  If st.Tab.Name = "*Fire Stopping*" Then

Наконец, я хочу получить листы от Fire Stopping to Cables1 напечатаны в формате PDF. Как я могу это сделать?

...