我提前为标题道歉。我想要做的是将 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
。如果您有类型,请使用它们!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句