将访问查询导入 excel 表时出现“无效的过程调用或参数”

VkBk

我有一个 excel 工作簿,其中包含链接到 excel 表的数据透视表和图表。我想创建一个按钮,当按下该按钮时,删除表中的任何数据并将其替换为来自访问数据库中保存的查询的更新数据。我编写了以下代码,但在运行该过程时出现“无效的过程调用或参数”错误。有谁知道我哪里出错了?

   'button on excel form runs procedure to remove current data in table then 
   'import data from query in MS access database

Sub ImportData()
    Call CleanTheTable("MMPres_MainData", "MainData")
    Call ImportAccessData("qry_MMPres_Main", "MMPres_MainData", "MainData"
End Sub   

   'procedure finds database file and imports query into excel table

Sub ImportAccessData(qry As String, sht As String, tbl As String)

On Error GoTo ErrorHandler

    Const dbLoc As String = "D:\AccessPractice\CTDB\CardiothoracicDB_v2_Current.accdb"
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim bk As Workbook
    Dim Wsht As Worksheet

    Set bk = ActiveWorkbook
    Set Wsht = bk.Worksheets(sht)
    Set db = DBEngine.OpenDatabase(dbLoc)
    Set rs = db.OpenRecordset(qry, dbOpenSnapshot)

    Wsht.ListObjects(tbl).Range("A1").CopyFromRecordset (rs)

    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
    Set Wsht = Nothing
    Set bk = Nothing
    Exit Sub

ErrorHandler:
    Application.StatusBar = ""
    MsgBox ("Error: " & Err.Number & " " & Err.Description)
    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
    Set Wsht = Nothing
    Set bk = Nothing

End Sub

假设您已经为 设置了必要的库引用DAO,您得到的错误就在这一行:

Wsht.ListObjects(tbl).Range("A1").CopyFromRecordset (rs)

改成这样:

Wsht.ListObjects(tbl).Range(2, 1).CopyFromRecordset rs

也可能:

Wsht.ListObjects(tbl).HeaderRowRange.Offset(1).CopyFromRecordset rs

总之:

1-删除周围的括号 (rs)

2- 不要覆盖表的标题(即第 1 行),从第二行开始复制记录集。

3-所述方法RangeListObject比较混乱,它返回表的整个范围内,但不能直接送入一个“A1式”基准,它的工作原理更像的Cells工作表的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章