2010-10-13 175 views
2

因此,我的公司最終升級到MS Office 2010.直到現在我一直在2003年工作。我是一名SQL程序員,我不斷創建報告在Excel中從我們的數據庫中提取數據。大多數情況下,我將創建接受參數的宏,用戶將輸入特定的單元格,更改查詢,然後根據參數進行刷新。從Excel 2003中導入數據從Excel數據庫VS Excel 2010(VBA)

這是一個非常簡單的例子:

  1. 在Excel 2003中我會打開一個新的工作簿。
  2. 點擊「數據」,然後點擊「導入外部數據」,然後點擊「新建數據庫查詢」。
  3. 然後它會提示您選擇一個數據源,因此我會選擇我想要查詢的數據庫(已經使用ODBC連接進行了設置)。
  4. 然後我退出查詢嚮導窗口,然後當我在Microsoft Query Editor中時,只需輸入我的查詢。

    • 爲了簡單起見,我會從一個叫Agents表這僅僅是一個對於公司和他們的EmployeeIds工作的代理列表中選擇*

    • select * from Agents

  5. 然後我的「x」出來的查詢編輯器,並彈出一個框,稱爲「導入數據」它會詢問你想要把數據:在現有工作表?一個新的工作表?等我只是它在現有工作表返回數據的單元格開始A2

於是我就寫在Visual Basic編輯器這個簡單的宏工作簿中的模塊中:

Sub Refresh() 

Dim oQuery as QueryTable 
Dim oAgent as String 

set oQuery = Sheet1.QueryTables(1) 

oAgent = Sheet1.Range("A1") 

oQuery.CommandText = "select * from Agents where Agent = '"+oAgent+"'" 
oQuery.Refresh 

End Sub 

我創建了一個運行這個宏的按鈕並將其粘貼在B1中。因此,用戶打開報告,輸入姓名到A1,點擊按鈕,該代理及其代碼出現在下表中。真的很簡單吧?但我不能得到這個在Excel 2010中

這裏工作是我的步驟和下面的錯誤:

  1. 我打開Excel 2010中,並進入「數據」選項卡。
  2. 在「獲取外部數據」部分,我點擊「從其他來源」,然後從下拉列表中選擇「從Mircrosoft查詢」。
  3. 然後彈出選擇數據源框,它基本上與上述步驟3,4和5完全相同。

然後我寫了相同的宏,創建按鈕,並將其分配給馬可,但是當我按一下按鈕我收到以下錯誤:

Run-time error '9': 
Subscript out of range 

我打的調試和調試器突出了這種線

Set oQuery = Sheet1.QueryTables(1) 

我試圖使該行更具體的,像這樣:

Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").QueryTables(1) 

但我只是得到同樣的錯誤。

所以基本上我需要知道的是如何在Excel 2010中做這種事情。但是這裏有一個有趣的提示:如果我在Excel 2003中創建此報表,請將其保存爲.xls,然後在2010年,它會工作。我甚至可以將一個副本保存爲.xlsm,然後打開它,它將與這個相同的宏一起工作。只有當我在2010年創建報告時,我無法實現它的工作。這似乎是由於某種原因,它只是無法找到查詢來改變其命令文本,然後刷新。請幫助,我一直堅持這個好幾天!

回答

2

在XL2007和2010 querytables包含在 「的ListObject」 工作表中,所以你只需要調整你的代碼:

Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").ListObjects(1).QueryTables(1) 

http://msdn.microsoft.com/en-us/library/ff841237.aspx

+0

感謝蒂姆,我真的很感謝幫助。我調整了上面的代碼,但後來得到了以下不同的錯誤,「運行時錯誤」438「對象不支持此屬性或方法」。我在google上搜索這個錯誤並在msdn網站上搜索,但還沒有提出修正。任何建議,爲什麼這可能會發生將不勝感激。再次感謝Bill Bill – BillSchwartzky 2010-10-15 15:13:00

+0

好吧,Tim,這是答案。感謝上帝,我終於找到了工作。 「Set oQuery = Workbooks(」Book 1「)。Sheets(」Sheet 1「)。ListObjects(1).QueryTable」 – BillSchwartzky 2010-10-15 16:51:30