[[20091112135921]] 『ACCESSクエリの条件更新』(管理人) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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


ichinose様

 ご教授ありがとうございました。
当方の実力不足のため、ACCESSでの処理はクエリを順に起動させる
マクロを起動することで行っており、直接SQL等コードを書くといった
ことは未経験です。
のでトライしてみます。

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.