読者です 読者をやめる 読者になる 読者になる

はてなダイアリー  -ひまもてアーカイブス-

2016.1.6以前の記事はダイアリーのものです。

今日の作業メモ

ダミー管理のルーチン化、部門ごとにファイルを分ける
<問題点>TransferSpreadsheetメソッドで、テーブルの代わりにSQL文を書いてやろうとおもったら、それは不可の仕様(もうっ)。代替案を考えねば。
<参考URL>


たぶんこれでいく版ができた

'*****部門別リストエクスポート
MkDir strBasePath & strOutBPath & strDay & "部門送付用"
Set db = CurrentDb()
Set rs = db.OpenRecordset("MQ_営業部門リスト")


Do Until rs.EOF
strOutf1 = strBasePath & strOutBPath & strDay & "部門送付用\" & Format(Me.日付2.Value, "【mmdd】ダミーリスト-") & rs(1) & ".xls"
Me.部門選択.Value = rs(1)
DoCmd.TransferSpreadsheet acExport, 8, "OQ_ダミー生リスト(部門送付用)", strOutf1, False, rs(0)
rs.MoveNext
Loop


rs.Close: Set rs = Nothing
db.Close: Set db = Nothing

ファイル出力用部門マスタを新規作成、OpenRecordsetでテーブルを開き、レコード1件ずつLoopする。
部門名はフォームの不可視テキストフィールドに値セットして、クエリーはそのフィールドを参照するようにパラメータ設定。
ファイル名、シート名なんかはRecordsetから取得。
Loopの最後にExcel出力の文を書いてファイルを作る。
ちょいとダサいが、自分のパソコンでもあっという間に終わるのでよしとしよう。

Accessクエリのパラメータ

扱いが面倒くさくて仕方がない。クエリ実行のタイミングでフォームを開いておかないといけないし*1バッチ処理するので可視項目としてはまったく必要ないフィールドが増えるわけだし。
今回のケースはそもそもの問題点「TransferSpreadsheetメソッドSQL文を設定できない」が解消できたらいい話では・・?と思ったが
よくよく考えてみたらファイル名やシート名を変えたり、パラメータの値も結局はどこかから取得しないといけなかったので、一度はOpenRecordsetが必要だったのか。
じゃ妙にフォームにテーブル参照するアイテムを仕込んだりしないほうが良かったってことで、自己解決。
クエリを開いたときにでるパラメータのInputBoxに値をセットするっていうことをプログラムでやりたいのに、それらしい構文が見当たらず。クエリをいちいちSQLに直すのも効率悪いんで、できればやりたくないわけ。
いずれまたこの問題にぶつかりそうなんで、これから調べるため、ネットに潜る。
いや〜、今日わたし、仕事してない?*2カラダはばてばてなのに。


*1:ステータスチェックするのも面倒

*2:あくまでも自己満足。