Excel 2003 vs Excel 2010(VBA)のSQLデータベースからのデータのインポート
-
30-09-2019 - |
質問
だから、私の会社は最終的にMS Office 2010にアップグレードしました。これまで2003年に働いていました。私はSQLプログラマーであり、データベースからデータを引き出すExcelで常にレポートを作成しています。ほとんどの場合、ユーザーが特定のセルに入力するパラメーターを受け入れるマクロを作成し、クエリを変更し、パラメーターに従って更新します。
これが本当に簡単な例です:
- Excel 2003では、新しいワークブックを開きます。
- 「データ」をクリックしてから「外部データのインポート」と「新しいデータベースクエリ」をクリックします。
- 次に、データソースを選択するように求められるため、照会したいデータベースを選択します(既にODBC接続で設定されていました)。
次に、クエリウィザードウィンドウからキャンセルし、Microsoftクエリエディターにいるときにクエリを入力します。
簡単にするために、選択します
*
呼ばれるテーブルからAgents
これは、会社と彼らのために働くエージェントの単なるリストですEmployeeIds
.select * from Agents
次に、クエリエディターから「x」を「 "x」し、「インポートデータ」と呼ばれるボックスがポップアップします。新しいワークシート?など。セルから始まる既存のワークシートのデータを返してもらいます
A2
それで、私はこのシンプルなマクロを、ワークブックのモジュールに視覚的な基本エディターに書きます。
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
, 、ボタンにヒットし、そのエージェントとそのIDが下の表に表示されます。本当に簡単ですよね?しかし、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年にレポートを作成したときだけ、機能させることができません。何らかの理由で、コマンドテキストを変更してから更新するクエリを見つけることができないようです。助けてください、私はこれに何日も立ち往生しています!
解決
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
ティム