質問するログイン新規登録

Q&A

解決済

1回答

1640閲覧

vbaでウェブサイトのテキストを取得する方法について

murama2

総合スコア113

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/01/20 01:13

編集2019/01/20 02:08

0

0

VBAでのウェブサイト内のテキスト出力についてご質問があります。
下記のような構造になっているHTMLから「取得したい文字列」部分を取得する処理を作成しました。

<dl class="signature"> <dt>取得したい文字列</dt> <dd>テキスト、テキスト、テキスト、テキスト、テキスト、テキスト、テキスト、テキスト</dd> </dl>

下記コードで取得ができたのですが、ウェブサイトのページによっては上記の<dl>タグがない場合があり、その場合は取得しないという処理ができずにいます。
For部分でif文を書けばいいかと思いましたが、その前の取得部分でそもそも取得できずエラーがでてしまう状態です。

試したコード

Set coltd = objIE.document.getElementsByClassName("signature")(0).getElementsByTagName("dt") For Each el In coltd Debug.Print el.innerText Next el

エラーについて

実行時エラー:91 オブジェクト変数またはWithブロック変数が設定されていません

データがない場合の処理についてご教授いただけないでしょうか。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

m.ts10806

2019/01/20 02:04

エラーが出るのでしたらそのエラーをそのままご提示ください
guest

回答1

0

ベストアンサー

データが無い場合にどうしたいのか書かれていませんが、ただ単に実行が止まらないようにしたいだけなのでしょうか。

そうならば、ClassNameでの取得結果がNothingなのにもかかわらず、そのメンバー参照をしたため発生しているエラーですから、いったんClassNameで取得するところまでで区切り、その結果がNothingでなけばElementNameで取得する処理を行えばいいのではないですか?

VBA

1Set coltd = objIE.document.getElementsByClassName("signature") 2 3If Not coltd Is Nothing Then 4 For Each el In coltd(0).getElementsByTagName("dt") 5 Debug.Print el.innerText 6 Next el 7End If

もっと雑に、無視したい部分はOn Error Resume Nextしてしまうとか。

投稿2019/01/20 03:30

編集2019/01/20 03:31
退会済みユーザー

退会済みユーザー

総合スコア0

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問