Excel 2003 VBA-复制此代码的方法,用于选择行并为其着色

Excel 2003 VBA-复制此代码的方法,用于选择行并为其着色,excel,ms-access,automation,vba,Excel,Ms Access,Automation,Vba,这是一个将数据集从access导出到excel的过程的片段 Dim rs As Recordset 作为整数的Dim intMaxCol Dim intMaxRow作为整数 Dim objxls作为Excel.Application 将objWkb设置为Excel.工作簿 将对象调整为Excel.工作表 Set rs = CurrentDb.OpenRecordset("qryOutput", dbOpenSnapshot) intMaxCol = rs.Fields.Count If rs

这是一个将数据集从access导出到excel的过程的片段

Dim rs As Recordset
作为整数的Dim intMaxCol Dim intMaxRow作为整数 Dim objxls作为Excel.Application 将objWkb设置为Excel.工作簿 将对象调整为Excel.工作表

Set rs = CurrentDb.OpenRecordset("qryOutput", dbOpenSnapshot)

intMaxCol = rs.Fields.Count
If rs.RecordCount > 0 Then
    rs.MoveLast:    rs.MoveFirst
    intMaxRow = rs.RecordCount
    Set objxls = New Excel.Application
    objxls.Visible = True
    With objxls
        Set objWkb = .Workbooks.Add
        Set objSht = objWkb.Worksheets(1)
        With objSht
          On Error Resume Next
            .Range(.Cells(1, 1), .Cells(intMaxRow, intMaxCol)).CopyFromRecordset rs
            .Name = conSHT_NAME
            .Cells.WrapText = False
            .Cells.EntireColumn.AutoFit
            .Cells.RowHeight = 17
            .Cells.Select
                With Selection.Font
                    .Name = "Calibri"
                    .Size = 10
                End With

            .Rows("1:1").Select
                With Selection
                .Insert Shift:=xlDown
                End With
            .Rows("1:1").Interior.ColorIndex = 15
            .Rows("1:1").RowHeight = 30
            .Rows("2:2").Select
                With Selection.Interior
                .ColorIndex = 40
                .Pattern = xlSolid
                End With
             .Rows("4:4").Select
                With Selection.Interior
                .ColorIndex = 40
                .Pattern = xlSolid
                End With
             .Rows("6:6").Select
                With Selection.Interior
                .ColorIndex = 40
                .Pattern = xlSolid
                End With

              .Rows("1:1").Select
                With Selection.Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .Weight = xlMedium
                .ColorIndex = xlAutomatic
                End With
            End With
        End With
    End If

    Set objSht = Nothing
    Set objWkb = Nothing
    Set objxls = Nothing
    Set rs = Nothing
    Set DB = Nothing

End Sub
看看我在哪里看着色的行。我想每隔一行选择并填充(任何颜色),有点像一些访问报告。我可以手动编码每一行,但有两个问题:1)这很痛苦2)我不知道记录数是多少

在合并recordcount以了解要“循环通过”的行数的同时,如何使代码在这方面更高效

编辑:我的另一个问题是关于我在模块中使用的选择方法,是否有更好的excel语法来代替这些选择

            .Cells.Select
                With Selection.Font
                    .Name = "Calibri"
                    .Size = 10
                End With
这是我找出如何完成这段代码的唯一方法,但实际上每隔一次我运行这段代码时,它就会失败。它说没有对象并每隔一段时间指向.font?这是因为代码很差,还是因为我没有在代码中关闭xls应用程序?如果是,我该怎么做


一如既往地谢谢你

使用条件格式。这里有一小段你的代码被重写了

      On Error Resume Next
        With .Range(.Cells(1, 1), .Cells(intMaxRow, intMaxCol))
            .CopyFromRecordset rs
            .FormatConditions.Add xlExpression, , "=MOD(ROW(),2)=1"
            With .FormatConditions(1)
                .Interior.Color = vbYellow
            End With
        End With
你应该在一个新问题中问你的选择问题,但答案是:无论何时你看到。选择,然后选择,你可能不需要选择

With Cells.Font
    .Name = "Calibri"
    .Size = 10
End With

您不需要为
CopyfromRecordset
选择所有范围,只需选择
range(“A1”)。CopyfromRecordset rs
是足够的,就我所见,您可以选择数据而不是所有列

For i = 2 to 6 Step 2
    With Range(Cells(1,i),Range(Cells(1,i)).End(xlDown)).Interior  
        .ColorIndex = 40
        .Pattern = xlSolid
    End With
Next i

对于第二个问题,@DickKusleika是对的。

对不起……我认为他们是关于同一代码的一个问题。谢谢你的帮助