首页 > 解决方案 > VBA:将访问权限导出到 Excel -> 选择所有单元格 -> 格式化表格

问题描述

我提前为标题道歉。我想要做的是将 Microsoft 访问数据导出到 Excel 电子表格,选择所有单元格并将其格式化为表格。

问题:excel 电子表格中的数据没有按照最后 5 行代码指定的格式在表格中格式化。

代码:

Private Sub button3_Click()
Dim tbl As ListObject
Dim rng As Range

Dim XL As Object
Dim Page As Object
Dim xlrngCell As Object
Dim rs As DAO.Recordset
Dim intF As Integer


On Error Resume Next
Set XL = GetObject(, "Excel.Application")
If XL Is Nothing Then
    Set XL = CreateObject("Excel.Application")
    If XL Is Nothing Then
        MsgBox "Can't find Excel!", vbCritical
        Exit Sub
    End If
    XL.Visible = True
    XL.UserControl = True
End If

Set xlrngCell = XL.Workbooks.Add.Worksheets(1).Range("A1")
Set rs = Me.subformMain.Form.RecordsetClone
For intF = 0 To rs.Fields.Count - 1
    xlrngCell(, intF + 1) = rs.Fields(intF).Name
Next intF
rs.MoveFirst
xlrngCell.Offset(1).CopyFromRecordset rs

xlrngCell.Worksheet.Parent.Saved = True
Set Page = XL.Worksheets("Sheet1").Range("A1:I1")
Page.Font.Bold = True
Page.Font.Size = 16
xlrngCell.Worksheet.Cells.EntireColumn.AutoFit


Set rng = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell))
Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes)
tbl.TableStyle = "TableStyleDark10"
xlrngCell.Worksheet.Parent.Saved = True
XL.Work

End Sub

最后 5 行代码应该是选择所有放置的数据,然后选择所有单元格并格式化它们。任何提示/建议将不胜感激。

注意:我知道我应该将此代码模块化为单独的函数并将它们称为方法。

标签: excelms-accessvba

解决方案


您的代码静默失败,On Error Resume Next阻止您了解问题所在。永远不要像这样把On Error Resume Next错误推到地毯下。

假设未引用 Excel 类型库(那么您不会进行后期绑定,对吗?),Range可能是未定义的标识符。假设Option Explicit没有指定(如果是,代码甚至不会编译/运行),这些不合格Range的标识符就像任何其他错字一样被现场“声明”,作为一个Variant/Empty不可能的未分配变量进行成员调用的对象。

所以我打赌你得到的实际错误是“需要对象”,在这一行:

Set rng = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell))

你知道Worksheet应该是什么:

Set Page = XL.Worksheets("Sheet1").Range("A1:I1")

为它声明一个变量:

Dim ws As Object
Set ws = XL.Worksheets("Sheet1")

现在使用该Worksheet对象(我会在其上方声明它,并在需要引用该工作表的任何地方使用它)来限定这些Range调用:

Set rng = ws.Range(ws.Range("A1"), ws.Range("A1").SpecialCells(xlLastCell))

...可以简化为:

Set rng = ws.Range("A1").SpecialCells(xlLastCell)

...exceptxlLastCell也是一个不存在的标识符。

在 Excel 类型库中,正确的标识符是xlCellTypeLastCell- 但由于您没有引用该库,VBA 也不知道它代表什么。

xlCellTypeLastCell在枚举中定义,值为11.

所以你可以这样声明:

Const xlCellTypeLastCell = 11

然后在您的代码中使用它:

Set rng = ws.Range("A1").SpecialCells(xlCellTypeLastCell)

编辑 - 我错过了这两个:

Dim tbl As ListObject
Dim rng As Range

如果您引用 Excel 类型库,那么通过声明所有内容 Excel 会使您的生活变得比需要的困难得多As Object。如果有类型,请使用它们!


推荐阅读