下記のマクロでは、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も見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
【お題】・忍者がやってるYouTubeが炎上してしまった理由
-
自分独自の健康法はある?
こうしていると調子がいい!みたいな自分独自の健康法、こだわりはありますか?
-
【選手権お題その3】この画像で一言【大喜利】
とあるワンシーンを切り取った画像。この画像で一言、お願いします!
-
【選手権お題その2】この漫画の2コマ目を考えてください
サッカーのワンシーンを切り取った1コマ目。果たして2コマ目にはどんな展開になるのか教えてください。
-
実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」
Visual Basic(VBA)
-
ADODB.Streamを使用してUTF-8を出力
Visual Basic(VBA)
-
ExcelでAccessのテーブルにADOでレコード追加時にエラーが発生
Excel(エクセル)
-
-
4
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
5
アクセスのフィルタ nullについて。
その他(データベース)
-
6
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
7
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
8
Accessファイルを作成者以外は編集できないように設定するには
Access(アクセス)
-
9
ACCESS クエリ→フォーム フィルターをかけたデータのみエクスポートしたい
Excel(エクセル)
-
10
Accessを開くと「排他モードじゃないので変更しても保存できない」との旨の表示が出てしまう。
Access(アクセス)
-
11
CloseとDisposeの違い
Visual Basic(VBA)
-
12
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
13
【Excel VBA】指定行以降をクリアするには?
Visual Basic(VBA)
-
14
Access2010 「演算子がありません」エラー
その他(データベース)
-
15
Access Error3061 パラメータが少なすぎます。4を指定してください。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
EXCEL VBAマクロ中断でデバッグ...
-
VBAがブレークモードになっ...
-
実行時エラー48発生時のDLL特定...
-
【Excel VBA】マクロをボタンに...
-
なぜこんな初歩的なVBAのIf文で...
-
1列目の何行目に検索文字がある...
-
VBS実行時エラー オブジェクト...
-
Access2000での未定義関数repla...
-
Outlook.ApplicationをCreateOb...
-
実行時エラー -'-2147417848
-
INSERT INTOステートメント構文...
-
'width'の値をパース中にエラー...
-
VB6+SQL サーバー 2000 で 実行...
-
ASP.NET OleDbConnectionが定義...
-
vbaのvlookup関数エラー原因を...
-
'Speak'メソッドは失敗しました
-
なぜエラーになるのでしょうか...
-
エクセルVBA グラフが描けない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
実行時エラー48発生時のDLL特定...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
エクセルエラー13型が一致しま...
-
マクロについて教えてください...
-
【Excel VBA】マクロをボタンに...
-
VBAでのエラー
-
ExcelVBAで、ユーザー定義型は...
-
EXCEL VBAマクロ中断でデバッグ...
-
ExcelVBA Range クラスの Page...
-
VBSで変数の宣言はできないので...
-
実行時エラー3001「引数が間違...
-
実行時エラー -'-2147417848
-
なぜエラーになるのでしょうか...
-
VBS実行時エラー オブジェクト...
-
Outlook.ApplicationをCreateOb...
-
プロシージャ名の取得
-
VB6+SQL サーバー 2000 で 実行...
-
VBAで、定数式が必要ですのエラ...
おすすめ情報