| 
    
     |  | こんばんは、もうお休みになってますかね? 私はここの常連の解答者の皆様のように詳しい方ではありませんが、なかなか解答が付かないようなので、以下お答えさせて戴きます。
 
 先ず、現行プログラムを見たところ、ファンクションプロシージャの中にメッセージボックスなど記述されてますが、ファンクションプロシージャはエクセルシート上で頻繁に使用するユーザー定義関数の設定、或いはマクロのプログラムの中で何度も特別な計算が繰返し必要になる場合に便利なもので、この中に計算目的以外のコードが含まれるのはちょっと違和感がありますね。
 
 また、quit()で求められようとしている戻り値は、ThisWorkbook.Savedのプロパティを取得することで事足りると思います。
 
 ということで、以下のように変更してみました。
 
 Sub 終了()
 If ThisWorkbook.Saved = False Then
 strFilename = ThisWorkbook.Path & "\" & _
 "データ作成" & "_" & _
 Format(Date, "yyyymmdd") & ".xls"
 strFilename = Application.GetSaveAsFilename( _
 FileFilter:="Excelファイル,*.xls", _
 InitialFileName:=strFilename, _
 Title:="Excelファイルの保存")
 If strFilename = "False" Then
 If MsgBox("保存せずに終了します。よろしいですか?", _
 vbOKCancel + vbInformation, _
 "終了確認") = vbOK Then
 ThisWorkbook.Saved = True
 ThisWorkbook.Close
 Else
 Exit Sub
 End If
 Else
 ActiveWorkbook.SaveAs strFilename
 End If
 Else
 ThisWorkbook.Close
 End If
 End Sub
 
 '------(このイベントプロシージャは言わずもがな標準モジュールではなく、ThisWorkbookのモジュールに記述して下さい。)------
 Private Sub Workbook_BeforeClose(Cancel As Boolean)
 終了
 End Sub
 
 なお、私は外地に居るもので、もし更なるご質問がありましたら、直ぐにお答えできる時間帯か分かりませんので、他の人に助けてもらった方が早いかも。
 
 |  |