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