2

それで、私の会社は最終的に MS Office 2010 にアップグレードしました。今までは 2003 年に働いていました。私は SQL プログラマーで、データベースからデータを引き出すレポートを Excel で常に作成しています。ほとんどの場合、ユーザーが特定のセルに入力するパラメーターを受け入れるマクロを作成し、クエリを変更して、パラメーターに従って更新します。

これは本当に簡単な例です:

  1. Excel 2003 では、新しいブックを開きます。
  2. [データ]、[外部データのインポート]、[新しいデータベース クエリ] の順にクリックします。
  3. 次に、データ ソースを選択するように求められるので、クエリを実行するデータベース (ODBC 接続が既にセットアップされている) を選択します。
  4. その後、クエリ ウィザードのウィンドウをキャンセルして、Microsoft クエリ エディタにいるときに、クエリを入力するだけです。

    • 簡単にするために、会社で働くエージェントとそのエージェントのリストである*というテーブルから選択します。AgentsEmployeeIds

    • select * from Agents

  5. 次に、クエリ エディターから "x" をクリックすると、"データのインポート" というボックスが表示され、データをどこに配置するかを尋ねられます。新しいワークシート?など。セルで始まる既存のワークシートのデータを返すだけですA2

そこで、Visual Basic Editor のワークブックのモジュールに、次の単純なマクロを記述します。

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 で動作させることはできません。

これが私の手順と次のエラーです。

  1. Excel 2010 を開き、[データ] タブに移動します。
  2. [外部データの取得] セクションで、[他のソースから] をクリックし、ドロップダウンから [Mircrosoft クエリから] を選択します。
  3. 次に、[Choose Data Source] ボックスがポップアップ表示されます。基本的には、上記の手順 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 年にレポートを作成したときだけ、それを機能させることができません。何らかの理由で、コマンド テキストを変更してから更新するためのクエリを見つけることができないようです。助けてください、私は何日もこれにこだわっています!

4

1 に答える 1

2

XL2007 および 2010 では、クエリ テーブルはワークシート内の "ListObject" に含まれているため、コードを次のように調整するだけで済みます。

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

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

ティム

于 2010-10-14T20:03:01.710 に答える