
あるエクセルファイルにて、VBAで
Sub 保存して終了()
ActiveWorkbook.Save
ActiveWorkbook.close
End Sub
というマクロを作成したのですが、1回目は正常に動いたのですが次からは、そのマクロを動かしても画面が一瞬点滅するだけで、上書き保存も終了もしません。
それで、ファイルを別の名前をつけて保存してその、別の名前で保存したファイルで、また上のマクロを動かすと1回目は正常に動くのですが、やはり次に開くと動かなくなります。
因みに他のマクロは正常に動作し、この保存して終了させるマクロだけが変なのです。
マクロの書き方を変えて以下のようにしてもだめでした。
Workbooks("ナントカ.xls").Close savechanges:=True
やはり、何回書き方を変えても保存して終了させることだけが出来ません。普通にマクロを使用せず手動ですることは出来るのですが…。
分かりにくい説明ですみませんが、よろしくお願いします。
No.8ベストアンサー
- 回答日時:
#7です。
補足を拝見しました。質問者様の仰る通りで、間違いないと思います。
>とすべて記述された状態のWorkbookが保存されるのではないでしょうか?
>試しに、別の名前をつけて保存しこのマクロが正常に動作する状態にして、
>もう一度開いて、モジュールを見ても上記の記述が全部残っていました。
私の場合、
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
で、Save前の動作を制御(記述)した時、Save後のマクロが保存されない事が
あったので、あるいは・・と思いました。失礼しました。
> あと、これが関係あるのか分かりませんが、この問題のファイルは、
>別のPCの共有フォルダより呼び出して使用していますがこれは関係あるのでしょうか?
共有ファイルの保存は私も悩みました。
ProtectSharing とか・・
思うような動作にならず・・
もし、コードを提示出来るのであれば、お願いします。
参考になるかもと思い、URL載せますね。
参考URL:http://www.officetanaka.net/excel/vba/file/file0 …
お礼が遅くなり大変申し訳ありません!
とりあえず、解決しました。、、、実は、
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
に、シートに”UserInterfaceOnly”の保護をかけるマクロを作っていました。どうやらそれが原因だったみたいで、削除したら直りました。(でもそれが何でいけないのか分からないけど…)
代わりに、Private Sub Workbook_Open()にシートに”UserInterfaceOnly”の保護をかけるマクロを貼り付けました。
載せて頂いたURLは読ませていただきました。天下のマイクロソフトの作ったソフトにもバグなんてあるんですね。世間知らず(?)でした^^;
No.9
- 回答日時:
解決出来たとの事、お疲れ様でした。
解決しているので、既に回答ではありませんが・・・
>Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
>に、シートに”UserInterfaceOnly”の保護をかけるマクロを作っていました。
>削除したら直りました。
基本、そうして直していくしかないのかな・・と、思います。
自分が解っていないと直せないし、プログラム出来ないですもんね。
>(でもそれが何でいけないのか分からないけど…)
私も全ては解りませんが、希望の動作が出来ればいい。位に考えています。
>天下のマイクロソフトの作ったソフトにもバグなんてあるんですね。
そうですよね。
でも、全てのユーザーの全ての希望は把握出来ないでしょうし、
もし、自分でOSのプログラム作成なんて出来ないし・・・
反対にユーザー(私を含め)でもプログラム出来る(VBA VBなど)ように
している(というOfficeプログラムにしている)MSに感謝しておきましょう。
私もVBAは勉強中ですが、優しく教えてもらえる
「教えて!goo 」はいいですよね。
とりあえず、お礼への返事です。----
>私も全ては解りませんが、希望の動作が出来ればいい。位に考えています。
そうですね、白黒ハッキリさせようと躍起になって袋小路に嵌ってたような気がします。私もそう考えるようにします。
お蔭様で会社の者皆がボタンクリックで誰でも簡単に使えるものが完成し、活用してもらってます。解決したので回答を締め切りますね。
ここで回答頂いた皆さんに感謝!感謝です!
特にstarsipさんにはずっとお付き合いいただき大変ありがとうございました。
No.7
- 回答日時:
#1 #5 です。
>Sub 保存して終了()
>ActiveWorkbook.Save
'ここで保存します。下記の ActiveWorkbook.close は保存していません。
'( 保存した後の動作を記述しているだけです。 )
>ActiveWorkbook.close
>End Sub
保存したのは”アクティブワークブックを保存する”記述です。
次回開いても(何回開いても)覚えているのは(Saveする)迄です。
ActiveWorkbook.Close は保存していません。
不明点あれば、補足下さい。
この回答への補足
Sub 保存して終了()
ActiveWorkbook.Save
↑上の記述でセーブされるのはあくまで上の記述までで、
↓下の記述は保存されないので次から開く時は閉じなくなる…って解釈でよろしいでしょうか?
ActiveWorkbook.close
End Sub
しかし、このマクロでWorkbookを保存する時には、
Sub 保存して終了()
ActiveWorkbook.Save
ActiveWorkbook.close
End Sub
とすべて記述された状態のWorkbookが保存されるのではないでしょうか?試しに、別の名前をつけて保存しこのマクロが正常に動作する状態にして、もう一度開いて、モジュールを見ても上記の記述が全部残っていました。
あと、もうひとつ気づいたのですが手動で上書き保存をした後であれば保存して(すでに上書き保存されているのでマクロで本当に保存されているかは不明ですが)終了することが分かりました。
あと、これが関係あるのか分かりませんが、この問題のファイルは、別のPCの共有フォルダより呼び出して使用していますがこれは関係あるのでしょうか?
No.6
- 回答日時:
No.2です。
一回目、二回目の意味をもう少し詳しく教えてください。
一度マクロを実行すると、ブックは閉じる訳ですから、またそのブックを開いてマクロを実行するのですね。
それなら毎回一回目であって、二回目というものがないような気がするのですが。
貴方のおっしゃる一回目とは、何?ですか。
この回答への補足
そうですよね^^;紛らわしい表現でした。
1回目は、まず”ファイルを別の名前をつけて保存”し、そのファイルを終了。また、その別の名前をつけて保存したファイルを開いてから、マクロを動かす時です。
その1回目は正常に作ったマクロが動作するのでちゃんと、”保存して終了”します。
2回目は、その1回目のマクロで閉じたファイル(別の名前をつけて保存したファイル)をもう一度開き、マクロを動かす時です。
No.5
- 回答日時:
#1です。
>”終了.保存して終了”・・・と表示されているのです。
Bookを複数開いていませんか。
複数開いていれば
"終了"という名前のブックの"Sub 保存して終了()" という事で
>”終了.保存して終了”
と表示されたと記憶しますが。
標準モジュールでなく、ThisWorkbook 内に記述すれば良い気がします。
自身(VBAを記述しているブック)を保存してから終了するならば、ThisWorkbook 内に
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Save
End Sub
としておいて、Close のマクロをロードすればよいのでは・・
( もしくは×ボタンで閉じるだけ )
自身(VBAを記述しているブック)を保存するのではなくて、
他のブックを保存終了させるのならば
話は違ってきます。
この回答への補足
Bookはそのファイルしか開いてません。
BeforeCloseに保存するマクロはイザという時に保存しないで終了もさせたいので、あえて止めました。
あと、このマクロは自身を保存するマクロです。
No.4
- 回答日時:
#2>終了.保存して終了”のように、モジュール名.マクロ名、と表示されているのです
通常だと、別モジュールに同じ名前がある場合にこのようにモジュール名を修飾して表示されます。
なので、本来であれば、
終了.保存して終了
TEST.保存して終了
の様に重複して表示されるはずですが、
1つだけということなので、マクロがおかしくなっているのかもしれません。
マクロのエクスポートを行って、
新しいブックにインポートしてみたらどうでしょう。
ありがとうございます。実は、月曜日に仕事に出るまでそのエクセルファイルを触ることが出来ないので、月曜に出社したら、即試して見ます!
今日が金曜日であることを忘れてて、困り度3にして、皆さん急いで回答くださるのに試せないことに気づきました。迂闊でした。
ここをお借りして皆さんにお詫び申し上げますm(__)m
No.3
- 回答日時:
> 上書き保存も終了もしません。
ブックに変更がなければ、Save メソッドは働かないですが、その辺は
OK ですか?
前回の保存時からブックに変更があったかどうかは、
IF ThisWorkbook.Saved Then
MsgBox "変更なし"
Else
MsgBox "変更あり"
End If
で調べることができます。
> .... 終了させるマクロだけが変なのです。
終了とは?
・ブックを閉じるだけで Excel は残す?
・ブックも閉じるし、Excel も終了させる?
・同時に開いているブックはある?
この辺の状況でコーディングが変わってきますので、補足して下さい。
この回答への補足
>ブックに変更がなければ、Save メソッドは働かないですが、その辺は
OK ですか?
はい、試しに何か入力してマクロを動かしても同じでした。
終了の方法は、「ブックを閉じるだけで Excel は残す」です。
今までに同じ、保存して終了させるマクロは書いて何度も使ったことあるのですが、今回のようなことは初めてです^^;
No.2
- 回答日時:
Sub 保存して終了() のマクロは、これと同じWorkbookに書いてあるのですね。
それとも、マクロのファイルと実際に保存して終了させたいファイルは別々ですか。
この回答への補足
回答ありがとうございます。
はい、同じWorkbookに書いてあります。VBAで、プロジェクトエクスプローラで、ThisWorkbookを右クリックして標準モジュールを挿入してそこに書きました。
モジュールは他にも作ってマクロの種類ごとにモジュールに名前をつけて分けました。
それで新たに気づいたのですが、Alt + F8 でマクロを起動したり、ボタンなどにマクロを登録する時、マクロ名の一覧が出てそれを選んで実行(登録)しますよね。その時のマクロ名の一覧で”保存して終了”のマクロ名だけ”終了.保存して終了”のように、モジュール名.マクロ名、と表示されているのです。試しに同じWorkbookの他のモジュールにマクロを貼り付けても同じ現象が起きます。一体何なんでしょう…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/20 14:46
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
VBA SaveChanges 上書きされない
Visual Basic(VBA)
-
-
4
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
5
エクセルの名前の定義を他のファイルにエクスポートする方法?
Excel(エクセル)
-
6
エクセルでファイルを閉じても空ウィンドウが残ります
Excel(エクセル)
-
7
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
8
Excel VBA でExcelを終了したいのですが・・
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロ ファイル名が変わ...
-
excelファイルに使われているVB...
-
エクセル終了時の保存確認メッ...
-
Word用のマクロが急に働かなく...
-
セキュリティの警告
-
VBAを一度起動するとずっと出て...
-
エクセル2013vbaで、見えない名...
-
【マクロ】宣言は、何のために...
-
マクロを設定したのに、拡張子...
-
アクセスでファイルを開いたと...
-
コピーしたファイルのマクロを...
-
Excelが勝手にシート移動してし...
-
EXCELでマクロを記録する際に、...
-
マクロを消すマクロは不可能?
-
作成したマクロを共有
-
Excelが急に遅くなりました。解...
-
Excelファイルで作成したものを...
-
エクセル2003VBAにて、他の...
-
別のパソコンでエクセルのマク...
-
新旧エクセル、マクロは互換不可?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを一度起動するとずっと出て...
-
コピーしたファイルのマクロを...
-
エクセル終了時の保存確認メッ...
-
昨日まで動いていたエクセルの...
-
VBA マクロ実行時エラー’1004Ra...
-
excelファイルに使われているVB...
-
Excelが勝手にシート移動してし...
-
別のパソコンでエクセルのマク...
-
【マクロ】エラーが発生⇒実行時...
-
EXCEL マクロ クリップボードク...
-
マクロを消すマクロは不可能?
-
Excelマクロ ファイル名が変わ...
-
excelが別プロセスで起動してし...
-
アクセスでファイルを開いたと...
-
エクセル2013vbaで、見えない名...
-
エクセルファイルを自身のファ...
-
excelのマクロ実行でブロックさ...
-
エクセルマクロ実行中に別ファ...
-
マクロを設定したのに、拡張子...
-
マクロでマクロを削除する
おすすめ情報