Visual Basicのフォームからホームページを開いて変数を渡すには2

解決


おがわ  2006-12-28 21:53:11  No: 97563

さきほどみなさんのおかげでプログラムが動きました。

しかし、コマンドボタンを何度も押していると

「オブジェクト変数、またはwithブロック変数が設定されていません。」
と表示されてしまいます。

なぜでしょうか?

ちなみに書いたソースは以下の通りです。

---
Dim IE As InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "http://---/shanghai/search.php"
IE.Visible = True
Do Until Not IE.Busy
DoEvents
Loop
IE.document.getElementById("scorejp").Value = "1206999"
IE.document.getElementsByName("Submit3")(0).Click
Set IE = Nothing
---


魔界の仮面弁士  2006-12-28 22:03:30  No: 97564

質問時には、開発環境も明記しましょう。

> さきほどみなさんのおかげでプログラムが動きました。
「さきほど」が何を指すのかを示しましょう。(URL 等を併記するとか)
そうしないと、第三者がこのスレッドを見たときに、話の流れを読めませんよね。

> なぜでしょうか?
その質問をする前に、コードのどの行のどのプロパティが、そのエラーの
原因となっているのかを調査 & 質問時に明記するべきかと。

で、Busy プロパティが変化したからといって、ドキュメントの解析が
完了しているとは限りません。ですから、ループで待機するのではなく、
InternetExplorer オブジェクトの DocumentComplete イベントを
利用することをお勧めします。

もし、何らかの理由(どうしてもレイトバインドで開発したいとか)で、
イベントを利用できないのであれば、せめて、document プロパティが
適切なオブジェクトを返しているかをチェックするようにしましょう。


おがわ  2006-12-28 22:22:32  No: 97565

> さきほどみなさんのおかげでプログラムが動きました。
「さきほど」が何を指すのかを示しましょう。(URL 等を併記するとか)
そうしないと、第三者がこのスレッドを見たときに、話の流れを読めませんよね。

ここからの話の続きです。申し訳ありません。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200612/06120051.txt

> なぜでしょうか?
その質問をする前に、コードのどの行のどのプロパティが、そのエラーの
原因となっているのかを調査 & 質問時に明記するべきかと。

---
Dim IE As InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "http://---/shanghai/search.php"
IE.Visible = True
Do Until Not IE.Busy
DoEvents
Loop
IE.document.getElementById("scorejp").Value = "1206999"  ←ここでエラー起きます。
IE.document.getElementsByName("Submit3")(0).Click
Set IE = Nothing
---

いろいろ申し訳ありません。

VB6で開発していて初心者的な質問で申し訳ありませんがDocumentComplete イベントはどのように使うのでしょうか。

たびたびご面倒をおかけします。


魔界の仮面弁士  2006-12-28 22:42:32  No: 97566

人の発言を引用するときは、行頭に「>」記号を入れていただけると助かります。

> IE.document.getElementById("scorejp").Value = "1206999"  ←ここでエラー起きます。
その行の「どこ」でエラーが起きるのかを特定してください、という事です。

たとえば 上記の 1 行を
  Dim doc As Object, element As Object
  Set doc = IE.document  '…(1)
  Set element = doc.getElementById("scorejp")  '…(2)
  element.value = "1206999"  '…(3)
という 3 段階に分離すれば、その行のどのプロパティに問題があるのか分かりますよね。

で…今回問題になっている
>>>「オブジェクト変数、またはwithブロック変数が設定されていません。」
となる可能性が高いのは(2)、次いで(3)ですね。
(エラーの理由については、先述したとおりです)

> DocumentComplete イベントはどのように使うのでしょうか。
フォームモジュールもしくはクラスモジュールにて(標準モジュールは不可)、
  Private WithEvents IE As InternetExplorer 
という変数宣言を行えば、InternetExplorer のイベントを利用できます。

ちなみに DocumentComplete イベントは、ページ遷移後、その
ドキュメントの解析が完了したときに発生するイベントです。

もし、ドキュメントの解析が終わっていなかった場合、Document プロパティが
Nothing を返したり、あるいは、途中までしか解析されていないドキュメントを
返してくる(この場合、一部の要素にアクセスできない)可能性があります。


おがわ  2006-12-28 23:07:23  No: 97567

たびたびご迷惑おかけします。

Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant)←ここで構文エラーが出てしまいます。

IE.document.getElementById("scorejp").Value = "1206999"
IE.document.getElementsByName("Submit3")(0).Click

End Sub

DOcumentCompleteイベントまでは行けました。
しかし、構文エラーで止まってしまいます。
どういうことなのでしょう?

たびたび申し訳ありませんがご教授お願いいたします。


おがわ  2006-12-28 23:46:58  No: 97568

ソースを掃除していたら治りました。

いろいろご迷惑おかけいたしました。

魔界の仮面弁士さんにはお世話になりました。

いろいろなっていない点もございますが宜しくお願いいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加