• ベストアンサー

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

エクセルからアクセスの全てのクエリ名を取得することはできますか? アクセスからなら 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を見てみましたが クエリ名らしきものはありませんでした。 むしろ何のデータが入ってるのか理解できませんでした笑