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

所以我正在使用Access中的报告工具。 它查询本地表格并创build一个Excel文档(通过VBA)并创build一个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报告,他们可能会删除一行,或做一个sorting操作或任何事情,当他们这样做,它弄乱了行。

例如:

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

如果我sorting他们我得到

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

这不是我想要的,我希望它保持格式和编号任何人都可以在Access中使用VBA来完成这个任务?

Tech:Office 2007

这可以用ROW()函数和一些条件格式来完成。 ROW()函数返回它所在单元格的当前行,所以只要单元格被删除,移动或sorting,它就会改变。 条件格式化只要条件发生变化就重新应用,所以移动或sorting行会通知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 

@ 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