[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ADO接続でAccessクエリ結果を抽出できない』(hajy)
当方のレベルはAccess初級者(基本的な操作)、
Excelは最近ごく簡単なVBAをいじりだした程度です。
現在Excelマクロを使って「管理sheet」シートI列のセルに
記載した複数のAccessクエリの抽出データをExcelシートに
ワンクリックで出力したいと考えております。
そのため下記のコードを実行しましたが、
データをExcelに出力できたシートもあれば、
逆に全く出力できないシートもありました。
(特段エラーメッセージは無し。
出力できなかったクエリもAccessで手動で実行すれば、
抽出データがあることは確認しました。
また、「管理sheet」シートに記載したクエリ名称はAccessクエリからコピペしております。)
どのようにすれば、すべてのクエリデータを出力できるようになるのでしょうか?
ご教示のほどよろしくお願いいたします。
<使用環境>
OS:windows7 professional 64bit
Microsoft Office:Office2013 32bit
Excel VBA 参照設定:Microsoft ActiveX Data Objects 6.1 Library
<コード>
Dim rcs As ADODB.Recordset Dim cnStr As String cnStr = "provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" _ & "C:\Users\*********\データ.mdb"
Sheets("管理sheet").Select
Dim i For i = 2 To Cells(Rows.Count, 9).End(xlUp).Row
'データを貼り付けるシート作成 Worksheets.Add ActiveSheet.Name = Sheets("管理sheet").Cells(i, 9)
Set rcs = New ADODB.Recordset rcs.Open Source:=ActiveSheet.Name, ActiveConnection:=cnStr, _ CursorType:=adOpenStatic, Options:=adCmdTable
ActiveCell.CopyFromRecordset rcs
rcs.Close
Set rcs = Nothing
Sheets("管理sheet").Select
Next
以上
< 使用 Excel:Excel2013、使用 OS:Windows7 >
そのAccessクエリはmdb内のテーブルを参照しているのですか?
外部のSQLサーバとかのリンクテーブルは使用していないですか?
(ウッシ) 2014/11/19(水) 15:17
こんにちは。
すべてのクエリはmdb内のテーブルを参照しており、
外部のSQLサーバ等のリンクテーブルは使っておりません。
いかがでしょうか?
(hajy) 2014/11/19(水) 17:11
>Set rcs = New ADODB.Recordset > rcs.Open Source:=ActiveSheet.Name, ActiveConnection:=cnStr, _ > CursorType:=adOpenStatic, Options:=adCmdTable
このメソッド、つまり、管理sheetというシートのセルI2から始まる値がクエリ名になっているということですよね!!
どのクエリが表示されないのか 確認してください。
そのクエリ名で表示されるSQLはどんな内容ですか?
コードを拝見して、 Options:=adCmdTable ちょっとだけこれが気になりますが・・。
rcs.Open Source:=ActiveSheet.Name, ActiveConnection:=cnStr, _ CursorType:=adOpenStatic
これで試してみるとどうなりますか?
(ichinose) 2014/11/20(木) 05:36
後は、
rcs.Open "SELECT * FROM [" & ActiveSheet.Name & "]", cnStr, adOpenStatic
としてみるとか。
クエリ名が問題かも・・・
(ウッシ) 2014/11/20(木) 08:07
>このメソッド、つまり、管理sheetというシートのセルI2から始まる値がクエリ名になっているということですよね!!
おっしゃる通りです。
出力されないクエリ名で表示されるSQLは、次の通りです。
[税区分 from一覧].税処理コード WHERE (((法基_対象データ.摘要1) Like "*配当*") AND ((法基_対象データ. _ 科目コード)=9521000)) ORDER BY 法基_対象データ.伝票日付;
> rcs.Open Source:=ActiveSheet.Name, ActiveConnection:=cnStr, _
> CursorType:=adOpenStatic
>
> これで試してみるとどうなりますか?
試してみましたが、変わりありませんでした。
(hajy) 2014/11/20(木) 09:36
> rcs.Open "SELECT * FROM [" & ActiveSheet.Name & "]", cnStr, adOpenStatic
>
>としてみるとか。
試してみましたが、変わりありませんでした。
クエリ名は、「法基_法人税等_配当」です。
最初は、もっと長い名称だったのですが、上記のように短縮しても変わりありませんでした。
(hajy) 2014/11/20(木) 09:41
(ウッシ) 2014/11/20(木) 10:00
SQL でやる場合は ActiveSheet.Name はクエリ名でなくテーブル名では?
追記: でもそれで状況が変わらないということは、テーブル名とクエリ名が被っている? (Mook) 2014/11/20(木) 11:37
>Like文 これ、ビンゴではないですか?
ADOでは、ワイルドカードは、% ですよね?
クエリのSQLを」ひっぱりだしてきて、* を %に変更して 実行するか
daoで行うか?
ですね
(ichinose) 2014/11/20(木) 12:10
これ、ビンゴではないですか?
ichinoseさん、そうですよね。
なんか記憶の片隅にあったような気が・・・
(ウッシ) 2014/11/20(木) 12:24
Like文の「*」を「%」に変えれば、無事にデータ出力できました。
ありがとうございました。
(hajy) 2014/11/20(木) 12:48
>ADOでは、ワイルドカードは、% ですよね?
なんて記述しましたが、
http://office.microsoft.com/ja-jp/access-help/HA001231436.aspx 現在参照不可
正確には、これです。
>Like文の「*」を「%」に変えれば、無事にデータ出力できました。
これは、mdbファイルのクエリのSQLを*から%に代えたのですか?
原因が ワイルカードにあるということなんですが・・・・。
どのようにするかは、ここからです。mdbファイルのクエリを*から%にすれば、
Excel/VBAからは、作動しますが、逆に アクセスからクエリを実行すれば、作動しません。
これは、これでよいのか? ということです。
原因はわかりましたが、では、どうするか? は、よく考えてみてください。
(ichinose) 2014/11/20(木) 17:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.