[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルを保存した時に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
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
上司と相談した結果、別の方法を探すことになりそうです。
お時間を頂きまして申し訳ありませんでした。
(ak) 2016/07/28(木) 13:34
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.