我正在将查询结果输出到Excel,并希望通过我的Access VBA语法进行格式化。每次我尝试添加格式,我都会收到错误。我坚持的是
无法设置Range类的HorizontalAlignment属性
这是我的语法 - 应该改变哪些语法可以根据需要修改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 :(得分: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行选择前面的点(。)。
代码运行没有错误。