excel - 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 行代码应该是选择所有放置的数据,然后选择所有单元格并格式化它们。任何提示/建议将不胜感激。
注意:我知道我应该将此代码模块化为单独的函数并将它们称为方法。
解决方案
您的代码静默失败,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
。如果有类型,请使用它们!
推荐阅读
- javascript - 为每个 Web 应用程序生成唯一的本地存储密钥
- swift - 我想在声明它的函数之外引用一个不可变变量
- c++ - 迭代时从向量和内存中删除一个对象
- assembly - 汇编代码,需要帮助了解 'movzwl 0x40272e(,%rax,4),%esi' 在做什么
- nativescript - Nativescript RadListView 标头消失(Android)
- sql - 将列中的数组与另一个查询的计数结果相乘
- php - PHP检查输入字段是否不为空以及是否有特殊字符
- ruby - Ruby 中的战地游戏
- haskell - Haskell FFI 本地 c 标头
- node.js - 带有 node、express.js、ngrok 和 Dialogflow 的 Facebook 聊天机器人