2017-03-16 67 views
0

我将查询结果输出到Excel,并希望通过Access VBA语法进行格式化。每次尝试添加格式时,都会出现错误。我被困在一个从Access访问VBA的格式Excel工作表

无法设置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 
+0

看看这个答案。尝试使用数值。 http://stackoverflow.com/questions/6952084/excel-cell-alignments-numerical-values-for-e-g-xlleft-xlright-or-xlcenter – geeFlo

+0

甚至使用数值仍然是相同的问题。 – BellHopByDayAmetuerCoderByNigh

回答

1

我正在运行Excel 2013,此语法适用于我。首先,在VBE的访问确保你已经加入到

的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 

这应该完成所有的格式化,并从看起来是宏记录器中删除“绒毛”语法。我相信(尽管我没有测试),如果您从VBE添加对Excel的引用,@ June7提供的代码也可以工作。

+0

该代码有效。谢谢。我不需要.Range(“A:A”)。ColumnWidth = 9但是我可以添加评论标记:) – BellHopByDayAmetuerCoderByNigh

0

通过删除所有记录集的东西来测试您的代码,以测试Excel部件。不完全相同的错误。对我而言,选择参考的4行会引起问题。

添加的行来选择列A:N和修改的线设定字体:
.Columns。( “A:N”)选择
Selection.Font.Bold =真

我已移除的点( )从其他3行的Selection前面。

代码无误地运行。

+0

感谢您的回复!我试图按照你的建议修改我的语法,但现在我得到一个新的错误。看我的编辑。 – BellHopByDayAmetuerCoderByNigh

+0

我没有禁用顶部的Range行。所以不确定是否需要。 – June7

+0

我从所有'Selection'行前删除了'.'。我添加了'.Columns(“A:N”)。选择'& 'Selection.Font.Bold = True' - 我错过了哪篇文章? – BellHopByDayAmetuerCoderByNigh