エクセルマクロでファイル保存時にコメントを出す方法

このQ&Aのポイント
  • エクセルのアドインを使用してファイル保存時に保存しますか?のダイアログを表示する方法について教えてください。
  • PERSONAL_SAVE.XLSにマクロを作成し、保存しますか?のメッセージを表示するVBのコードを追加します。
  • PERSONAL_SAVE.lxaとして保存しアドインとして追加しても同様の動作ができません。どうすれば解決できますか?
回答を見る
  • ベストアンサー

エクセルマクロですべてのファイル保存時コメントだす

エクセルのアドインでファイル保存するときに”保存しますか?”の ダイアログをすべてのファイルに出したいのですが、 うまくいきません。どなたかお教えください。 PERSONAL_SAVE.XLS というファイルに以下のマクロを作成し C:\Documents and Settings\***\Application Data\Microsoft\Excel\XLSTART VBのClass1に 'Option Explicit Public WithEvents App As Application Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox ("保存しますか?") End Sub を作成し、 同じくVBのThisworkbookに Dim x As New Class1 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Set x.App = Application End Sub を作成します。 このときは、ほかのファイルに対しても 保存しますか? のメッセージがでます。 しかし、 このファイルをPERSONAL_SAVE.lxa として 保存し、ツール⇒アドイン で追加し、立ち上げても 同様な動きをしません。 どうしてでしょうか? インスタンス?の関係でしょうか?Private を Publicにしても同じでした。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

アプリケーションオブジェクトをセットするイベントが起動していないからです。 手順: PERSONAL_SAVE.xlaのThisWorkbookに Dim x As New Class1 Private Sub Workbook_Open()  Set x.App = Application End Sub のように記載する。

ogawawa
質問者

お礼

早々にありがとうございました。 できました。! Thiswork も class も 両方とも SAVEではいけないんですね。 どうもすみません、お手数をおかけしました。 間違いなしのベストアンサーです。 ありがとうございました。

関連するQ&A

  • エクセルVBAにて保存するとき

    Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("エクセルを終了してもよろしいですか?", vbYesNo) = vbNo Then Cancel = True Exit Sub End If Application.DisplayAlerts = False Application.Quit End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox "そのボタンでは保存できません。" & vbCrLf & _ "雛形は残しておきましょう" & vbCrLf & _ "" & vbCrLf & _ "ツールバーの「マクロなし出力」から保存できます。" Cancel = True End Sub という二つのマクロをThisworkbookにいれてあるんですが、 この二つを有効(今は2つ目を'でコメント状態にしてあるので保存可)にすると保存できなくて困っています。 二つを有効にした時はどのようにほぞんすればいいですか?

  • エクセル ブック(マクロを含む)を保存してとじると、また開きます。

    ブックに保護をかけた状態で保存してあります。 共有状態にあり、マクロを有効にしてもらいたいので、 (1)開くときに保護解除 (2)保存のときに、保護をかけて保存後、(まだ閉じるとは限らないので)保護解除 ということをやろうとし、以下のように書きました。 エクセルごとではなく、このファイルのみ終了しようとすると、 開いた後と上書保存後に保護を解除する為、 ファイルを終了する時には必ず「変更を保存しますか?」と訊かれ、 その時に「はい」を選択すると、一度はそのファイルが終了するのですが、 すぐに マクロを含むファイルを開くときに出るメッセージ「セキュリティ警告マクロ マクロ有効 マクロ無効 詳細」が出て、また開こうとします。 保存「いいえ」を選択すると、普通に終了します。 エクセルごとを終了すれば保存「はい」にしても、普通に終了します。 このファイルのみ終了する時、保存の確認で、「はい」を選び、普通に終了するには、何を直したらよいでしょうか? その前に、根本的に間違ってたりしますでしょうか・・・。 よろしくお願いします。 ThisWorkbookに、 Private Sub Workbook_Open() ActiveSheet.Unprotect Password:="(パスワード)" End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ActiveSheet.Protect Password:="(パスワード)" Application.OnTime Now, "保護解除" End Sub 標準モジュールに、 Sub 保護解除() ActiveSheet.Unprotect Password:="(パスワード)" End Sub

  • Private Sub Workbook_BeforeSaveについて

    エクセル2000です。 腑に落ちない現象が起きているので質問させてください。 Sheet1にテキストボックス(OLEオブジェクトのTextboxではありません)とボタンが貼ってあり、Visble=Falseで非表示にしています。それを保存する際には表示させたいので、BeforeSaveイベントで Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheet1.TextBoxes("テキスト").Visible = True Sheet1.Buttons("ボタン").Visible = True MsgBox "保存されちゃった!" End Sub と書いてみました。 手動で保存する場合には正しく、テクストボックスやボタンは正しく表示されます。もちろんMsgboxも出ます。 ところが、標準モジュールに書いた以下のコード、 Sub 保存() ActiveWorkbook.Save End Sub を走らせてみても、"保存されちゃった!"と、Msgboxは出ますが、肝心のテクストボックスやボタンが表示されません。 試行錯誤の結果、 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheet1.Shapes("テキスト").Visible = True Sheet1.Shapes("ボタン").Visible = True MsgBox "保存されちゃった!" End Sub と書くと、標準モジュールから、ActiveWorkbook.Saveでも表示されることがわかりました。 どうしてでしょうか?

  • エクセルマクロ BeforSave機能

    ThisWorkbook の Workbook BeforSaveに以下のようにセットして上書き保存すると マイクロソフトに報告する旨のエラーメッセージが出ます。 自ら初めてこの機能を使うのですが、どこがどう間違っているのでしょうか? エラー後に報告「する・しない」で自動復帰した後にそのまま上書き保存すると 何もおこらず上書きできますが、少しでも変更を加えると再度同じエラーとなります。 よろしくお願いします。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim IptA As String, rev As String IptA = Cells(3, 13).Value rev = Cells(8, 13).Value If SaveAsUI = False Then Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:\000\" & IptA & "報告" & rev & ".xls", FileFormat:= _ xlNormal, ReadOnlyRecommended:=False _ , CreateBackup:=False End If End Sub

  • VBAでWorkbook_BeforeSaveイベントで質問

    Workbook_BeforeSaveイベントである条件に達していればExcelファイルを終了したくないのですがどうすればよいでしょうか? WindowsXP ProSP2、Excel2000 コード例) Option Explicit Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) dim flg as boolean if flg=true then exit sub end if End Sub

  • 【ppt、VBA】ファイル開閉時のマクロ自動ロード

    自作のコマンドバーを作成して、アドイン化しました。 うまく動作していますが、一つ困っています。 以下のようにクラスをつくり、Open時にコマンドバーを作成し、 Close時にコマンドバーを削除しています。 しかし、複数のファイルを開いている際、そのうちの1つを閉じただけでコマンドバーが消えてしまいます。 どのようにすれば、パワーポイントプロセスの起動・終了に連動させることができるでしょうか? よろしくお願いします。 Public WithEvents App As Application Private Sub App_PresentationOpen(ByVal Pres As Presentation) Call MakeToolBar End Sub Private Sub App_PresentationClose(ByVal Pres As Presentation) Call RemoveToolBar End Sub

  • excelファイルが意図せず起動

    下記を参考にして、起動時にタイマーを設定してexcelファイルを5分後に自動的に 保存・終了するようにしています。 http://okwave.jp/qa/q2911086.html しかし実際5分を待たず、手動でそのexcelファイルを終了した場合、 後でそのexcelファイルが自動で起動して、そのまま終了しているようです。 この症状をなくしたい場合どのように、記述を加えればよいか教えていただけないでしょうか? 記述は下記です。 '標準プロシージャ Public Operated As Boolean Sub SetTimer() Application.OnTime Now + TimeValue("00:05:00"), "CloseMe" End Sub Sub CloseMe() If Operated Then Operated = False SetTimer Exit Sub End If 'ブックの上書き保存 ActiveWorkbook.Save ' 保存確認を避けるため、保存済みにする ThisWorkbook.Saved = True ' 他にブックが開いていなければ、Excelを終了する If Workbooks.Count <= 1 Then Application.Quit ' 本ブックをClose ThisWorkbook.Close False End Sub 'ワークブックプロシージャ Private Sub Workbook_Open() Operated = False SetTimer End Sub Private Sub Workbook_BeforePrint(Cancel As Boolean) Operated = True End Sub Private Sub Workbook_Deactivate() Operated = True End Sub Private Sub Workbook_Activate() Operated = True End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) Operated = True End Sub

  • Excel2000の保存時のイベントプロシージャ

    エクセル2000で、あるセルが空白なら警告メッセージボックスを出して 保存できないようにする、というプログラムをVBAで作りました。 VBEで一行ずつ走らせるとちゃんとメッセージボックスが 出てくるのですが、実際にブックからD6を空白にしたまま保存しようと したらメッセージボックスが出てこずに保存できてしまいます。 どこかで、設定が必要なのでしょうか? Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) With Worksheets("sheet1") If .Range("D6").Value = "" Then MsgBox "please enter D6 field.", vbCritical, "警告" Cancel = True End If End With End Sub

  • Excelでシート名と最終更新日を自動表示したい

    Excelを使って (1)セルA1に入れた名目をシート名にし (2)セルH1には、最終更新日を自動で入れたいです。 調べた結果、 シート名を右クリックして「コードの表示」から (1)は Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub を入れてうまくいきましたが、 (2)は Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  If ThisWorkbook.Saved = False Then   Worksheets("Sheet1").Range("H1").Value = Date  End If End Sub を入れてみましたが(←調べましたもの) うまくいきませんでした。 単純に、 Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  If ThisWorkbook.Saved = False Then   Worksheets("Sheet1").Range("H1").Value = Date  End If End Sub とつなげて入れるのではだめなんでしょうか? それとも、(2)の何かが間違っていますか? ご教授願います。

  • エクセルで「名前を付けて保存」を自動的に名前を付けて保存したい

    エクセルで「名前を付けて保存」をする時に自動的に名前を付けて保存が出来るように出来ないでしょうか。 エクセルで見積書を作成後に「名前を付けて保存」→「受注番号入力」をしているので、これを「名前を付けて保存」をクリックした時にファイル名を自動的に受注番号が入れば少しでも時間短縮が出来るかと思い、相談させていただきます。 自分なりに参考書などを読み、下記のようになると思ったのですが、出来ません。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If SavaAsUI Then Application.EnableEvents = False Application.Dialogs(xlDialogSaveAs).Show _ Arg1:=Me.Path & Application.PathSeparator & Sheet(1).Range("A1").Value Application.EnableEvents = True Cancel = True End If End Sub シート1に見積書があり、シート2、シート3はありません。 「A1」のセルに受注番号が入っています。 これのどこがダメなのか教えてもらえませんか。 もし、他に方法があるのであれば教えていただけませんか。 ご無理申します。

専門家に質問してみよう