使用更新按钮VBA从Access填充信息到Excel

时间:2014-09-01 12:53:14

标签: excel vba excel-vba ms-access button

我试图通过更新按钮将访问数据库查询中的信息发送到Excel电子表格。我发现了一些应该正常运行的代码,但是当我运行它时会说出"运行错误' 3061'。给出的参数太少,至少有1个预期"。

以下是代码:


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

当我调试它停在"设置RS1"并说它是空的。也许我甚至没有连接我的Access列?我检查了列的名称,它们是相同的。我还在excel vba中添加了对访问和DBO的引用。

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

1 个答案:

答案 0 :(得分:1)

您的查询SQL中有一些内容,db引擎认为它是一个参数。我猜你的查询包含一个可以在Access应用程序会话中使用的函数,但是不能在从Access会话外部运行的查询中使用。可能性包括用户定义的函数和许多VBA函数。

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

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

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

当您运行代码时,这两种方法都会触发中断模式。从中断模式,您可以使用立即窗口检查查询的Parameters集合。

Debug.Print QD1.Parameters.Count

如果这告诉您Parameters.Count为1,则可以找出该参数的名称。请注意,参数集合项的编号从0开始。

Debug.Print QD1.Parameters(0).Name

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