[解決済み] VBA+エクセル+トライキャッチ
2022-03-10 20:01:24
質問
VBAで、使用しているスプレッドシートのバージョンを記録する簡単なスクリプトを作成しています。
Private Sub Workbook_Open()
version = "1.0"
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "<WEB SERVICE>"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("version=" + version)
End Sub
処理はうまくいくのですが...
ウェブホストがオフラインの場合、ランタイムエラーを表示する代わりに、それをキャッチして抑制するためにトライキャッチをしようとしています。
VBAでエラーメッセージが表示されないようにtry catchを行うには、どのような方法がありますか?
どのように解決するのですか?
Private Sub Workbook_Open()
on error goto Oops
version = "1.0"
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "<WEB SERVICE>"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("version=" + version)
exit sub
Oops:
'handle error here
End Sub
エラーが発生したため、例えばURLを変更したい場合は、次のようにします。
Private Sub Workbook_Open()
on error goto Oops
version = "1.0"
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "<WEB SERVICE>"
Send:
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("version=" + version)
exit sub
Oops:
'handle error here
URL="new URL"
resume Send 'risk of endless loop if the new URL is also bad
End Sub
また、もしあなたが本当に挑戦的でキャッチーな気分なら、このようにエミュレートすることができます。
Private Sub Workbook_Open()
version = "1.0"
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "<WEB SERVICE>"
on error resume next 'be very careful with this, it ignores all errors
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("version=" + version)
if err <> 0 then
'not 0 means it errored, handle it here
err.clear 'keep in mind this doesn't reset the error handler, any code after this will still ignore errors
end if
End Sub
だから、これを拡張して、本当にハードコアにする......。
Private Sub Workbook_Open()
version = "1.0"
on error resume next
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
if err <> 0 then
'unable to create object, give up
err.clear
exit sub
end if
URL = "<WEB SERVICE>"
objHTTP.Open "POST", URL, False
if err <> 0 then
'unable to open request, give up
err.clear
exit sub
end if
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("version=" + version)
if err <> 0 then
'unable to send request, give up
err.clear
exit sub
end if
End Sub
また、注意すべき点として
on error goto
のスタイルは処理されないので、もしこのようなことをした場合
private sub MakeError()
dim iTemp as integer
on error goto Oops
iTemp = 5 / 0 'divide by 0 error
exit sub
Oops:
itemp = 4 / 0 'unhandled exception, divide by 0 error
end sub
しかし、処理されない例外が発生します
private sub MakeError()
dim iTemp as integer
on error resume next
iTemp = 5 / 0 'divide by 0 error
if err <> 0 then
err.clear
iTemp = 4 / 0 'divide by 0 error, but still ignored
if err <> 0 then
'another error
end if
end if
end sub
VBAがすべて無視するため、例外は発生しません。
関連
-
[解決済み] VBAでRangeクラスのSelectメソッドに失敗する
-
[解決済み] Excel - 複数列の SUMIFS
-
[解決済み] モジュール内でUserForm_Initialize()を呼び出す
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] Excel の相互運用オブジェクトを適切にクリーンアップするにはどうすればよいですか?
-
[解決済み] Microsoft Excelで正規表現(Regex)をセル内とループの両方で使用する方法
-
[解決済み] Excel VBA Projectのパスワードを解読する方法はありますか?
-
[解決済み】Excelで列全体に数式を適用するショートカット【終了しました
-
[解決済み】Excel VBAでSelectを使用しないようにする方法
-
[解決済み] MS Excelでバージョン管理をする最適な方法【非公開
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ワークシートクラスの貼り付けメソッドに失敗しました」が時々発生するのはなぜですか?
-
[解決済み] ブレークモードでマクロを実行できない
-
[解決済み] 閉じたワークブックから値を取得するExecuteExcel4Macro
-
[解決済み] VBAやマクロを使わずにExcelでループさせる方法とは?
-
[解決済み] どのようにvbaコードで "名前を付けて保存 "を行うには、datestampと私の現在のExcelワークブックを保存するには?
-
[解決済み] モジュール内でUserForm_Initialize()を呼び出す
-
[解決済み] Excelの数式 LIKE、AND、IF、WILDCARDS
-
[解決済み] Excel の TEXT 式で 'yyyy' が年に変換されない
-
[解決済み】Excel 2013で.csvファイルを正しく表示する方法は?
-
[解決済み] IF文: 条件が偽の場合にセルを空白にする方法("" は機能しません)