чередование цветов / чисел в Excel - VBA - PullRequest
2 голосов
/ 13 июля 2010

Итак, я работаю над инструментом отчетности в Access. Он запрашивает локальные таблицы и создает документ Excel (через VBA) и создает файл Excel.

Я использую следующий код для окраски альтернативного кода, и он прекрасно работает

 For a = 1 To rs.RecordCount
    With ExcelSheet          
        .Cells(a + 1, 1) = a 
        .Cells(a + 1, 1).EntireRow.Interior.ColorIndex = IIf((a + 1) Mod 2 = 0, 2, 15)
    End With
Next

Примечание. Мне нужно сделать a + 1, потому что a = 1 - строка заголовка, а это строка заголовка

Примечание: .Cells(a + 1, 1) = 1 нумерует строки (1, 2, 3, ...)

Примечание: IIf((a + 1) Mod 2 = 0, 2, 15) 2 и 15 - цветовые коды.

Теперь мой вопрос заключается в том, что когда кто-то получает отчет Excel, он может удалить строку или выполнить операцию сортировки, или что-то еще, и когда он это делает, он портит строки.

например:

1  white row
2  grey row
3  white row 
4  grey row

если я сортирую их, я получаю

3  white row
1  white row 
2  grey row 
4  grey row 

это не то, что я хочу, я хочу сохранить форматирование и нумерацию Кто-нибудь может сделать это с помощью VBA в Access?

Tech: Office 2007

Ответы [ 2 ]

3 голосов
/ 13 июля 2010

Это можно сделать с помощью функции ROW() и некоторого условного форматирования. Функция ROW() возвращает текущую строку ячейки, в которой она находится, поэтому она будет меняться при удалении, перемещении или сортировке ячеек. Условное форматирование повторно применяется всякий раз, когда изменяются его условия, поэтому перемещение или сортировка строк сообщит Excel об обновлении цветов соответствующим образом. Код будет выглядеть следующим образом:

Dim a As Integer
Dim oneRow As Range

For a = 1 To rs.RecordCount 
    With ExcelSheet

        ''// show the row number in the first cell
        .Cells(a + 1, 1).Formula = "=ROW()"

        ''// set formatting to alternate row colors
        Set oneRow = .Cells(a + 1, 1).EntireRow
        oneRow.FormatConditions.Delete
        oneRow.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=MOD(ROW()-1, 2)=0"
        oneRow.FormatConditions(1).Interior.ColorIndex = 2
        oneRow.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=MOD(ROW()-1,2)=1"
        oneRow.FormatConditions(2).Interior.ColorIndex = 15

    End With
Next a
1 голос
/ 13 июля 2010

@e.James

Dim rowRange As Range


ExcelSheet.Cells(1, 1).EntireColumn.ColumnWidth = 4
ExcelSheet.Cells(1, 1) = "#"
Set rowRange = Range("2:2", rs.RecordCount & ":" & rs.RecordCount)
rowRange.Select
With ExcelApp.Selection
    .FormatConditions.Delete
    .FormatConditions.Add xlExpression, Formula1:="=MOD(ROW(),2)"
    .FormatConditions(1).Interior.ColorIndex = 15
End With

Это не работает.Он просто выделяет самую верхнюю строку (строку заголовка) серым цветом.

РЕДАКТИРОВАТЬ НЕВЕРМИНДОМ Это должно быть

Set rowRange = ExcelSheet.Range("2:2", rs.RecordCount & ":" & rs.RecordCount)

РЕДАКТИРОВАТЬ НОМЕР 2: Знаете ли вы, как я могу вставить номера строк вкаждая строка с использованием этого метода?

ОТВЕТ:

ExcelSheet.Cells(1, 1).EntireColumn.ColumnWidth = 4
Set RowRange = Range("2:2", rs.RecordCount & ":" & rs.RecordCount)
RowRange.Columns(1).Formula = "=ROW()-1"
With RowRange
    .FormatConditions.Delete
    .FormatConditions.Add xlExpression, Formula1:="=MOD(ROW(),2)"
    .FormatConditions(1).Interior.ColorIndex = 15
End With
...