2014-09-01 53 views
0

我試圖使用更新按鈕從訪問數據庫查詢中獲取信息到Excel電子表格。我發現了一些應該可以工作的代碼,但是當我運行它時,它會說「運行錯誤'3061'。給出的參數太少,至少有1個預期值」。使用更新按鈕將信息填充到Excel中使用更新按鈕VBA

這裏是代碼:


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中添加了對access和DBO的引用。

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

+1

查詢是否需要參數? – Rory 2014-09-01 13:04:33

回答

1

查詢的SQL中有一些db引擎認爲是參數的東西。我猜你的查詢包含一個可在Access應用程序會話中使用的函數,但不能用於從Access會話外部運行的查詢。可能性包括用戶定義的功能和許多VBA功能。

無論我的猜測是否正確,db引擎認爲是一個參數。找出那是什麼。

如果您知道如何設置臨時斷點,請在Set QD1行上設置一個臨時斷點。否則,在該行之後添加一條Stop語句。 (您完成測試後刪除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。