みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ExcelVBAでACCESSのクエリに接続したい

Excel、ACCESSの2003を使用しています。

Excelで、指定した期間の情報をmdb上よりExcel側に出力する処理を考えています。
mdbファイルの接続先がテーブルならうまく処理できます。
しかし今回の接続先がクエリの為か、処理を動かしてもエラーは出ないのですが値が無い扱いになっています。

mdbのテーブルにはリンクテーブルで2つのテーブルがあります。
クエリ側で2つのテーブルをリレーションしており、クエリで表示している内容をExcel側に返したいのです。

下記の処理はクエリに接続をしていないのでしょうか?


Option Explicit

Const cnsADO_CONNECT1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
Dim dbCon As New ADODB.Connection
Dim dbRes As New ADODB.Recordset
Dim dbCol As ADODB.Field

Dim strSQL As String, strStartDate As String, strEndDate As String
Dim lngGyo As Long, lngCol As Long
Dim strRootPath As String, strFileName As String, strPath As String
Dim intField As Integer, i As Integer, j As Integer


Public Sub ACCESS接続()

strRootPath = "\\11.111.11.1\00_テストフォルダ\"  'IPアドレスとフォルダ選択
strPath = "00_環境設定\01_テスト用\" 'パス先
strFileName "テスト.mdb" 'mdb名


dbCon.Open cnsADO_CONNECT1 & strRootPath & strPath & strFileName  'mdb接続

strStartDate = "#09/01/2014# AND "
strEndDate = "#09/23/2014#)"

'''''SQLビューの内容をそのまま'''''

strSQL = "SELECT テーブルA.年月日, テーブルA.実績No., テーブルB.依頼数, テーブルA.略号, テーブルA.作成No., テーブルA.数値No., テーブルA.名称, テーブルA.CD, テーブルA.長さ, テーブルA.場所, テーブルA.フラグ, "
strSQL = strSQL & "Format([年月日],""yyyy/mm/dd"") AS 作成年月日"

strSQL = strSQL & vbNewLine & "FROM テーブルB INNER JOIN テーブルA ON テーブルB.依頼No.=テーブルA.実績No."

strSQL = strSQL & vbNewLine & "WHERE (((テーブルA.年月日) Between "
strSQL = strSQL & strStartDate
strSQL = strSQL & strEndDate
strSQL = strSQL & " AND ((テーブルA.CD) Not Like ""%KN%"") AND ((テーブルA.場所) Like ""*IO*"") AND ((テーブルA.フラグ) Is Null))"

strSQL = strSQL & vbNewLine & "ORDER BY テーブルA.年月日;"

'''''SQLビューの内容をそのまま'''''

dbRes.Open strZisseki_SQL, dbCon, adOpenKeyset, adLockReadOnly 'レコードセット

intField = dbRes.Fields.Count

lngGyo = 1
dbRes.MoveFirst
Do Until dbRes.EOF
lngGyo = lngGyo + 1
lngCol = 0
For Each dbCol In dbRes.Fields
lngCol = lngCol + 1
Cells(lngGyo, lngCol) = dbCol.Value
Next dbCol
dbRes.MoveNext
Loop

dbRes.Close: Set dbRes = Nothing

End Sub

投稿日時 - 2014-09-23 17:04:52

QNo.8765393

困ってます

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

ADO接続をやっていて、意図せず、「あれ一個も抽出されない」という事はあるものです。そのような時は、まず、dbRes.Openの前に、Debug.print strSQLを実行させて、意図する形になっているか確認するのが基本です。本質問の様に途中経過までそのまま載せて質問する様ではそれが出来ていないと推察します。
意図する形なのに抽出されないときは、SQLを単純化していって、どこまでが正しく、どこでおかしくなるかを特定します。
ご自分のデバッグのためにも、また有意義なアドバイスを得るためにも問題点の単純化が重要です。

また、テーブルの構造と、どんな条件で抽出したいのかを明示する方が回答が得られやすいと思います。

深く読んで無いですが、ワイルドカードの%KN%と、*IO*の混在は気になります。ADOのワイルドカードは%です。
下記をご参照下さい。

http://www.nurs.or.jp/~ppoy/access/access/acM012.html

投稿日時 - 2014-09-24 23:44:52

お礼

ご丁寧にありがとうございます。

Debug.print strSQLを実行させて、クエリのSQLビューと照らし合わせていたのですが原因がよく分かりませんでした。

>深く読んで無いですが、ワイルドカードの%KN%と、*IO*の混在は気になります。ADOのワイルドカードは%です。

そして原因はここでした・・・。
%にしていないがために表示されていなかったようです。

ご迷惑おかけしました、そしてありがとうございました。

投稿日時 - 2014-09-25 20:40:26

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問