アプリ版:「スタンプのみでお礼する」機能のリリースについて

 あるエクセルファイルにて、VBAで

Sub 保存して終了()
ActiveWorkbook.Save
ActiveWorkbook.close
End Sub

 というマクロを作成したのですが、1回目は正常に動いたのですが次からは、そのマクロを動かしても画面が一瞬点滅するだけで、上書き保存も終了もしません。

 それで、ファイルを別の名前をつけて保存してその、別の名前で保存したファイルで、また上のマクロを動かすと1回目は正常に動くのですが、やはり次に開くと動かなくなります。
 因みに他のマクロは正常に動作し、この保存して終了させるマクロだけが変なのです。

 マクロの書き方を変えて以下のようにしてもだめでした。

Workbooks("ナントカ.xls").Close savechanges:=True

 やはり、何回書き方を変えても保存して終了させることだけが出来ません。普通にマクロを使用せず手動ですることは出来るのですが…。

 分かりにくい説明ですみませんが、よろしくお願いします。

A 回答 (9件)

#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 …
    • good
    • 0
この回答へのお礼

 お礼が遅くなり大変申し訳ありません!

 とりあえず、解決しました。、、、実は、

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

 に、シートに”UserInterfaceOnly”の保護をかけるマクロを作っていました。どうやらそれが原因だったみたいで、削除したら直りました。(でもそれが何でいけないのか分からないけど…)
 代わりに、Private Sub Workbook_Open()にシートに”UserInterfaceOnly”の保護をかけるマクロを貼り付けました。

 載せて頂いたURLは読ませていただきました。天下のマイクロソフトの作ったソフトにもバグなんてあるんですね。世間知らず(?)でした^^;

お礼日時:2006/06/16 11:26

解決出来たとの事、お疲れ様でした。



解決しているので、既に回答ではありませんが・・・

>Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
>に、シートに”UserInterfaceOnly”の保護をかけるマクロを作っていました。
>削除したら直りました。

基本、そうして直していくしかないのかな・・と、思います。
自分が解っていないと直せないし、プログラム出来ないですもんね。

>(でもそれが何でいけないのか分からないけど…)
私も全ては解りませんが、希望の動作が出来ればいい。位に考えています。

>天下のマイクロソフトの作ったソフトにもバグなんてあるんですね。
そうですよね。
でも、全てのユーザーの全ての希望は把握出来ないでしょうし、
もし、自分でOSのプログラム作成なんて出来ないし・・・

反対にユーザー(私を含め)でもプログラム出来る(VBA VBなど)ように
している(というOfficeプログラムにしている)MSに感謝しておきましょう。

私もVBAは勉強中ですが、優しく教えてもらえる
「教えて!goo 」はいいですよね。

とりあえず、お礼への返事です。----
    • good
    • 0
この回答へのお礼

>私も全ては解りませんが、希望の動作が出来ればいい。位に考えています。

 そうですね、白黒ハッキリさせようと躍起になって袋小路に嵌ってたような気がします。私もそう考えるようにします。


 お蔭様で会社の者皆がボタンクリックで誰でも簡単に使えるものが完成し、活用してもらってます。解決したので回答を締め切りますね。

 ここで回答頂いた皆さんに感謝!感謝です!
 特にstarsipさんにはずっとお付き合いいただき大変ありがとうございました。

お礼日時:2006/06/16 22:29

#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の共有フォルダより呼び出して使用していますがこれは関係あるのでしょうか?

補足日時:2006/06/12 17:44
    • good
    • 1

No.2です。


一回目、二回目の意味をもう少し詳しく教えてください。
一度マクロを実行すると、ブックは閉じる訳ですから、またそのブックを開いてマクロを実行するのですね。
それなら毎回一回目であって、二回目というものがないような気がするのですが。
貴方のおっしゃる一回目とは、何?ですか。

この回答への補足

 そうですよね^^;紛らわしい表現でした。

 1回目は、まず”ファイルを別の名前をつけて保存”し、そのファイルを終了。また、その別の名前をつけて保存したファイルを開いてから、マクロを動かす時です。

 その1回目は正常に作ったマクロが動作するのでちゃんと、”保存して終了”します。

 2回目は、その1回目のマクロで閉じたファイル(別の名前をつけて保存したファイル)をもう一度開き、マクロを動かす時です。

補足日時:2006/06/09 23:09
    • good
    • 1
この回答へのお礼

おかげ様で何とか動くようになりました。

回答ありがとうございました。

お礼日時:2006/06/16 22:19

#1です。



>”終了.保存して終了”・・・と表示されているのです。
Bookを複数開いていませんか。

複数開いていれば
"終了"という名前のブックの"Sub 保存して終了()" という事で
>”終了.保存して終了”
と表示されたと記憶しますが。

標準モジュールでなく、ThisWorkbook 内に記述すれば良い気がします。
自身(VBAを記述しているブック)を保存してから終了するならば、ThisWorkbook 内に

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Save
End Sub

 としておいて、Close のマクロをロードすればよいのでは・・
( もしくは×ボタンで閉じるだけ )

自身(VBAを記述しているブック)を保存するのではなくて、
他のブックを保存終了させるのならば
話は違ってきます。

この回答への補足

 Bookはそのファイルしか開いてません。

 BeforeCloseに保存するマクロはイザという時に保存しないで終了もさせたいので、あえて止めました。

 あと、このマクロは自身を保存するマクロです。

補足日時:2006/06/09 22:51
    • good
    • 0

#2>終了.保存して終了”のように、モジュール名.マクロ名、と表示されているのです


通常だと、別モジュールに同じ名前がある場合にこのようにモジュール名を修飾して表示されます。
なので、本来であれば、
終了.保存して終了
TEST.保存して終了
の様に重複して表示されるはずですが、
1つだけということなので、マクロがおかしくなっているのかもしれません。
マクロのエクスポートを行って、
新しいブックにインポートしてみたらどうでしょう。
    • good
    • 0
この回答へのお礼

 ありがとうございます。実は、月曜日に仕事に出るまでそのエクセルファイルを触ることが出来ないので、月曜に出社したら、即試して見ます!

 今日が金曜日であることを忘れてて、困り度3にして、皆さん急いで回答くださるのに試せないことに気づきました。迂闊でした。

 ここをお借りして皆さんにお詫び申し上げますm(__)m

お礼日時:2006/06/09 22:46

> 上書き保存も終了もしません。



ブックに変更がなければ、Save メソッドは働かないですが、その辺は
OK ですか?

前回の保存時からブックに変更があったかどうかは、

IF ThisWorkbook.Saved Then
  MsgBox "変更なし"
Else
  MsgBox "変更あり"
End If

で調べることができます。

> .... 終了させるマクロだけが変なのです。

終了とは?

・ブックを閉じるだけで Excel は残す?
・ブックも閉じるし、Excel も終了させる?
・同時に開いているブックはある?

この辺の状況でコーディングが変わってきますので、補足して下さい。

この回答への補足

>ブックに変更がなければ、Save メソッドは働かないですが、その辺は
OK ですか?

 はい、試しに何か入力してマクロを動かしても同じでした。

 終了の方法は、「ブックを閉じるだけで Excel は残す」です。

 今までに同じ、保存して終了させるマクロは書いて何度も使ったことあるのですが、今回のようなことは初めてです^^;

補足日時:2006/06/09 22:33
    • good
    • 0
この回答へのお礼

おかげ様で何とか動くようになりました。

回答ありがとうございました。

お礼日時:2006/06/16 22:18

Sub 保存して終了() のマクロは、これと同じWorkbookに書いてあるのですね。


それとも、マクロのファイルと実際に保存して終了させたいファイルは別々ですか。

この回答への補足

 回答ありがとうございます。

 はい、同じWorkbookに書いてあります。VBAで、プロジェクトエクスプローラで、ThisWorkbookを右クリックして標準モジュールを挿入してそこに書きました。

 モジュールは他にも作ってマクロの種類ごとにモジュールに名前をつけて分けました。

 それで新たに気づいたのですが、Alt + F8 でマクロを起動したり、ボタンなどにマクロを登録する時、マクロ名の一覧が出てそれを選んで実行(登録)しますよね。その時のマクロ名の一覧で”保存して終了”のマクロ名だけ”終了.保存して終了”のように、モジュール名.マクロ名、と表示されているのです。試しに同じWorkbookの他のモジュールにマクロを貼り付けても同じ現象が起きます。一体何なんでしょう…。

補足日時:2006/06/09 18:28
    • good
    • 0
この回答へのお礼

 ありがとうございました。

お礼日時:2006/06/09 22:51

こんにちは


Thisworkbook.Save
Thisworkbook.Close
では、どうですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

それもやってみたけど駄目でした。

お礼日時:2006/06/09 17:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A