Каждая вторая строка цветная при копировании данных из таблицы и сводной таблицы в VBA

Следующий код предназначен для копирования данных из главной книги в отдельные книги.

После копирования заголовки в строке 1 и 2 имеют стиль исходных данных (и это хорошо). Однако отдельные строки, следующие за строкой 3 и далее, не окрашены.

Я хочу сделать каждую вторую строку, начиная с третьей, цветной (аналогично функции полосовой строки при создании таблицы). Так:

Option Explicit

Sub copy_data()
    
    Dim count_col As Long
    Dim count_row As Long
    Dim RelationSheet As Worksheet
    Dim AccountSheet As Worksheet
    Dim InstructionSheet As Worksheet
    Dim wb1 As Workbook
    Dim wb2 As Workbook, sht As Worksheet
    Dim desk As String
    Dim START_CELL As String
    
    Dim rngLookUp As Range, i As Long, sDesk As String, sPerson As String
    Dim arrData, sFile As String, sPath As String
    
    sPath = ThisWorkbook.Path & "\"
 
    Set InstructionSheet = Sheet15
    Set RelationSheet = Sheet2
    Set AccountSheet = Sheet3
    desk = InstructionSheet.Cells(14, 3).Text
    If Len(desk) = 0 Then Exit Sub
    
'   LOAD LOOKUP TABLE INTO AN ARRAY

    With InstructionSheet.Range("R1").CurrentRegion
        arrData = .Resize(.Rows.Count - 1).Offset(1).Value
    End With

'   *******************************************************
    
    Application.ScreenUpdating = False
    
    START_CELL = "B5"
    
'   LOOP THROUGH LOOKUP TABLE

    For i = LBound(arrData) To UBound(arrData)
        sDesk = arrData(i, 1)
        If sDesk = desk Then ' match desk
            sPerson = arrData(i, 2)
            ' report workbook name
            'sFile = Replace(sDesk, " ", "_") & "_" & sPerson & ".xlsx"
            sFile = Format(Date, "yyyymmdd") & & sDesk & "_" & sPerson & ".xlsx"
            Set wb2 = Workbooks.Add
            
            ' add a new sheet for RelationLevel / CODE FOR PIVOT TABLE
            Set sht = ActiveSheet
            sht.Name = RelationSheet.Name
            With RelationSheet.Range(START_CELL)
                .AutoFilter Field:=4, Criteria1:=sDesk
                .AutoFilter Field:=2, Criteria1:=sPerson
                .CurrentRegion.SpecialCells(xlCellTypeVisible).Copy sht.Range("A1")
            End With
            
            With ActiveWindow
            If .FreezePanes Then .FreezePanes = False
               .SplitColumn = 1
               .SplitRow = 2
               .FreezePanes = True
            End With
            ActiveSheet.UsedRange.EntireColumn.AutoFit
            
            ' add a new sheet for RelationLevel / Not working currently
            Set sht = wb2.Sheets.Add
            sht.Name = AccountSheet.Name
            With AccountSheet.Range(START_CELL)
                .AutoFilter Field:=5, Criteria1:=sDesk
                .AutoFilter Field:=2, Criteria1:=sPerson
                .CurrentRegion.SpecialCells(xlCellTypeVisible).Copy sht.Range("A1")
            End With
            
            With ActiveWindow
            If .FreezePanes Then .FreezePanes = False
               .SplitColumn = 1
               .SplitRow = 2
               .FreezePanes = True
            End With
            ActiveSheet.UsedRange.EntireColumn.AutoFit
            
            Application.DisplayAlerts = False
            ' save report, overwrite if exists
            wb2.SaveAs sPath & sFile
            Application.DisplayAlerts = True
            wb2.Close

            Application.CutCopyMode = False
            RelationSheet.ShowAllData
            RelationSheet.AutoFilterMode = False
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

Это дополнительный вопрос к этому посту

stackoverflow.com/questions/37758275/… Это помогает?
Kreeszh 23.06.2024 20:48

Думаю, самое простое решение — добавить таблицу, как описано здесь: stackoverflow.com/questions/36874319/… Но я не знаю, как применить то, что там описывают

Malganas 23.06.2024 20:54
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
2
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Позвоните CreateTab, чтобы отформатировать выходную таблицу после копирования.
Sub CreateTab(r As Range)
    Dim oTab As ListObject
    Set r = r.Resize(r.Rows.Count - 1).Offset(1)
    r.ClearFormats
    Set oTab = r.Parent.ListObjects.Add(xlSrcRange, r, , xlYes)
    oTab.TableStyle = "TableStyleMedium8" ' modify as needed
End Sub

Sub Test()
    CreateTab Range("a1").CurrentRegion
End Sub

Извините, я получаю сообщение об ошибке, возможно, из-за того, что подключил его не в ту область («Ошибка времени выполнения '91': переменная объекта или переменная блока не установлена» для строки Set r = r.Resize(r.Rows.Count) - 1).Смещение(1)). Как я это сделал: В самом верху я поставил два измерения «Dim r As Range» и «Dim oTab As ListObject». «Set R = ...» я вставил ниже строки «... .CurrentRegion.SpecialCells(xlCellTypeVisible).Copy sht.Range("A1") End With". Нужна ли эта строка: Sub CreateTab(r As Range) -> End Sub?

Malganas 24.06.2024 10:20

Вы можете просто добавить строку кода как CreateTab Range("a1").CurrentRegion для вызова подпрограммы. Пожалуйста, отредактируйте свое сообщение, чтобы поделиться кодом. Трудно ответить на ваш вопрос, не зная всего кода.

taller 24.06.2024 16:09

Другие вопросы по теме