• ベストアンサー

エクセルからアクセスの全てのクエリ名を取得すること

エクセルからアクセスの全てのクエリ名を取得することはできますか? アクセスからなら http://www.accessclub.jp/vbakaisetu/58.html これでできたのですが、 エクセルからアクセスの全てのクエリ名をシートに書き出したいのですが どうすればいいでしょうか? エクセルからアクセスのクエリ名を取得するプロシージャーを実行して 変数に格納し、エクセルに戻すしかないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

Excelのコード表の参照設定で、 Microsoft DAO xx Object Library にチェックを入れて置いてください。 なお、xxは3.6のような数字です。 Sub test()   Dim db As DAO.Database   Dim qdf As DAO.QueryDef   Dim myQdfName As Variant   Dim i As Long   Dim j As Long   Set db = OpenDatabase("C:\Temp\sample.mdb")   'クエリ名の取り出し   ReDim myQdfName(i)   For Each qdf In db.QueryDefs     If Left(qdf.Name, 1) <> "~" Then       ReDim Preserve myQdfName(i)       myQdfName(i) = qdf.Name       i = i + 1     End If   Next qdf   'シートへの書き込み   For j = LBound(myQdfName) To UBound(myQdfName)     With Worksheets("Sheet1")       .Cells(j + 1, 1).Value = myQdfName(j)     End With   Next j   Set qdf = Nothing   db.Close: Set db = Nothing End Sub クエリの数は不明なので、一旦配列に取り込み、 それをシートに書き込む仕様にしています。 なお、No1さんのおっしゃるMsQueryからは、肝心なMSysObjectsや MSysQueriesの列は参照できないようです。Accessのバージョンに よってことなるかもしれませんが。

vtrosaigwcq
質問者

お礼

できました~ ~sq_cフォーム1~sq_cコンボ0 とか言う変なオブジェクトまで取得されちゃうからifするんですね。 このコードはエクセルからでもアクセスからでも実行可能のようですね。 有難うございます。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

記憶があいまいなのと環境が無いので試せませんので非常に無責任な状態ですが。 隠しオブジェクトのMSysなんとかというテーブルに、定義されてるオブジェクト名が一覧になってませんでしたっけ? どこかの列の特定の値でオブジェクトの種類が"クエリ"と判断できたような気がします。 MSQueryで接続できるならそれで取得するとか。 違ってたらごめんなさい。

vtrosaigwcq
質問者

お礼

システムオブジェクトのMSysQueriesを見てみましたが クエリ名らしきものはありませんでした。 むしろ何のデータが入ってるのか理解できませんでした笑

関連するQ&A

  • エクセルVBAでアクセスの更新クエリを実行

    エクセルVBAでアクセスの更新クエリを実行する方法はありますか? アクセスもエクセルも常に起動している状態です。 エクセルからアクセスの更新クエリを実行するコードを教えてください。 アクセスで実行するとしたら Sub test1() DoCmd.OpenQuery "更新クエリ" End Sub というコードになります。 できれば、ADODBを使ったやり方がいいのですが、 エクセルからアクセスのプロシージャーのtest1を呼ぶしかないのでしょうか?

  • エクセルからアクセスのテーブルやクエリのレコード数を取得することは可能でしょうか?

    エクセルもアクセスも起動している状態で、エクセル側でマクロを実行してアクセスのとあるテーブルやクエリのレコード数を取得したいのですがどうしていいのかわかりません。アクセス自体での取得方法もわかりません。SQLというのを使わないと不可能なのでしょうか? VBAで可能でしたらどういったコードを書けばいいのでしょうか? よろしくお願いします。

  • アクセス 複数クエリ⇒エクセルの各シートに

    MS Access と MS Excelとの連携テクニックについて、 教えてください。 アクセスで、クエリA・クエリB があるとすると、 マクロ・VBAを使用して、 これらを、エクセルファイル(ファイル名は任意)の 各シートとして、Sheet1,Sheet2としてエクスポートしたいのですが、 可能でしょうか?

  • アクセスからエクセルのプロシージャーを実行させたい

    オフィス2007です。 ////////////////////////////////////////////////////////// ‘Excel側の標準モジュール ////////////////////////////////////////////////////////// Sub Excelのプロシージャー() MsgBox "Excelです" End Sub ////////////////////////////////////////////////////////// ‘Access側の標準モジュール ////////////////////////////////////////////////////////// Sub Accessのプロシージャー() Dim xlsWB As Object Dim MyFileName As String MyFileName = "D:\Accessからプロシージャーの実行テスト用ファイル.xlsm" Set xlsWB = GetObject(MyFileName) xlsWB.Application.Run xlsWB.Name & "!Excelのプロシージャー" Set xlsWB = Nothing End Sub の状態で、アクセス側から Accessのプロシージャー実行すると、 ////////////////////////////////////////////////////////// マクロ'Accessからプロシージャーの実行テスト用ファイル.xlsm!Excelのプロシージャー' を実行できません。 このブックでマクロが使用できないか、 またはすべてのマクロが無効になっている可能性があります。 ////////////////////////////////////////////////////////// となります。 エクセル側は、「すべてのマクロを有効にする」にしているし、エクセルファイルを単独で開き、 Excelのプロシージャーを実行すると問題なく動きます。 同じ条件で、2003で検証すると問題なく動きます。(拡張子は適宜変えてます) エクセルのパスが間違ってるのかな?と思い、適当なパスに変えたところ、 「オートメーション操作中にファイル名またはクラス名を見つけられませんでした。(Error 432)」 というエラーがでたので、パスは合ってます。 原因がわかる方、ご回答よろしくお願いします。

  • 現在開いている全てのアクセスのファイル名を取得

    現在開いている全てのアクセスのファイル名を取得することは可能でしょうか? http://officetanaka.net/excel/vba/tips/tips61.htm のようにタスクマネージャーの一覧を取得して アクセスかどうかを取得するしかないでしょうか? しかし アプリケーションタイトルを設定してしまったので アクセスは上記のvbaコードを実行しても 「Microsoft Access」は取得できません。 どうしたらよいでしょう? 何か良い案はありますでしょうか?

  • ACCESS Excelの出力について

    stressmanといいます。 実は、ACCESSでクエリをExcelへ出力をしたいのですが、 ここで、既存のExcelのファイルのセルを指定して出力 というこはできるのでしょうか? 選択クエリで必要な情報を抜き出し、そのクエリを 「営業報告書.xls」というファイルのあらかじめ記載して ある「顧客名」「住所」のセルに格納していきたいのです。 マクロで「コマンド実行」-「Excel出力」を使って みたのですが、新しくファイルを開き、クエリのデザイン そのままで出力されます。 宜しくお願いします。

  • Access VBA 全クエリ 繰り返し

    Access VBAについてお尋ねさせていただきます。 Access VBAを利用して、以下の繰り返し処理を実行したいです。 (1):レコードの有無にかかわらず、すべてのクエリの名称だけを配列に取得する繰り返し処理 (2):レコードの有無にかかわらず、すべてのクエリを開き、各クエリのレコード件数を配列に取得する処理 どのように記述すればよろしいでしょうか?

  • ACCESSのクエリーからEXCELにエクスポート時のエラー

    WINDOWS ME上でACCESS 97を使っています。 ACCESSのクエリーをEXCELにエクスポートしています。 10個のクエリーを1つのファイルにエクスポートしているのでクエリー名のシートが10個ファイルにできます。そのEXCELのファイルを更新して毎月作成していくのですが、そのうちのいくつかのシートが上書きできません。まず「同じ名前がありますが名前を変更しますか?」という旨の確認がありそのはまま「はい」にするとすんなり上書きしてくれるシートと「同じ名前のシートが存在します」とエラー出て、データーを上書きできないシートが同じファイル内にあります。シートを削除してエクスポートすればエラーはかからないのですが、集計表シートと計算式をいれているのでその都度削除して計算式を再度作成していくのも大変です。なにか思い当たることがありますか?

  • Access クエリのデータ型について

    AccessでPablic変数を日付範囲指定、クエリの抽出条件に指定したのですが、「抽出条件でデータ型が一致しません。」とのエラーメッセージで抽出出来ません。 【処理フロー】 1.フォームで、開始日と終了日をPublic変数へ格納 2.データ抽出クエリの日付条件に"GetData()"Public Functin VBAで変数を格納した値をクエリの抽出条件に返す。 《変数》 '開始日の宣言 Public sDate As Date '終了日の宣言 Public eDate As Date 《GetData()》 Public Function GetDate() MsgBox "開始日は、" & sDate & vbCrLf & "終了日は、" & eDate GetDate = ">=#" & sDate & "# And <=#" & eDate & "#" MsgBox ("Where文は、" & GetDate) End Function デバッグの為、"GetDate()"の戻り値を、メッセージボックスで表示してますが、戻り値は正常とおもわれますが、「抽出条件でデータ型が一致しません。」でクエリが実行できません。 ここを参考に、上記仕様にしました。 http://www.tsware.jp/tips/tips_369.htm どうすれば、日付範囲をPablic変数から指定出来るか、お教え頂けましたら幸いです。 ちなみに、Pablic変数にしているのは、他のクエリでもこの日付範囲を使いたい為です。 もし、ほかに良い処理方法が有れば、ご教授ください。

  • <<ACCESS2000>>クエリの結果をエクセルで表示させることはできますか?

    宜しくお願いします。 アクセスのクエリで実行した内容を フォームではなく、エクセルで表示させたいのですが、方法はありますか? フォームのように開くとマクロなどでクエリが 勝手に動き、結果がエクセルで表示される様にしたいのですが。

専門家に質問してみよう