因此,我的公司最終升級到MS Office 2010.直到現在我一直在2003年工作。我是一名SQL程序員,我不斷創建報告在Excel中從我們的數據庫中提取數據。大多數情況下,我將創建接受參數的宏,用戶將輸入特定的單元格,更改查詢,然後根據參數進行刷新。從Excel 2003中導入數據從Excel數據庫VS Excel 2010(VBA)
這是一個非常簡單的例子:
- 在Excel 2003中我會打開一個新的工作簿。
- 點擊「數據」,然後點擊「導入外部數據」,然後點擊「新建數據庫查詢」。
- 然後它會提示您選擇一個數據源,因此我會選擇我想要查詢的數據庫(已經使用ODBC連接進行了設置)。
然後我退出查詢嚮導窗口,然後當我在Microsoft Query Editor中時,只需輸入我的查詢。
爲了簡單起見,我會從一個叫
Agents
表這僅僅是一個對於公司和他們的EmployeeIds
工作的代理列表中選擇*
。select * from Agents
然後我的「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中
這裏工作是我的步驟和下面的錯誤:
- 我打開Excel 2010中,並進入「數據」選項卡。
- 在「獲取外部數據」部分,我點擊「從其他來源」,然後從下拉列表中選擇「從Mircrosoft查詢」。
- 然後彈出選擇數據源框,它基本上與上述步驟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年創建報告時,我無法實現它的工作。這似乎是由於某種原因,它只是無法找到查詢來改變其命令文本,然後刷新。請幫助,我一直堅持這個好幾天!
感謝蒂姆,我真的很感謝幫助。我調整了上面的代碼,但後來得到了以下不同的錯誤,「運行時錯誤」438「對象不支持此屬性或方法」。我在google上搜索這個錯誤並在msdn網站上搜索,但還沒有提出修正。任何建議,爲什麼這可能會發生將不勝感激。再次感謝Bill Bill – BillSchwartzky 2010-10-15 15:13:00
好吧,Tim,這是答案。感謝上帝,我終於找到了工作。 「Set oQuery = Workbooks(」Book 1「)。Sheets(」Sheet 1「)。ListObjects(1).QueryTable」 – BillSchwartzky 2010-10-15 16:51:30