• ベストアンサー

accessで可能?

毎日朝一番に、accessのフォーム上から記録を抽出してエクスポートしてエクセルにしています。 その作業を自動化?というのはできませんか? 普段はmdbを開き、「ABCフォーム」の 「対象日FROM」「対象日TO」に昨日の日にちをセットしています(昨日一日分が対象、ということになります)。 そして記録抽出ボタンを押すと「ABC」というテーブルに結果が落ちるので、そのテーブルを開いてエクスポートを選び、エクセルで保存している状態です。 この作業を自動化できたら嬉しいのです。 毎日繰り返すと言うのはタスクに入れればいいような気がしますが、accessの自動化がわからず・・・。 皆さんのアドバイスを頂けると嬉しいです。使用バージョンは2003です。 よろしくお願いいたします。

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

  • ベストアンサー
  • worried
  • ベストアンサー率50% (1/2)
回答No.3

#1です。 本で勉強したので参考になるURLは知りません。 下記はサンプルです。 Access2000で作りまた。 DBとの接続方法はDAOです。 個人的にはADOよりDAOが好きなもので・・・(笑) モジュールへ貼り付けてマクロに登録すれば済むと思います。 使う場合は自己責任でお願いします。 Access2003使った事が無いもので・・・(T_T) 不明な点はGoogle等で検索すれば良いと思います。 とりあえず叩き台のつもりで作りました。 テーブル名:T_TEST カラム名:a,b 共にテキスト型です。 Excelブック名:Book1.xls 保存先はExcel、Access共に同じフォルダです。 --<< Sample >>-- Option Compare Database Option Explicit Private Const BookNM As String = "Book1.xls" '参照設定を変更する。 '× Microsoft ActiveX Data Objects 2.1 Library '○ Microsoft DAO 3.6 Object Library '○ Microsoft Excel 9.0 Object Library Public Sub main() Dim dbs As DAO.Database Dim rs As DAO.Recordset Dim strSql As String Dim objExcel As Excel.Application Dim myPath As String Dim key As String Dim r As Long '昨日の日付取得 key = Format(DateAdd("d", -1, Now), "yyyy/mm/dd") 'DB Set dbs = CurrentDb() strSql = "Select * from T_TEST where a='" & key & "';" Set rs = dbs.OpenRecordset(strSql) '出力先のExcelファイルを指定 Set objExcel = New Excel.Application myPath = Replace(dbs.Name, "test.mdb", BookNM, , , vbTextCompare) 'エクセル表示 'objExcel.Visible = True 'エクセル開く objExcel.workbooks.Open (myPath) r = 0 Do While Not rs.EOF r = r + 1 objExcel.Cells(r, 1) = rs("a").Value objExcel.Cells(r, 2) = rs("b").Value rs.MoveNext Loop objExcel.Application.DisplayAlerts = False objExcel.Save objExcel.Quit Set objExcel = Nothing rs.Close Set rs = Nothing dbs.Close Set dbs = Nothing MsgBox "End !!" End Sub

harapon
質問者

お礼

worriedさん、わざわざサンプルまで作成していただいてありがとうございました!いろいろな方法があるんだと感心しきりです・・・勉強せねば・・・ ありがとうございました!

その他の回答 (3)

  • worried
  • ベストアンサー率50% (1/2)
回答No.4

度々すいません。 #1です。 #3の件ですが DB名が漏れてました。 DB名:test.mdb それとソースが左詰めになってますね 申し訳ありませんが見やすいように加工してください。 回答してから気が付きました。 見づらくて御免なさい。 尚、最初はテスト用で新規に作成し慣れてから本番用に移行することをお勧めします。 本番移行時はMSGBOXを外す事を忘れずに・・・ コメントアウト、又は削除してください。 MSGBOXを外し忘れると、そこで中断し自動化できません。

noname#79209
noname#79209
回答No.2

自動実行にしてしまうと、同日の2度目以降の起動でも実行されてしまいます。 ご質問の作業をやったかどうかのテーブルを持たせないと、不都合が起こるかも。

harapon
質問者

お礼

vizzar様 ご回答ありがとうございます。別TBLを持たせるとなると私には難しすぎる話になりそうです・・・もっと勉強しないとダメですね。 ただ、それを仕掛けたいと思っているPCは常に起動状態にあるPCなのでタスクでいけるかなーと期待していたりもします。ご忠告ありがとうございます。

  • worried
  • ベストアンサー率50% (1/2)
回答No.1

私はaccess2000しか使ったことが無いのでaccess2003の事は分かりませんが 処理をマクロを作成して名前を「autoexec」にすると自動実行します。 また、仕事で質問者さんのケースに似た事がありました。 その時はエクセルのVBAでアクセスのデータを抽出してシートに追加しました。 当時は色々と制約があって大変な思いをしました。 Access2003だと楽になってるのかな(笑) 後はタスクに登録しました。 質問者さんのパソコンの管理方法や環境が分からないので何とも言えませんが、タスクの設定も考える必要がありますね 例えば毎日起動してログインするとか パソコンの電源はONのままで決められた時間に実行するようにタスクを設定するとか・・・

harapon
質問者

お礼

worried様 ご回答ありがとうございます! マクロで可能なんですね。マクロを勉強してみようかと思うのですが、WEB上で解説しているサイトや教材などありましたら教えていただけると嬉しいです。 PCは常に起動状態にあるので設定時間に実行、で大丈夫だと思います。ありがとうございます。