【发布时间】:2017-07-08 19:02:57
【问题描述】:
我有一个 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?
-
(应该是
Microsoft Office 16.0 Access database engine object,其中16.0是你的office版本。 -
这只是一个标准的调试练习。注释掉行只是一种技术,但更有用的技术(如局部变量观察、断点和逐行执行)可能会更有帮助,而无需更改现有代码。调用
Debug.Print来跟踪执行并将值显示到即时窗口也很有帮助且非常有效。