VBA:导出对Excel的访问权限->选择所有单元格->设置表格格式

时间:2018-07-04 19:27:21

标签: vba excel-vba access-vba excel

我提前为标题道歉。我要做的是将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行代码应该是选择所有放置的数据,然后选择所有单元格并对它们进行格式化。任何提示/建议将不胜感激。

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

1 个答案:

答案 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会使您的工作变得比原来更加困难。使用这些类型(如果有)!