質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.45%

  • VBA

    2398questions

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

IEでリンクされているページへ移動させるVBAの記述が分からない

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 3,130

VBA-IE

score 8

VBAでIEの表示画面でリンクされているページへ移動させる処理で困っています。

IEでの表示イメージは下記です。該当するものが27件あり、そのなかで今のページでは1-20件を表示していることを示しています。21件目以降を表示させるには、横にある2、または» を押します。
ここで、2を押すコードを記述したいのですが、htmlのタグ要素の読み方が分からず、指定できないで困っています。
htmlソースも下記に示しますので、よろしくお願いします。

<IE表示イメージ>
27件中1-20件表示     « 1 2 »

この2を押したい

<htmlソース>
<div class="pagination">
<ul>
<li class="disabled"><a href="">«</a></li>
<li class="active"><a href="">1</a></li>
<li><a onclick="w=document.form1;w.act.value='';w.s_index.value='20';w.submit();return(false);" href="javascript:#">2</a></li>
<li><a onclick="w=document.form1;w.act.value='';w.s_index.value='20';w.submit();return(false);" href="javascript:#">»</a></li>
</ul>
</div>

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

下記のようなコードで、リンク要素の 2 をクリックできると思います。

    For Each objLink In objIE.document.Links
        If InStr(objLink.outerHTML, "2") > 0 Then
            objLink.Click
            Do While objIE.Busy = True Or objIE.readyState = 4
                DoEvents
            Loop
            Exit For
        End If
    Next

あるいは、onclick のJSをみると form を実行しているようなので、下記でもけいるかも。

    w = objIE.document.form1
    w.act.value = ""
    w.s_index.value = "20"
    w.submit

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/19 15:04

    回答ありがとうございます。2つ提案いただき、実行してみましたが、下記の通りです。
    ①上の方法:「WEBサイトによって表示が拒否された」と出て「WEBサイトを見るにはログインが必要」
    と出ます。ただ、マウスで”2”をクリックする場合には、前記のエラーは出ずに正常にページが遷移します。この場合、マクロでも表示拒否とかログインが必要とかならない方法、ありませんでしょうか?
    ②下の方法:まず、"W"で変数が未定義としてコンパイルエラーとなります。
    アドバイスよろしくお願いします。

    キャンセル

  • 2017/06/19 16:27

    > ①上の方法:「WEBサイトによって表示が拒否された」と出て「WEBサイトを見るにはログインが必要」と出ます。

    なんらかのセキュリティ対策がされているのでしょうね。そうなると私にはちょっとわかりません。
    また、解除できる方法があったとしても、不正アクセスになりそうな気もします。。

    > ②下の方法:まず、"W"で変数が未定義としてコンパイルエラーとなります。

    下記の変数宣言を現状のコードの前に挿入してみてください。

    Dim W As Object

    キャンセル

  • 2017/06/22 10:44

    セキュリティ対策がなされているのであれば、②の方法でも駄目かもと思いながら、Dim変数宣言を追加して実行してみました。
    実行したところ、w = objIE.document.form1のところで、「オブジェクト変数またはWithブロック変数が設定されていません」とエラーとなります。
    修正方法を教えてください。

    キャンセル

  • 2017/06/22 11:35

    問題のページのhtmlソースを見ながらWEBページをチェックしていたところ、タイトル欄(下記htmlソースで、”XXXX管理システム”とある部分)をマウスでクリックすると、同じエラー「WEBサイトによって表示が拒否された」と出て「WEBサイトを見るにはログインが必要」が出ました。
    この部分のhtmlソースは以下ですが、教えていただいた①の方法で、間違ってこのタイトル欄をクリックする様な動作にはなりませんよね?ソースの中にadmin_hd_logo_2.gifとあり、この部分の"2"を間違ってクリックするとか、ないですよね?
    初心者でhtmlについてもVBAについても詳しくないので、全く当て外れかもしれません。
    ホームページ側のセキュリティ対策なら断念せざるを得ないですが、たまたま同じエラー表示になったことから、何か探るヒントになりませんでしょうか?
    ーーーーー以下、タイトル欄のhtmlソースーーーーーー
    <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
    <div class="container">
    <a class="brand" href=""><span class="pull-left"><img src="../common/img/admin_hd_logo_2.gif" /></span>XXXX管理システム</a>
    <ul class="nav pull-right">
    <li><a href="logout.php">ログアウト</a></li>
    </ul>
    </div>
    <!-- /container -->
    </div>
    <!-- /navbar-inner -->
    </div>
    <!-- /navbar -->

    キャンセル

  • 2017/06/22 11:44

    > この部分の"2"を間違ってクリックするとか、ないですよね?

    ありえますね。もう少し範囲を広げて、
    If InStr(objLink.outerHTML, "2") > 0 Then

    の部分を下記にしてみたらどうでしょう。
    If InStr(objLink.outerHTML, "2</a>") > 0 Then

    キャンセル

  • 2017/06/27 10:32

    いただきました回答通り、
    If InStr(objLink.outerHTML, "2</a>") > 0 Then
    に記述を変更したら、エラーにもならず、ばっちりうまくページ移動ができました。
    大変助かりました。ありがとうございます。
    これに関連して、もう1つ質問があります。記述方法を教えていただけると助かります。
    実は、ホームページの表示で"2"の右横にある"»"も押せるようにしたく、下記の記述で試していますが、①~④いずれもページ移動が起こりません。"»"は特殊コードなので、コード指定をしてみましたが、同じでした。記述の仕方が間違えていると思いますが、教えていただきたくお願いします。
    ①If InStr(objLink.outerHTML, "≫") > 0 Then
    ②If InStr(objLink.outerHTML, "≫</a>") > 0 Then
    ③If InStr(objLink.outerHTML, "&raquo;") > 0 Then
    ④If InStr(objLink.outerHTML, "&raquo;</a>") > 0 Then

    キャンセル

  • 2017/06/27 11:23

    コードとしては間違ってはないと思うのですが。実際のURLの提示は難しいですか。実際のページで動作確認しながらでないと、原因追求は難しいです。

    キャンセル

  • 2017/06/29 08:58

    回答ありがとうございます。
    コードとしては、①~④いずれも間違いではないということですね。
    現状、”2”を押すことで制限付き(40件まで)で運用可能ですので、とりあえず”2”で運用し、時間をみて"≫"の方を調べようと思います。
    色々教えていただき、ありがとうございます。

    キャンセル

  • 2017/06/29 09:49

    解決済みなってしまってから、改めて見直して気づいたのですが、
    HTML の方は »
    VBAの方は ≫
    になってますが、見た目は同じに見えますが、文字としては異なります。
    エディタ等にコピーして等幅フォントで確認すると分かりやすいです。

    VBAの方の文字をHTMLの文字に変更したらどうでしょうか。

    キャンセル

  • 2017/06/29 11:00

    引続き、提案ありがとうございます。
    ただ、具体的やり方が分かりません。アドバイスをお願いします。
    >エディタ等にコピーして等幅フォントにする方法ですが、ホームページでソース表示をすると、該当文字は、&raquo;になっており、 "≫"のコピペができません。

    キャンセル

  • 2017/06/29 11:39

    エディタで確認というのは、 » と ≫ が異なるということ確認するためのものです。ホームページのソースが &raquo; なら、VBAの方もそれに合わせてください。それで、駄目なら、実際のURLを見ないと原因追及は難しいです。

    キャンセル

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

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • VBA

    2398questions

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