格式 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 提供的代码也可以工作。
我正在将查询结果输出到 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 提供的代码也可以工作。