- 締切済み
エクセルのマクロでファイルを自動で保存するには?
こんにちは。お世話になります。 エクセルのVBAマクロ文の書き方でお知恵を拝借したいと思います。 さて、私のかかる業務でエクセルファイルで営業実績を出しています。 COBOLで作ったファイルをCSVにインポートして そのCSVの値を別のエクセルファイルで引っ張るという手順を踏んでいますが、 それをマクロで動かすとエクセル上で『保存しますか?』と聞いてきます。 答えは『はい(Y)』で確定しているので、その命令文さえ組み込められればいいのですが、 その命令文の書き方が判りません。 (解決したいVBAマクロの命令文) Workbooks.Open Filename:="D:\(Aファイル).csv" Workbooks.Open Filename:="D:\(Aファイルの値を引っ張るBファイル).xls" ThisWorkbook.Saved = True (ここで聞いてくる注意に自動で『Y』を入れたいと思っています。) ActiveWindow.Close ActiveWindow.Close 以上、お知恵を拝借したく、お願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- ap_2
- ベストアンサー率64% (70/109)
ヨソ事してる間に回答増えてましたw ANo.2の方法もいいですね。savechanges:=trueは、Close時の動作を、未保存なら保存して終了(確認ダイアログでない)にします。このあたりの方法選択は好みで。
- imogasi
- ベストアンサー率27% (4737/17069)
>エクセルの値が更新されていない事があってその方法は止めました 私のテスト Sub test02() ActiveSheet.Delete ActiveWorkbook.SaveAs "book3.xls" End Sub 両方の行(シート削除とブックの保存)で警告・確認メッセージが出る ーー Sub test01() ActiveSheet.Delete Application.DisplayAlerts = False ActiveWorkbook.SaveAs "book3.xls" Application.DisplayAlerts = True End Sub シート削除の方は警告・確認メッセージが出る。 ブックに関するほうは出なかった。 ーー すなわち、言いたいことは、 Application.DisplayAlerts = Falseを CloseやSaveの直前に入れると「他のコード行に起因する」警告・確認メッセージは、影響を受けないのではないか。 やってみては。
- ap_2
- ベストアンサー率64% (70/109)
そもそも保存処理入っていないんじゃないかな… ThisWorkbook.Saved = True は、「マクロの入っているブック」を「保存済み(最終保存から変更されていない扱い)」にする命令にすぎず、おそらくは役割を果たしていません。保存は、Close時の「未保存だから保存しますか?」ダイアログに頼っているのだと思います。そのため、単純にダイアログOFFすると保存されないのでしょう。Saveしてください。 ActiveWorkbook.Save 名前を付けて保存する場合は .SaveAs を。保存処理は何かとダイアログが出やすいので、ANo.1のダイアログOFFもいずれ欲しくなると思いますよ。 また、曖昧な処理は今回のように混乱を招くので、リンク更新もOpen時の自動処理に頼らず、マクロでしっかり指示した方がいいかもです@.UpdateLink か .Calculateあたり
- keithin
- ベストアンサー率66% (5278/7941)
ActiveWindow.Close savechanges:=true とします。 若しくは workbooks("(Aファイル).csv").close savechanges:=false のように,activeなんたらを使わないマクロを推奨します。
- kybo
- ベストアンサー率53% (349/647)
「保存しますか?」と聞いてくる直前に以下の様に入れ、 Application.DisplayAlerts = False 「ActiveWindow.Close」のあとにでも、以下の様に入れてみてください。 Application.DisplayAlerts = True
補足
kyboさん 早速の回答ありがとうございます。 実は、Application.DisplayAlerts = False を使っていた時期もあったのですが、 エクセルの値が更新されていない事があって その方法は止めました。 申し訳ないのですが、他の方法がありましたらよろしくお願いします。 まずは、回答いただきまして、ありがとうございました。