- ベストアンサー
エクセルからアクセスの全てのクエリ名を取得すること
エクセルからアクセスの全てのクエリ名を取得することはできますか? アクセスからなら http://www.accessclub.jp/vbakaisetu/58.html これでできたのですが、 エクセルからアクセスの全てのクエリ名をシートに書き出したいのですが どうすればいいでしょうか? エクセルからアクセスのクエリ名を取得するプロシージャーを実行して 変数に格納し、エクセルに戻すしかないのでしょうか?
- みんなの回答 (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のバージョンに よってことなるかもしれませんが。
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
記憶があいまいなのと環境が無いので試せませんので非常に無責任な状態ですが。 隠しオブジェクトのMSysなんとかというテーブルに、定義されてるオブジェクト名が一覧になってませんでしたっけ? どこかの列の特定の値でオブジェクトの種類が"クエリ"と判断できたような気がします。 MSQueryで接続できるならそれで取得するとか。 違ってたらごめんなさい。
お礼
システムオブジェクトのMSysQueriesを見てみましたが クエリ名らしきものはありませんでした。 むしろ何のデータが入ってるのか理解できませんでした笑
お礼
できました~ ~sq_cフォーム1~sq_cコンボ0 とか言う変なオブジェクトまで取得されちゃうからifするんですね。 このコードはエクセルからでもアクセスからでも実行可能のようですね。 有難うございます。