[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ACCESSクエリの条件更新』(管理人)
EXCELマクロにて、EXCELシート4・5枚から情報検索する処理のみをACCESSで やらせてるのですが、毎度変える必要のあるACCESSクエリの検索条件(検索期間 yyyymmdd)をEXCELマクロから更新できず、事前にハンドで更新しております。
EXCELマクロからACCESSクエリの検索条件を更新するってできるんでしょうか。
EXCEL2000
その作成されているクエリをパラメータクエリに変えるという方法もありますが・・・。 クエリを呼ばずに直接SQLを投げてしまってはどうですか?
本当は、テーブル構成等も聞かないと正確なコードにはなりませんが一例として、
例 db1.mdbファイルのtbl1というテーブルを検索することを考えます。
tbl1のフィールド構成 フィールド名 データの型 id オートナンバー 主キー ddd 日付型 sss テキスト型
こんな構成だとします。
excel側のコード
標準モジュール(Module1)に
option Explicit '================================================================= Sub sample1() Dim rs As Object Dim mysql As String Dim std As String Dim edd As String If open_ado_excel(ThisWorkbook.Path & "\db1.mdb") = 0 Then std = "2009/11/1" edd = "2009/11/3" mysql = "select * from tbl1 where [ddd] >=#" & std & "# and [ddd]<= #" & edd & "#;" If get_exec_sql(mysql, rs) = 0 Then With ActiveSheet .Cells.ClearContents .Range("a2").CopyFromRecordset rs .Range("a1:c1").Value = Array("id", "ddd", "sss") .Range("b:b").NumberFormatLocal = "yyyy/mm/dd" End With Call rs_close(rs) Else MsgBox "rs error" End If Call close_ado Else MsgBox "cn error" End If End Sub
別の標準モジュール(Module2)に
'======================================================================== Public cn As Object '=========================================================================== Function open_ado_excel(book_fullname As String) As Long On Error Resume Next link_opt = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & book_fullname & ";" Set cn = CreateObject("ADODB.Connection") cn.Open link_opt open_ado_excel = Err.Number On Error GoTo 0 End Function '=========================================================================== Sub close_ado() On Error Resume Next cn.Close Set cn = Nothing On Error GoTo 0 End Sub '=========================================================================== Function get_exec_sql(sql_str, rs As Object) As Long On Error Resume Next Set rs = cn.Execute(sql_str) get_exec_sql = Err.Number If Err.Number <> 0 Then MsgBox Err.Number & "::" & Err.Description End If On Error GoTo 0 End Function '=========================================================================== Sub rs_close(rs As Object) On Error Resume Next rs.Close Set rs = Nothing On Error GoTo 0 End Sub
これでSample1を実行すれば、tbl1からdddという日付フィ−ルドが、2009/11/1以上で2009/11/3以下の データが表示されます。
尚、db1.mdbと上記のコードがあるExcelブックは、同じフォルダ上にあるものとします。
この例の倣って試してみてください。
ichinose
ご教授ありがとうございました。 当方の実力不足のため、ACCESSでの処理はクエリを順に起動させる マクロを起動することで行っており、直接SQL等コードを書くといった ことは未経験です。 のでトライしてみます。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.