Excel中的交替行颜色/数字-VBA
因此,我正在Access中开发一个报告工具。它查询本地表并创建Excel文档(通过VBA)并生成Excel文件 我使用下面的代码给可选代码上色,效果非常好Excel中的交替行颜色/数字-VBA,excel,ms-access,vba,Excel,Ms 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,
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报告时,他们可能会删除一行,或执行排序操作或其他操作,而当他们这样做时,会把行弄乱
例:
如果我把它们分类,我会得到
3 white row
1 white row
2 grey row
4 grey row
这不是我想要的,我想要它保留格式和编号
有人在Access中使用VBA来完成此任务吗
Tech:office2007这可以通过
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
@e、 詹姆斯
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
如何手动输入行号?数字栏呢?我不希望在对行进行排序时使用1,2,3到2,3,1。@编辑,这是为发表评论但删除了评论的其他人准备的。我将离开这里作为参考。我想我可能误导了你。这段代码是在Access中,我创建的文档,所有的格式,数据都是通过VBA上的Access完成的。然后我只需调用ExcelObject.save来保存文件。如果我从Access DBA对它们进行编号,这很好,但是用户可以打开Excel工作表并重新排序行。然后,因为Excel中没有宏,它会弄乱行数,因为用户对Excel不是很了解。他们只是想分类和打印。他们中没有一个人知道一行代码。我用手动输入的标题行号更新了我的代码,以匹配您的示例。这将保留其格式,即使行被移动、排序、删除等。这是我删除的注释。抱歉,我没有注意到您正在从Access生成Excel工作表。这个解决方案应该是可行的(或者,你也可以设置一个基本模板excel工作表并复制/编辑它。这样,你就可以使用excel中的“条件格式”菜单,而不必处理
格式条件
)哦,天哪,这太简单了,哈哈。也许是工作日结束了,我只是错过了我的咖啡因。这也让我的时间从25秒减少到了10-13秒,减少了3个循环
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