VB.NETで
Dim data1 as String = "PostNo"
Dim url as string = "http://www********"
・
・
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Navigate (url)
.document.Forms(0).Elements(data1).Value = KeyWord1
として実行したいのですが、
data1のところで、ページ内にそういうものはないというような
エラーになってしまいます。
data1内の文字列を直接("PostNo")と指定すると正常に動くのですが、
外部のファイルから読み込んできたいのでそのようにはできません。
ここを変数で指定する方法がありましたら教えて頂きたいです。
KeyWord1についてはPublic変数で別のところで設定してあります。
良くわからないのですが、ヘルプでは
object.elements([index])
となってますね。
取りあえず
.document.Forms(0).Elements(Val(data1)).Value = KeyWord1
こうするとどうなりますか。
ねろさん、お返事ありがとうございます。
今、VB.NETが出来るパソコンではないので、
家に帰ったら早速試してみます!
> .Navigate (url)
> .document.Forms(0).Elements(data1).Value = KeyWord1
これはNG。
Navigate/Navigate2 した直後に documentプロパティに
アクセスしてはいけません。この時点では、読み込みが完了していない
可能性がありますので、DocumentCompleteイベントが発生するまでは、
document以下のオブジェクトにアクセスしないようにしましょう。
> .document.Forms(0).Elements(data1).Value = KeyWord1
VB.NET ではこのような記述をしてはいけません。VB6なら良いですけど。
.NETからCOMコンポーネントを利用した場合は、最後に
「Marshal.ReleaseComObject メソッド」を呼び出して、
明示的にオブジェクトの解放を行うように心がけてください。
(VB6やVBSなら、何もせずとも、使用後には自動で解放されるのですけれどね)
詳細は、google等で「ReleaseComObject」について調べてみてください。
> data1内の文字列を直接("PostNo")と指定すると正常に動くのですが、
データ型が異なるからです。CObj(data1) を指定するか、もしくは、
data1 そのものを Object型で宣言するようにしましょう。
# Documentオブジェクトは、本来は、VBScriptやJScriptからの操作を
# 前提としているため、String や Integer ではなく、常に「Variant型」の
# パラメータを受け付ける設計になっています。
## COMのVariant型は、.NETにおいては Object型 にマッピングされます。
魔界の仮面弁士さんお返事ありがとうございます。
お返事を参考に下記のようにしたらできました!
.Navigate(Url)
Do While .Busy = True
Loop
.Visible = True
Do While .document.ReadyState <> "complete"
Loop
LocationNameFirst = IE.LocationName
AppActivate(LocationNameFirst)
・
・
.document.Forms(0).Elements(CObj(data1)).value = KeyWord1
↑の動作が間に合わないときがあったので、
ちょうど試行錯誤していたところでしたので、
この件についてもとても助かりました。
ねろさん、魔界の仮面弁士さん。どうもありがとうございました。
ツイート | ![]() |