2009年05月19日

CloseメソッドのSaveChanges

WorkbookオブジェクトのCloseメソッドでは、そのブックを変更していた場合、引数SaveChangesで、保存して閉じるか、保存せずに閉じるかを指定できます。
この引数SaveChangesのデータ型はバリアント型ですが、通常、指定するのは、True(保存)またはFalse(非保存)のいずれかです。

ただし、実際には、ブックが変更されていた場合にどうするかという選択肢は、2つではなく、3つあります。
すなわち、問答無用で保存して閉じるか、問答無用で保存せずに閉じるか、それとも保存するかどうかをダイアログで確認するか、のいずれかです。
この3番目の選択肢、ダイアログで確認する、を選びたい場合は、引数SaveChangesの指定を省略する……とする解説が多い(Excel 2007のVBAヘルプでは、なぜかそれ以前はあったはずの、この説明がなくなっています)のですが、正直、これもちょっと疑問でした。
なぜ、引数SaveChangesの指定で、この選択肢を選べないのでしょうか?

引数SaveChangesのデータ型は前述したようにバリアント型なので、論理値以外を指定してもエラーにはなりません。
ということは、あるいはその他の値の中に、確認ダイアログを表示する、という指定方法もあるのでしょうか?

ちょっと実験してみた結果、引数SaveChangesでは、True/False以外にも、整数で保存するかどうかを指定できるようです。
0なら非保存、それ以外の整数であれば保存して閉じます。

そして、それ以外のデータ……小数、通貨型の数値、文字列、エラー値、オブジェクト……などを指定した場合は、すべて確認ダイアログが表示されます。
ということは、こうしたデータを使って、引数SaveChangesで確認メッセージを表示させることもできるわけですが……やはり省略したほうがよさそうですね。(^^;)

ひょっとして、何か関連した定数でもあるのではないか、と思ってオブジェクトブラウザを探してみたら、XlSaveActionクラスというのがありました。
含まれている定数は、xlSaveChangesとxlDoNotSaveChangesの2つ。
ただし、これらの値は1と2なので、Closeメソッドの引数SaveChangesで使用した場合は、いずれも保存して閉じる結果になってしまいます。
Excel 2007で追加されたもののようなので、何か用途があるのでしょうが、現在のところ何に使うものなのかよくわかりません。
どちらにしても「ダイアログを表示する」っぽい定数は入っていないし、少なくともCloseメソッドで使用するためのものではなさそうです。

※5/23に内容を若干修正しました。
posted by 土屋和人 at 09:54| Comment(0) | TrackBack(0) | Excel
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/29237018
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック