- ベストアンサー
AccessからのExcel出力における問題点と解決方法
- AccessからのExcel出力において、同じファイル名で出力しようとすると上書きされてしまうが、事前にチェックして上書きのメッセージを表示する必要があるかどうかについて質問です。
- また、クエリの内容がマージされてしまうため、ファイル自体が作成し直されず、上書き部分は表内の内容に限られること、書式や表外の内容は残ることについても確認したいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Dim FSO As Object, Target As String Set FSO = CreateObject("Scripting.FileSystemObject") Target = strFolder & "情報_" & Format(Date, "yyyymmdd") & ".xlsx" If FSO.FileExists(Target) Then If MsgBox(Target & "が存在します。上書きしますか?",vbOKCancel,"上書き確認") = vbOK Then Kill Target Set FSO = Nothing Else Set FSO = Nothing Exit Sub End If End If DoCmd.TransferSpreadsheet acExport, 10, "Q_Dummy", Target, True, ""
その他の回答 (3)
- panacon
- ベストアンサー率31% (214/679)
VBで同名のファイルがあったら、メッセージボックスで処理を分岐するようにすれば良いのでしょうが、VBのほうは浮かんできません。フォーム上で、出力先フォルダのパスを保存するテキストボックスと日付のテキストボックスを用意して、これを合成した式を貼り付けておくアイデアが浮かびましたが、なんだかなぁという思いです。 過去の経験では、同じファイルがいる場合は、日付時刻を付加する形でリネイムして、保存フォルダに移動してから、新しいエクセルを書き出していました。
お礼
panaconさま ご回答ありがとうございます。 やはり手動で同ファイル名の有無をチェックして メッセージを出すしかないんですかねぇ。。 で、OK押されたら既存のファイルを削除した上で Excel出力って感じでしょうか。 ・・ここまでやるんだったら、やはりファイル名に 時間を付加した方がよいように思えてきました。 とりあえずもう少し検討してみたいと思います。 ありがとうございました。
- panacon
- ベストアンサー率31% (214/679)
既存のマクロに変数を含むファイル名を設定する書き方を試してみました。 既存のマクロで、2013の場合ですが、「書式設定を保持したままエクスポート」を選択して、出力先の記述を「="C:\フォルダ名\ファイル名前半" & format(now(),"yy-mm-dd") & ".xlsx"」のように書けば良い事が分かりました。日付のスラッシュ記号は、ファイル名には使えないので、ハイフンにしてみました。これなら要求されたものが実現します。 2010でも同名のマクロか「出力」のマクロが選べると思います。
お礼
panaconさま 度々のご回答ありがとうございます。 >「="C:\フォルダ名\ファイル名前半" & format(now(),"yy-mm-dd") & ".xlsx"」のように書けば良い事が分かりました。 ということですが、質問にも書いている通り、出力先は ユーザーに選択してもらう(ダイアログから出力先選択) ようにしたいと思ってます。 この方法だと、出力先が固定になってしまうと思うのですが。。
- panacon
- ベストアンサー率31% (214/679)
VBで書くと上書きし、既存のマクロの組み合わせで書くと上書きするか聞いてくると思います。勿論、ご自身の解決策の通り、時間までファイル名にすれば問題無いと思います。
お礼
Panaconさま ご回答ありがとうございます。 「Excel出力」ボタンにマクロを仕込んだところ、仰る通り 上書きするか聞かれました。 ただ、マクロには予め出力先のパスやファイル名を設定して おかないといけないようです。 普段マクロを使っていないので、よく分かっておりませんが VBAから出力先パスとファイル名をマクロに渡して実行する ことも可能なのでしょうか。
補足
<追記> 実際には、出力される項目として日付のフィールドがいくつか あります。 VBAで出力するとyyyy/mm/dd形式で出力されるのですが、 マクロで出力するとdd-mmm-yyで出力されてしまいます。 ※例)1980/01/01 → 01-Jan-80 使用者にわざわざExcel上でyyyy/mm/dd形式に変換させるのは 手間なので、初めからyyyy/mm/dd形式で出力させたいところです。
お礼
chie65535さま いつもご回答ありがとうございます。 結局、出力先のパスに同じファイル名のものが存在して いないかチェックした上で「上書きしますか?」って メッセージを表示させる必要があるんですね。 で、上書きOKとなったらいったん既存のファイルを削除 した上で出力すると。。 VBAの場合は、そこまで手動でやってあげないといけないん ですね。 勉強になりました。ありがとうございました。