代码之家  ›  专栏  ›  技术社区  ›  masfenix

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

  •  2
  • masfenix  · 技术社区  · 16 年前

    所以我正在开发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来完成此操作吗?

    技术:Office 2007

    2 回复  |  直到 16 年前
        1
  •  3
  •   James Eichele Bernard Igiri    16 年前

    这可以通过 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
    
        2
  •  1
  •   James Eichele Bernard Igiri    16 年前

    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
    
    推荐文章