
下記のマクロでは、A列にあるURLのソースに、
指定した語句が含まれているか調べるものです。
このマクロを動かしていると、頻繁に、
実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」
というポップが出てきます。
そのため、思うようにマクロ作業が進みません。
このエラーが出る原因は何があるでしょうか?
エラーが出ないようにするためには、どのように記述した方がいいでしょうか?
それか、このエラーのポップを避けて、
その次のURLから動かしていくという風にできたりしますでしょうか?
実行時エラーのときデバッグボタンをクリックすると、
in_strm.Charset = sCharset
の部分が黄色マーカーになっています。
エラーが出たURLの一部は、これらです。
https://www.apo-job.jp/
https://www.aniel.jp/
https://www.amo-co.jp/
バージョンは、Excel2016です。
よろしくお願いいたします。
Sub main()
'!!!! [Microsoft XML v6.0] に参照設定すること
Dim xHttp As IServerXMLHTTPRequest
Dim myErr_Number As Long, myErr_Description As String
Set xHttp = CreateObject("MSXML2.ServerXMLHTTP")
Dim aCell As Range
R = 1
For Each aCell In Selection.Columns(1).Cells '選択セルの1列目がURL
Application.Goto aCell '対象URLの列にジャンプ表示
DoEvents
sUrl = aCell.Value
If sUrl <> "" Then
xHttp.Open "GET", sUrl, True
xHttp.setOption SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS, _
SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS ' SSL関係のエラーを無視
On Error Resume Next
xHttp.send
If xHttp.readyState <> 4 Then
xHttp.waitForResponse 5 '5秒まってだめならタイムアウト
End If
If xHttp.readyState <> 4 Then Err.Raise 1004, , "タイムアウト"
myErr_Number = Err.Number
myErr_Description = Err.Description
On Error GoTo 0
If myErr_Number = 0 Then
sHtml = xHttp.responseText
v1 = InStr(1, sHtml, "charset=") + 8
If (Mid(sHtml, v1, 1) = """") Then v1 = v1 + 1
v2 = InStr(v1, sHtml, """")
If (v2 > InStr(v1, sHtml, "/")) Then v2 = InStr(v1, sHtml, "/")
If (v2 > InStr(v1, sHtml, " ")) Then v2 = InStr(v1, sHtml, " ")
sCharset = Mid(sHtml, v1, v2 - v1)
Set in_strm = CreateObject("ADODB.Stream")
in_strm.Open
in_strm.Position = 0
in_strm.Type = 1
in_strm.Write xHttp.responseBody
in_strm.Position = 0
in_strm.Type = 2
in_strm.Charset = sCharset
sHtml = in_strm.ReadText
If InStr(sHtml, "A") > 0 And InStr(sHtml, "B") > 0 And InStr(sHtml, "C") > 0 Then
aCell.Offset(, 1).Value = "○"
Else
aCell.Offset(, 1).Value = "--"
End If
Else
aCell.Offset(, 1).Value = myErr_Description ' エラー時はエラー内容を表示
End If
DoEvents
End If
Next
Set xHttp = Nothing
End Sub
No.2ベストアンサー
- 回答日時:
> in_strm.Charset = sCharsetの手前に、
> On Error Goto xxxxを入れてみました。
> マクロを動かすと、『行ラベルが定義されていません。』と出ます。
いや、No.1は原因を調べるための方向性を提示しただけで、そのままプログラムに加えろをいう意味ではありません。
もしかしてVBAの各行の意味を理解されていないのですか?
「On Error Resume Next」を使用されているので理解されていると思ったのですが……
そうであるならば、文法から勉強されることをお勧めします。
「On Error Goto」の使い方は検索すれば、直ぐにみつかります。
返信ありがとうございます!
申し訳ありません。
質問のマクロは、ネットにあったものです。
私自身、マクロに関する知識は皆無です。
ですが、どうしても今の作業を完了させないとならないです。
そのため、マクロのエラーをパスして、
次のURLから調べていくようにしたいです。
調べてみると、『On Error Goto』は、
エラーが起きた時に次の処理をする、というもののようですね。
エラーが出たら、すぐ下のセルに移行して調べ始める。
というのは出来るのでしょうか?
On Error Resume Nextと使うと思うのですが、
どのように記述すればいいかわからないです。
よろしければ、すぐ下のセルへ移行する記述を書いていただけたら幸いです。
No.1
- 回答日時:
私の環境では、ご提示のURLでエラーになりませんでした(Win10 Excel365)
sCharset = Mid(sHtml, v1, v2 - v1)
で正しい文字セットの文字列("UTF-8"等)が取得できていないのが原因です。
エラー発生時に、sCharset にどの様な文字列が代入されているか確認して
何故そうなるかを調べてはいかがでしょうか?
おそらく
v1 = InStr(1, sHtml, "charset=") + 8
If (Mid(sHtml, v1, 1) = """") Then v1 = v1 + 1
v2 = InStr(v1, sHtml, """")
If (v2 > InStr(v1, sHtml, "/")) Then v2 = InStr(v1, sHtml, "/")
If (v2 > InStr(v1, sHtml, " ")) Then v2 = InStr(v1, sHtml, " ")
のあたりの処理が適切ではないのではないかと推測できます。
in_strm.Charset = sCharset の手前で On Error Goto xxxxを挿入して sCharsetの内容を表示させてみましょう。
回答ありがとうございます!
in_strm.Charset = sCharsetの手前に、
On Error Goto xxxxを入れてみました。
マクロを動かすと、『行ラベルが定義されていません。』と出ます。
そして、一番最初の行の、『Sub ~ 』に黄色マーカーがついています。
これは、他の部分も変更しないとならないのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) エクセルのマクロとシートの保護について教えてください。 1 2022/10/18 08:36
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
実行時エラー48発生時のDLL特定...
-
Invalid procedure call or arg...
-
実行時エラー3001「引数が間違...
-
vbaのvlookup関数エラー原因を...
-
職場から目的地までの距離集計
-
【VBA】ボタンに登録したマクロ...
-
なぜエラーになるのでしょうか...
-
【VBA】実行中に「型が一致しま...
-
EXCEL/VBAで、自分のPCだけエラ...
-
VBAがブレークモードになっ...
-
ExcelVBAで、ユーザー定義型は...
-
【Excel VBA】マクロをボタンに...
-
ExcelVBA Range クラスの Page...
-
Excel TextBoxクラスのCharacte...
-
VBAで、定数式が必要ですのエラ...
-
UWSCのビジー待ちで60秒経った...
-
EXCEL VBAマクロ中断でデバッグ...
-
Outlook.ApplicationをCreateOb...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
実行時エラー -'-2147417848
-
ExcelVBA Range クラスの Page...
-
マクロについて教えてください...
-
VBAでのエラー
-
【Excel VBA】マクロをボタンに...
-
実行時エラー48発生時のDLL特定...
-
EXCEL VBAマクロ中断でデバッグ...
-
なぜエラーになるのでしょうか...
-
実行時エラー3001「引数が間違...
-
OLEDB.NETで接続できない
-
INSERT INTOステートメント構文...
-
VBAのエラー発生場所をメッセー...
-
VB6+SQL サーバー 2000 で 実行...
-
Outlook.ApplicationをCreateOb...
-
ADODB.Streamを使用してUTF-8を...
-
カーソルオープンでエラー(ORA...
-
Invalid procedure call or arg...
おすすめ情報