- 締切済み
VBAで、ファイル保存と同時にに他のCSVファイルにデータを書き込むことは可能か?
初めまして。 初心者ですがよろしくお願いします。 私の質問は、 Excelのソフトに既存で付いている 上書き保存(ファイル(F)→上書き保存)を実行したときに CSVファイルにデータを書き込む作業も同時に実行することは可能なのか? です。 回答よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 過去の私のログを出されてしまうと書かざるを得ません。 サンプルですから、複雑な内容にするのは、なるべくご自身で研究されることをお願いします。とたんに難しくなります。 ボタンは、どこのボタンなのか、画像を見てください。他のボタンにも可能ですが、二つ以上に同じクラスにまとめるのは難しくなります。 最初にAuto_Open を実行すれば、設定されます。 現在は、保存ダイアログが出ますが、日にちと時間を組み合わせることによって、ダブらないファイル名にすることも可能です。 以下は、そのサンプルコードです。 '------------------------------------------- 'Class1 モジュール '------------------------------------------- Public WithEvents NewBtn As Office.CommandBarButton Private Sub NewBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) If WorksheetFunction.CountA(ActiveSheet.Cells) = 0 Then Exit Sub ActiveSheet.Copy With ActiveWorkbook Application.Dialogs(xlDialogSaveAs).Show ActiveSheet.Name, 6 .Close False End With ActiveWorkbook.Save End Sub '------------------------------------------- '標準モジュール '------------------------------------------- Private ClassBtn As New Class1 Sub Auto_Open() Call BtnSetting End Sub Sub BtnSetting() 'ツールボタン上のボタン Set ClassBtn = New Class1 With Application Set ClassBtn.NewBtn = .CommandBars("Standard").FindControl(, 3) '名前を付けて保存 End With End Sub
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 可能か不可能かと聞かれれば、可能なのですが、上書き保存の際に、働かせるためには、かなり特殊なVBAコードを埋め込みますし、大掛かりなコードになってしまうと思います。設定だけでも、ややこしいかもしれません。また、保存するときに、通常ブックひとつにシートは複数ですから、そういう点でも、また、ファイル名の問題も出てくるはずです。 ツールバーにコマンドボタンを入れて、ボタンをクリックして、以下のような簡単なコードで保存させるように行ったほうがよいのではないか、と思います。 '------------------------------------------- '標準モジュール '------------------------------------------- Sub CSVSave() If WorksheetFunction.Count(ActiveSheet.Cells) = 0 Then Exit Sub ActiveSheet.Copy With ActiveWorkbook Application.Dialogs(xlDialogSaveAs).Show ActiveSheet.Name, 6 .Close False End With End Sub
- Sinogi
- ベストアンサー率27% (72/260)
上書き保存は、開いたファイル(新規作成ではない)を同名で保存するものです。ファイル形式の変更もしません。 なのでCSVファイルを開いて、編集後に上書き保存するならCSVで保存します。エクセルでCSVを上書き保存する場合、エクセル形式に変更するか確認を求められると思いますが、「はい」で答えればCSVでの上書きが実行されます。それ以外のファイルではCSVで上書き保存されることはありません。
お礼
回答ありがとうございます。 私の説明不足です。 申し訳ありません。 実は Excelbook1.xls 上書き保存 Excelbook1.xls └sheet1 ───→ └sheet1 保存 ───→ sheet1.csv というように Excelbook1.xlsのシート1を上書き保存をする作業と シート1の一部の表データをcsvファイルにデータを変換し sheet1.csvファイルに保存をする作業を、ボタン一つでおこなう。 ということを考えていました。 ですが、自作マクロと自作ツールバーでそれを実現すると、 エクセルのツールバー上には5つ保存作業をするアイコンが出来てしまいます(1つは自作のマクロのもの、あとの4つはエクセルで既存としてあるアイコン)。 私の考えている物では必ず自作マクロで保存しなければエラーとなるので、 5つも保存用アイコンがあると間違えの原因になります。 ですので、 Excelbook1.xlsのシート1を上書き保存をする作業と シート1の一部の表データをcsvファイルにデータを変換し sheet1.csvファイルに保存をする作業を、ボタン一つでおこなう。 という作業を既存の上書き保存等のアイコンに作業を追加することで実現したいと考えました。 以上が、私のしたかった質問の全体像です。
お礼
回答ありがとうございます。 なるほど、可能ですか。ですが、かなり難しい物になってしまうんですね。 わかりました。 既存のほうは、もっとVBAになれた時に調べて見ようと思います。 今は、 いただいたアドバイスのCSVSave()と、 人為的間違い防止のため http://okwave.jp/qa1619180.html こちらの質問の回答を使い実現したいと思います。 ありがとうございます。