从Access VBA格式化Excel工作表

时间:2017-03-16 17:06:44

标签: vba ms-access ms-access-2013

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

  

无法设置Range类的Horizo​​ntalAlignment属性

这是我的语法 - 应该改变哪些语法可以根据需要修改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

修改
我尝试了下面的语法,我得到了

的错误
  

需要对象

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

2 个答案:

答案 0 :(得分:1)

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

的引用
  

Microsoft Excel 15.0对象库

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

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

这应该是你所做的所有格式化并删除&#34; fluff&#34;似乎是宏记录器的语法。我相信(虽然我没有测试)如果你从VBE添加对Excel的引用,@ June7提供的代码也会有效。

答案 1 :(得分:0)

通过删除所有记录集内容来测试Excel部件来测试代码。没有完全得到同样的错误。对我来说,带有选择参考的4行导致问题。

添加行以选择列A:N并修改行设置字体:
.Columns(&#34; A:N&#34)。选择
Selection.Font.Bold = True

我删除了其他3行选择前面的点(。)。

代码运行没有错误。