在Excel中交替行颜色/数字 - VBA

时间:2010-07-13 17:53:25

标签: excel access-vba

所以我正在使用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 

这不是我想要的,我希望它保持格式和编号 有人在Access中使用VBA实现这一目标吗?

Tech:Office 2007

2 个答案:

答案 0 :(得分:3)

这可以使用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 :(得分:1)

@ 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

那个dosnt工作。它只是突出显示最顶行(标题行)灰色。

编辑NEVERMIND 它应该是

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