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
お礼
ありがとうございます。自己解決できました。
補足
お返事ありがとうございます。下記のようにプログラムを修正したのですが、エラーが発生してしまいます。 これはどう対処すればよろしいでしょうか? <エラー内容> 型 'System.Data.DataSet' のオブジェクトを型 'System.Windows.Forms.BindingSource' にキャストできません。 '//CellFormattingイベントハンドラ Private Sub dgrview_CellFormatting(ByVal sender As Object, _ ByVal e As DataGridViewCellFormattingEventArgs) _ Handles dgrview.CellFormatting If e.ColumnIndex = 1 Then ' 画像カラム ' データセットのテーブルを取得 Dim tbl As DataTable = CType(CType(dgrview.DataSource, BindingSource).DataSource, DataSet).Tables("テーブル") ←ここでエラー発生 ' 表示する行を取得 Dim row As DataRow = tbl.Rows(e.RowIndex) Try ' イメージの取得 or 設置 Dim bmp As Bitmap = Bitmap.FromFile(row("Image")) e.Value = bmp Catch ex As Exception End Try End If End Sub