格式 Excel 来自 Access VBA 的工作表

Format Excel Worksheet From Access VBA

我正在将查询结果输出到 Excel,并希望通过我的 Access VBA 语法进行格式化。每次我尝试添加格式时,都会出现错误。我坚持的是

Unable to set the HorizontalAlignment property of the Range class

这是我的语法 - 应该更改哪些内容以便语法可以根据需要修改 Excel?

Private Sub ToExcel_Click()
Dim lngColumn As Long
Dim xlx As Object, xlw As Object, xls As Object, xlc As Object
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strPathFileName As String, strWorksheetName As String
Dim strRecordsetDataSource As String
Dim blnEXCEL As Boolean, blnHeaderRow As Boolean

    blnEXCEL = False

    strPathFileName = "Z:\House\Data.xlsx"
    strRecordsetDataSource = "Fa"
    blnHeaderRow = True
    On Error Resume Next
    Set xlx = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
          Set xlx = CreateObject("Excel.Application")
          blnEXCEL = True
    End If
    Err.Clear
    On Error GoTo 0
    xlx.Visible = True
    Set xlw = xlx.Workbooks.Add
    Set xls = xlw.Worksheets(1)
    xls.Name = "Cu"
    Set xlc = xls.Range("A1")
    Set dbs = CurrentDb()
    Set rst = dbs.OpenRecordset(strRecordsetDataSource, dbOpenDynaset, dbReadOnly)
    If rst.EOF = False And rst.BOF = False Then
          If blnHeaderRow = True Then
                For lngColumn = 0 To rst.Fields.Count - 1
                      xlc.Offset(0, lngColumn).Value = rst.Fields(lngColumn).Name
                Next lngColumn
                Set xlc = xlc.Offset(1, 0)
          End If
          xlc.CopyFromRecordset rst
    End If

    rst.Close
    Set rst = Nothing
    dbs.Close
    Set dbs = Nothing

    With xls
        .Range("A1:N1").Select
        .Columns("A:N").HorizontalAlignment = xlCenter
        .Columns("A:N").VerticalAlignment = xlBottom
        .Columns("A:N").WrapText = True
        .Columns("A:N").Orientation = 0
        .Columns("A:N").AddIndent = False
        .Columns("A:N").IndentLevel = 0
        .Columns("A:N").ShrinkToFit = False
        .Columns("A:N").ReadingOrder = xlContext
        .Columns("A:N").MergeCells = False
        .Columns("A:N").Selection.Font.Bold = True
        .Columns("N:N").ColumnWidth = 8.86
        .Columns("I:I").ColumnWidth = 8.86
        .Columns("C:G").Select
        .Selection.NumberFormat = "$#,##0"
        .Columns("J:J").Select
        .Selection.NumberFormat = "$#,##0"
        .Columns("K:M").Select
        .Selection.NumberFormat = "0%"
        .Range("P18").Select
        .Columns("A:A").EntireColumn.AutoFit
        .Columns("B:B").EntireColumn.AutoFit
        .Range("A1").Select
    End With

    Set xlc = Nothing
    Set xls = Nothing
    xlw.SaveAs strPathFileName
    xlw.Close False
    Set xlw = Nothing
    If blnEXCEL = True Then xlx.Quit
    Set xlx = Nothing
End Sub

编辑
我尝试了以下语法,但出现

错误

object required

上线Selection.Font.Bold = True

这是完全修改后的语法

    With xls
        '.Range("A1:N1").Select
        .Columns("A:N").Select
        Selection.Font.Bold = True
        .Columns("A:N").HorizontalAlignment = xlCenter
        .Columns("A:N").VerticalAlignment = xlBottom
        .Columns("A:N").WrapText = True
        .Columns("A:N").Orientation = 0
        .Columns("A:N").AddIndent = False
        .Columns("A:N").IndentLevel = 0
        .Columns("A:N").ShrinkToFit = False
        .Columns("A:N").ReadingOrder = xlContext
        .Columns("A:N").MergeCells = False
        '.Columns("A:N").Selection.Font.Bold = True
        .Columns("N:N").ColumnWidth = 8.86
        .Columns("I:I").ColumnWidth = 8.86
        .Columns("C:G").Select
        Selection.NumberFormat = "$#,##0"
        .Columns("J:J").Select
        Selection.NumberFormat = "$#,##0"
        .Columns("K:M").Select
        Selection.NumberFormat = "0%"
        .Range("P18").Select
        .Columns("A:A").EntireColumn.AutoFit
        .Columns("B:B").EntireColumn.AutoFit
        .Range("A1").Select
    End With

通过删除所有记录集内容来测试您的代码,只是为了测试 Excel 部分。不要完全得到相同的错误。对我来说,带有 Selection 引用的 4 行会导致问题。

向 select 列添加了行 A:N 并修改了行设置字体:
.Columns("A:N").Select
Selection.Font.Bold = 真

我删除了其他 3 行 Selection 前面的点 (.)。

代码 运行 没有错误。

我是 运行 Excel 2013 年,这个语法对我有用。首先,在 VBE for Access 中确保您已添加对

的引用

Microsoft Excel 15.0 Object Library

然后为了缩短您的语法,您可以使用以下内容:

With xls
    .rows("1:1").Font.Bold = True
    .Range("A:N").HorizontalAlignment = xlCenter
    .Range("A:N").VerticalAlignment = xlBottom
    .Range("C:G").NumberFormat = "$#,##0"
    .Range("J:J").NumberFormat = "$#,##0"
    .Range("K:M").NumberFormat = "0%"
    .Range("A:N").WrapText = True
    .Range("N:N").ColumnWidth = 8.86
    .Range("I:I").ColumnWidth = 8.86
    .Range("A:A").ColumnWidth = 9
End With

这应该完成您之后的所有格式设置,并从似乎是宏录制器的内容中删除 "fluff" 语法。我相信(尽管我没有测试)如果您从 VBE 添加对 Excel 的引用,@June7 提供的代码也可以工作。