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

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,

因此,我正在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报告时,他们可能会删除一行,或执行排序操作或其他操作,而当他们这样做时,会把行弄乱

例:

如果我把它们分类,我会得到

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