『エクセルを保存した時にHTMLで保存するVBAの作成』(ak) お世話になります。 エクセルを保存した時に、指定した場所に、HTML形式で保存する、 VBAの作成をするマクロを組んでいます。 そこでエラーになり、自分では解決できないので、解決方法を教えてください。 「'指定フォルダにHTMLで保存 ActiveWorkbook.SaveAs 」と 「'BOOK保存処理  w.Saved = True」で エラーになっているようです。 不慣れなもので自分なりに勉強しながら作ったのですが、 原因がわからないので、原因と解決方法をご教示願えませんでしょうか。 よろしくお願いいたします。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Call START End Sub Sub START() MsgBox "開始" '指定フォルダにHTMLで保存 On Error GoTo ERMS1 ActiveWorkbook.SaveAs Filename:="C:\Test.html", FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False ERMS1: MsgBox "ERROR ActiveWorkbook.SaveAs中にエラー発生 ActiveWorkbook.Path = " & ActiveWorkbook.Path Application.Quit 'Excel を終了する ThisWorkbook.Close False 'Book を閉じる 'BOOK保存処理 On Error GoTo ERMS2 Dim w As Workbook For Each w In Workbooks '全ての Book を保存したことにするフラグ (保存処理はしない) w.Saved = True Next Application.Quit 'Excel を終了する ThisWorkbook.Close False 'Book を閉じる ERMS2: MsgBox "Book保存処理中にエラー発生" Application.Quit 'Excel を終了する ThisWorkbook.Close False 'Book を閉じる End Sub < 使用 Excel:Excel2010、使用 OS:Windows7 > ---- こんにちは 取り敢えず、C:\temp フォルダが有るとして ActiveWorkbook.SaveAs Filename:="C:\Test.html", 〜 は ActiveWorkbook.SaveAs Filename:="C:\temp\Test.html", 〜 にしてもダメですか? (ウッシ) 2016/07/27(水) 14:46 ---- On Error GoTo ERMS1 処理1 ERMS1: エラー処理1 の流れ(処理1終了後にエラー処理を飛ばすことをしていない)だと処理1終了後(エラーがなくても)そのままエラー処理1を実行してしまわないか? (ねむねむ) 2016/07/27(水) 14:50 ---- >不慣れなもので自分なりに勉強しながら作ったのですが 1.On Error の使い方が間違っている。今の書き方ではエラーが在ろうが無かろうが  次のステートメントに進んでしまう。  ヘルプなりWebページなりで基本を理解すべし。 2.そもそも、Workbook_BeforeSaveイベントで実行する必要が本当にあるのか、疑問、  再考の余地がありそう。 >原因と解決方法をご教示願えませんでしょうか。 デバッグの基本、F8によるステップ実行。 (とおりすがり) 2016/07/27(水) 14:55 ---- 返信ありがとうございます。 ご指摘を受けて、修正してみました。 エラーが発生した場合は、エラーメッセージをセットし それがあるかどうかでエラー処理をするようにしました。 しかし、デバッグをすると、「ActiveWorkbook.SaveAs」が2回よばれているようです。 1回目のActiveWorkbook.SaveAsまで行った後、 また一番初めの 「Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)」 に戻ってしまいます。 そして、2回目のActiveWorkbook.SaveAsでエラーとなって終了しています。 その時、パスは空になっています。 Dim errStr As String Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Call START End Sub Sub START() MsgBox "開始" errStr = "" '指定フォルダにHTMLで保存 On Error GoTo ERMS1 ActiveWorkbook.SaveAs Filename:="C:\test\Test.html", FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False ERMS1: 'エラー文字列設定 errStr = "ERROR ActiveWorkbook.SaveAs中にエラー発生" If errStr <> "" Then MsgBox "エラー1" MsgBox errStr & "ActiveWorkbook.Path = " & ActiveWorkbook.Path Application.Quit 'Excel を終了する ThisWorkbook.Close False 'Book を閉じる End If errStr = "" 'BOOK保存処理 On Error GoTo ERMS2 Dim w As Workbook For Each w In Workbooks '全ての Book を保存したことにするフラグ (保存処理はしない) w.Saved = True Next Application.Quit 'Excel を終了する ThisWorkbook.Close False 'Book を閉じる ERMS2: 'エラー文字列設定 errStr = "Book保存処理中にエラー発生" If errStr <> "" Then MsgBox errStr Application.Quit 'Excel を終了する ThisWorkbook.Close False 'Book を閉じる End If End Sub (ak) 2016/07/27(水) 15:20 ---- こんにちは エラー処理を書いたコードではなくて、 Sub test() ActiveWorkbook.SaveAs Filename:="C:\test\Test.html", FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False End Sub のように一つずつエラーメッセージを確認するのもいいですよ。 既にファイルが存在するとか。アクセス出来ないとか、何故エラーになるのか確かめて、 そのための対応が出来た上でエラー処理を入れていくといいかも。 2回の「ActiveWorkbook.SaveAs」については、 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Application.EnableEvents = False Call START Application.EnableEvents = True End Sub としてみるとか。 (ウッシ) 2016/07/27(水) 15:43 ---- ありがとうございます。 Sub test() ActiveWorkbook.SaveAs Filename:="C:\test\Test.html", FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False End Sub のみで実行すると、エクセル自体が強制終了します。。。 VBAの画面で、上記のソースを貼り付けて、保存ボタンを押した時点です (ak) 2016/07/27(水) 16:12 ---- こんにちは 新規のブックで、上記コードをセットして名前を付けて「test.xlsm」とかで 保存しておいてから実行しましたか? (ウッシ) 2016/07/27(水) 16:21 ---- はい、やはり強制終了されてしまいます。。。。 どうも ThisWorkbook.Close False 'Book を閉じる Application.Quit 'Excel を終了する のどちらかのコードが無いと、エラーになるようです。 (ak) 2016/07/27(水) 16:45 ---- こんにちは 本当に、新規ブックですか? Sub test() 以外に Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) とか他のコードがセットされてたりしませんか? (ウッシ) 2016/07/27(水) 17:04 ---- すみません、Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  の中に書いておりました、 sub test だけで実行すると、ファイルはできましたが、下記の警告メッセージがでます。 「プライバシーに関する注意:このドキュメントには、マクロ、ActiveXコントロール、XML拡張パックの情報、またはWebコンポーネントが含まれています。これらにはドキュメント検査機能で削除する事ができない個人情報が含まれる場合があります。」 (ak) 2016/07/27(水) 17:17 ---- こんばんは プライバシーに関する注意については http://excel-master.net/miscellaneous-knowledge/notice-about-privacy/ とか、 http://qiita.com/ktyubeshi/items/45e65efb5d056b3d9e34 を参考に対処してもらうとして、 既に、"C:\test\Test.html" が存在した場合は上書きするなら、 Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:\test\Test.html", FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False Application.DisplayAlerts = True とします。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Cancel = True Call START End Sub Sub START() Dim w As Workbook MsgBox "開始" '指定フォルダにHTMLで保存 On Error GoTo ERMS1 Application.DisplayAlerts = False Application.EnableEvents = False ActiveWorkbook.SaveAs Filename:="C:\test\Test.html", FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False Application.EnableEvents = True Application.DisplayAlerts = True For Each w In Workbooks '全ての Book を保存したことにするフラグ (保存処理はしない) w.Saved = True Next Application.Quit 'Excel を終了する ThisWorkbook.Close False 'Book を閉じる Exit Sub ERMS1: MsgBox Err.Description & "ActiveWorkbook.Path = " & ActiveWorkbook.Path Application.EnableEvents = False ThisWorkbook.Save Application.EnableEvents = True Application.Quit 'Excel を終了する ThisWorkbook.Close False 'Book を閉じる End Sub こんな感じにしておいて、どんなエラーが発生するか調べて下さい。 コードをセットしてマクロブックを保存する場合は Workbook_BeforeSave内のCancel = Trueを選択してF9でブレークポイント を設定してから保存実行してブレークしたら、黄色矢印をEnd Sub まで ドラッグしてCall STARTをスキップして下さい。 (ウッシ) 2016/07/28(木) 00:32 ---- 度々ご教示頂きありがとうございます。 エラーは発生しないのですが、 元のエクセルファイルが、更新されないままHTMLで保存されてしまいます。 上司と相談した結果、別の方法を探すことになりそうです。 お時間を頂きまして申し訳ありませんでした。 (ak) 2016/07/28(木) 13:34