我提前为标题道歉。我要做的是将Microsoft Access数据导出到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行代码应该是选择所有放置的数据,然后选择所有单元格并对它们进行格式化。任何提示/建议将不胜感激。
注意:我知道我应该将此代码模块化为单独的函数,并将其称为方法。
答案 0 :(得分:2)
您的代码无声地失败,On Error Resume Next
阻止您知道问题出在哪里。 从不使用On Error Resume Next
这样将错误推到地毯下。
假设未引用Excel类型库(那样就不会进行后期绑定了吗?),Range
可能是未定义的标识符。假设未指定Option Explicit
(如果确实没有指定,则代码甚至都不会编译/运行),这些不合格的Range
标识符将像任何其他错字一样被“声明”一个未分配的Variant/Empty
变量,该变量不可能是对其进行成员调用的对象。
所以我敢打赌,您得到的 actual 错误是“ Object Required”,在此行上:
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)
... xlLastCell
以外的标识符也不存在。
在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
会使您的工作变得比原来更加困难。使用这些类型(如果有)!