使用更新buttonVBA从Access将信息填入Excel

我试图从一个访问数据库查询获取信息的Excel电子表格与更新button。 我发现了一些应该工作的代码,但是当我运行它时,它提到了一些关于“运行错误3061”的信息,给出的参数太less,至less有一个是预期的“。

代码如下:


Sub Rektangelmedrundadehörn1_Klicka() Sheets("Blad1").Range("A2:B500").ClearContents Set DB1 = DBEngine.OpenDatabase("Path to my DB") Set QD1 = DB1.QueryDefs("Name of my Query") Set RS1 = QD1.OpenRecordset(dbOpenSnapshot, dbReadOnly) Sheets("Blad1").Range("A2").CopyFromRecordset RS1 RS1.Close QD1.Close DB1.Close End Sub 

当我debugging它停在“设置RS1”,并说它是空的。 也许我甚至没有连接我的Access列? 我已经检查了列的名称,他们是一样的。 我还在excel vba中添加了对access和DBO的引用。

我只在Excel中使用2列。 A1,B1

在查询的SQL中有一些数据库引擎认为是一个参数。 我猜你的查询包含一个Access应用程序会话中可用的函数,但不能用于从Access会话外运行的查询。 可能性包括用户定义的function和许多VBAfunction。

无论我的猜测是否正确,db引擎认为是一个参数。 找出是什么。

如果您知道如何设置临时断点,请在Set QD1行上设置一个断点。 否则,在该行之后添加一个Stop语句。 (完成testing后移除Stop 。)

 Set QD1 = DB1.QueryDefs("Name of my Query") Stop 

任何一种方法都会在运行代码时触发中断模式。 从break模式中,您可以使用Immediate窗口来检查查询的Parameters集合。

 Debug.Print QD1.Parameters.Count 

如果这告诉你Parameters.Count是1,那么你可以找出该参数的名称。 请注意,参数收集项目从0开始编号。

 Debug.Print QD1.Parameters(0).Name 

一旦你看到参数的名字,希望问题会很清楚。 如果没有,请向我们展示参数名称和查询的SQL。