• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBA Workbook_BeforeSaveについて)

EXCEL VBAのWorkbook_BeforeSaveとWorkbook_Openの処理について

このQ&Aのポイント
  • 会社のホームページの情報を公開するためにEXCELを利用しHTMファイルで保存しています。保存する際に更新時間をセルに表示させるためにVBAを組んでいます。しかし、保存時の更新日時の処理がうまく行われず、原因がわかりません。
  • Workbook_Openの処理はうまく行われるが、Workbook_BeforeSaveの処理がうまく行われない問題が発生しています。新規作成のEXCELファイルでは問題なく処理が行われます。
  • 処理がうまく行われない原因がわかりません。どうすれば解決できるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

Excelでhtmファイルを編集している時の現象ですよね。こちらでは同現象が再現できません。 新規Book(.htm)にWorkbook_BeforeSaveと Workbook_Open だけ記載して『手動保存』してみてください。 それでもBeforeSaveイベントは発生しないのでしょうか? .xlsファイルの場合はどうでしょう。 _BeforeSaveプロシージャにブレイクポイントを設定してもそこを通らないのでしょうか? 新規BookでもBeforeSaveイベントが起きない場合、 念のためExcelをセーフモードで起動して試してみてください。 #ウィンドウズメニューから[ファイル名を指定して実行] excel /s セーフモード、新規Bookで問題ないなら、 ・他のイベントプロシージャが関係している。 ・他のアドインやマクロブックが影響している。 ・(これは無いと思いますがイベントプロシージャ名の記入ミス。コードペイン上部のドロップダウンリストから選択してます?)

yumetsuba
質問者

補足

返事が遅くなりまして大変申し訳ありませんでした。 また、回答いただきましてありがとうございます。 まず、新規Book(.htm)でも同様の現象が起きておりました。 ブレイクポイントを設定しても全くかすりもしませんでした。 Excelをセーフモードで立ち上げる前にアドインを全て取り外してみました。そうしましたら全てが上手く処理出来る様になってしまいました。 ローカルでも共有ファイルサーバー上でも上手く動いています。 さらに、その後に取り外したアドインを組み入れても処理されるようになりました。 いったい何だったんでしょう??

その他の回答 (2)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

>いったい何だったんでしょう?? 特にエラーが出るわけでもなく、BeforeSaveイベントが起きないという現象だったのですよね。 アドインが関係していたとしても、『その後に取り外したアドインを組み入れても処理されるようになりました。』との事ですし、 私自身、同事象に遭遇した事はありませんので原因は解りかねます。 取り敢えず、不具合が解消したようで良かったですね。 本ケースのような、通常では発生しないはずの不具合の場合、まずはどのレベルで障害が発生しているかの見極めが必要だという事なのでしょう。 ・特定Bookでの現象か。     …新規Bookで確認してみる。 ・特定ユーザー環境での現象か。 …セーフモードあるいは別ユーザーでログインして確認してみる。 ・特定端末での環境か。     …(可能なら)別端末で確認してみる。 など。(OSやOfficeのバージョン差異やネットワーク環境が絡めばもっと複雑になるでしょうけど) そういった誘導的なアドバイスができれば、もうちょっと早く解消できたかもしれなかったですね。失礼しました。

yumetsuba
質問者

お礼

end-uさん、本当にありがとうございました。 >そういった誘導的なアドバイスができれば、もうちょっと早く解消できたかもしれなかったですね。失礼しました。 ↓ そんなとんでもないですよ。色々な段階のエラー解消法を教えてくれたので、解決に向かうことが出来たのですから。 今度不具合が出たら同様の手順で調べてみます。 今日もきちんと動作しており、ホッとしております。 ホントにありがとうございました。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

Worksheetは1つしかないのでしょうか? そのThisWorkbookモジュールのコードではRangeの親が指定されていないので、その時のActiveSheetになってしまいますが、 その点は大丈夫ですか? また、開いた時に最終保存日時を取れば良いだけのような気もしますが、どうなのでしょう。 Private Sub Workbook_Open()   MsgBox ThisWorkbook.BuiltinDocumentProperties("Last Save Time") End Sub

yumetsuba
質問者

補足

ご回答ありがとうございます。 savaを記載しているモジュール以外にはsheetの指定をしておりますが、実際の運用は1book-1sheetですので大丈夫かと…。 sheet指定していたりしてなかったり、気まぐれな作りになってしまってましてスミマセン。。。 ちなみに、sheet指定の記載も試しては見ましたが、同じ動きです。 >また、開いた時に最終保存日時を取れば良いだけのような気もしますが、どうなのでしょう。 とコードを記載していただきましてありがとうございました。 しかしながら、ご提案の開いた際に最終保存日時の取得ではホームページに公開する際に、前回の更新日時をお知らせすることになってしまいますので適用できないのです。。。 いただいたコードはMsgBoxですから編集者に対しての確認メッセージになっているみたいですが、私が書いているSub MSGDISP()もきちんと動作はしております。(これはおまけみたいなものですけど…)

関連するQ&A