none
IE7でのタブブラウザ処理時のエラー RRS feed

  • 質問

  • お世話になります。

    VB初心者ですが、IE7でのタブブラウザの生成と、生成された情報を取得するプログラムの作成に挑戦中です。

     

    OS:Windows Vista home premium

    ブラウザ:IE7

    VB:VB2005 Express Edition

     

    IE7を起動した後で、下記のプログラムを実行すると、タブブラウザが新たに2個生成されます。

    また、Windowsの名前とURLを取得し、表示するようにしています。

     

            Const navOpenInNewTab = &H800

            Dim objShell
            Dim a, b, i

     

            'タブブラウザを2個生成

            objShell = CreateObject("Shell.Application")

            objShell.Windows.Item(objShell.Windows.Count - 1).Navigate2("http://www.yahoo.co.jp", navOpenInNewTab)
            objShell.Windows.Item(objShell.Windows.Count - 1).Navigate2("http://www.google.co.jp", navOpenInNewTab)

     

            'タブブラウザが起動するのを待つ

            System.Threading.Thread.Sleep(1000)

     

            '--------------------------------------------------------------------

            'IE起動後直後のURL

            a = objShell.Windows.item(0).Fullname
            b = objShell.Windows.item(0).LocationURL
            MsgBox(a)
            MsgBox(b)

     

            '新規に生成されたタブブラウザ1番目のURL

            a = objShell.Windows.item(1).Fullname
            b = objShell.Windows.item(1).LocationURL
            MsgBox(a)
            MsgBox(b)

     

            '新規に生成されたタブブラウザ2番目のURL

            a = objShell.Windows.item(2).Fullname
            b = objShell.Windows.item(2).LocationURL
            MsgBox(a)
            MsgBox(b)
            '--------------------------------------------------------------------

     

    ここまでは、無事に動作しました。

    ところが、'--------------------------------------------------------------------で囲った箇所を次のように変更したところ、

     

            '--------------------------------------------------------------------

            for i = 0 to 2

            a = objShell.Windows.item(i).Fullname
            b = objShell.Windows.item(i).LocationURL
            MsgBox(a)
            MsgBox(b)

            i = i + 1

            '--------------------------------------------------------------------

     

    a = objShell.Windows.item(i).Fullname

    の箇所で、

    「パラメータが間違っています。 (HRESULT からの例外: 0x80070057 (E_INVALIDARG))」

    というエラーが表示されます。

     

    どうも、item(i)というように、()内に変数を使うときにエラーが起こっているような気がします。

     

    手打ちで、item(0) や item(1) のように指定した場合は問題が起こらないのですが、ここには変数が使えないのでしょうか?

    それとも、プログラムが根本的に間違っているのでしょうか?

     

    アドバイスをいただけましたら幸いです。

     

    どうぞよろしくお願いいたします。

     

     

    2008年2月6日 17:42

回答

  • item(i) と書いた行は変数"i" が参照渡し(ByRef)になるためパラメータが間違っていますのエラーになります。

    item((i)) と書いて変数を値渡し(ByVal)にしてみてください。

     

    <参考>

    引数渡しの方法

    2008年2月7日 15:18

すべての返信

  • item(i) と書いた行は変数"i" が参照渡し(ByRef)になるためパラメータが間違っていますのエラーになります。

    item((i)) と書いて変数を値渡し(ByVal)にしてみてください。

     

    <参考>

    引数渡しの方法

    2008年2月7日 15:18
  •  

    おかげさまで、ご教授いただいた方法でうまくいきました。

    ありがとうございました。

    2008年2月7日 16:06
  • こんにちは。中川俊輔 です。

     

    C.Johnさん、大変参考になる回答ありがとうございます。

     

    doratchさん、フォーラムのご利用ありがとうございます。

    問題が解決されたようなので、C.Johnさんの回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    問題解決につながる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    doratchさんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

     

    2008年2月13日 8:05