• ベストアンサー

「上書き保存」で一度警告を出す方法

Word、Excelの2003を使っています。 「上書き保存」(フロッピーディスクのアイコン?)をクリックしたときに1回「上書き保存されます、よろしいですか?」の類の警告メッセージを出すことはできるのでしょうか? 昔、同僚だった人のPCを使って作業していたときはそのようなメッセージが出てくれて、もとのデータを消失してしまったり、「名前をつけて保存」と押し間違うことがなく良かったのですが。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >昔、同僚だった人のPCを使って作業していたときはそのようなメッセージが出てくれて、 それは、見かけの「上書き保存(FaceID = 3)」のアイコンを使い、中身は、別のコマンドを呼んでいるだけだと思います。  On Error Resume Next  ActiveWorkbook.SaveAs ActiveWorkbook.Name  On Error GoTo 0 しかし、以下は、実際に私が使っているものを書き換えたもので、私のものは、もう少し複雑な働きをしています。ただ、Ctrl + S を設定だけは、意図的に抜いています。必要なら、付け加えます。 一旦保存して、再起動すると、設定されています。 Wordに関しては、時間があったら、また、書き込みます。 「個人用マクロブック」に登録してください。 '標準モジュール Private ClassBtns(1) As New Class1 Public cnt As Integer Sub Auto_Open() With Excel.Application  Set ClassBtns(0).Btn = .CommandBars("Standard").FindControl(, 3)  Set ClassBtns(1).Btn = .CommandBars("File").FindControl(, 3)  End With End Sub 'クラスモジュール (Class1) Private WithEvents myBtn As Office.CommandBarButton Public Property Set Btn(ByVal myNewBtn As CommandBarButton)  Set myBtn = myNewBtn End Property Private Sub myBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)   Dim FileName As String   Dim Ret As VbMsgBoxResult   If cnt > 0 Then     cnt = 0     Exit Sub   End If   FileName = ActiveWorkbook.Name   cnt = cnt + 1   If FileName Like ".xl?" Then     Application.Dialogs(xlDialogSaveAs).Show     Exit Sub   End If   If Dir(FileName) <> "" Then     Ret = MsgBox("この場所に'" & FileName & "'というファイルが既にあります。置き換えますか?", vbYesNoCancel + vbExclamation)     If Ret = vbYes Then       ActiveWorkbook.Save       Exit Sub     ElseIf Ret = vbNo Then       Application.Dialogs(xlDialogSaveAs).Show FileName       Exit Sub     Else       Exit Sub     End If   End If End Sub    なお、全ての保存に対してメッセージが出るのではなく、既に、同じフォルダに同名のファイルがある場合に出ることとと、上書きにコマンドを使ったときにだけでます。また、Workbook_BeforeSave イベントは、あくまでも、自ブックだけです。Application イベントを作らなくてはなりません。しかし、もともと、ボタンに対するものならば、ボタンにインスタンス等を設定したほうが楽です。

1988sato
質問者

お礼

ありがとうございます。ご回答の内容は保存させていただき、勉強して理解できるようになったら実施したいと思います。ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

追加 #3のWordのコードです。Normal.dot に登録してください。 なお、ふだんは、オブジェクトは壊れないのですが、Excel/Wordとも、コードをいじらないように、プロジェクトを簡単なパスワードでロックしたほうがよいです。 '-------------------------------------------- '標準モジュール Private ClassBtns(1) As New Class1 Public cnt As Integer Sub Auto_Open() With Word.Application  Set ClassBtns(0).Btn = .CommandBars("Menu Bar").Controls("ファイル(&F)").Controls("上書き保存(&S)")  Set ClassBtns(1).Btn = .CommandBars("Standard").FindControl(, 3) End With End Sub '-------------------------------------------- 'クラスモジュール (Class1) Private WithEvents myBtn As Office.CommandBarButton Public Property Set Btn(ByVal myNewBtn As CommandBarButton)  Set myBtn = myNewBtn End Property Private Sub myBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)   Dim FileName As String   Dim Ret As VbMsgBoxResult   If cnt > 0 Then     cnt = 0     Exit Sub   End If   FileName = ActiveDocument.Name   cnt = cnt + 1   If FileName Like ".do?" Then     Application.Dialogs(xlDialogSaveAs).Show     Exit Sub   End If   If Dir(FileName) <> "" Then     Ret = MsgBox("この場所に'" & FileName & "'というファイルが既にあります。置き換えますか?", vbYesNoCancel + vbExclamation)     If Ret = vbYes Then       ActiveDocument.Save       Exit Sub     ElseIf Ret = vbNo Then       Application.Dialogs(wdDialogFileSaveAs).Show FileName       Exit Sub     Else       Exit Sub     End If   End If End Sub '--------------------------------------------

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

エクセルでしたら、 Workbook_BeforeSaveイベント でブック保存時にマクロを起動して所定 の作業を行うことが出来ますが、 ワードには、これに該当するイベントが 見当たりません。 あるのかもしれませんが。 ドキュメントを閉じるときには Document_Closeイベント で所定の作業を行うことは出来ます。

1988sato
質問者

お礼

ありがとうございます。もっと勉強してから出直したいと思います。ありがとうございました。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

「上書き」ボタンは、警告や確認無しで上書き保存する為のボタンですのですので、標準では警告を出すようには出来ないと思います。 「同僚だった人」に、設定を確認する事はできないのですか? 上書き前に警告を出したいのでしたら、ツールバーから「上書き」ボタンを消して、常に名前を付けて保存で保存する事にしても良いですね。 または、ExcelならThisWorkbook に、↓の様なマクロを入れる事で保存前に警告を出せますが……。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  If SaveAsUI = False Then   If MsgBox("上書き保存します。", vbOKCancel) = vbCancel Then Exit Sub  End If End Sub

1988sato
質問者

お礼

回答ありがとうございます。そうですね。「上書き」の意味を軽く考えていました。反省です。ありがとうございました。

関連するQ&A

専門家に質問してみよう