プロが教えるわが家の防犯対策術!

作りたいプログラムはpartsno_01から、partsno_20までのテキストボックスに、エクセルのセルA1から、A20までにある製品番号を入力し、データをsubmitするものです。

Sub pn()

Dim ObjIE As Object
Dim ObjShell As Object
Dim ObjWindow As Object
Dim WinExist As Boolean

WinExist = False
Set ObjShell = CreateObject("Shell.Application")
For Each ObjWindow In ObjShell.Windows
If TypeName(ObjWindow.document) = "HTMLDocument" Then
WinExist = True
Set ObjIE = ObjWindow
End If
Next
Set ObjShell = Nothing

If Not WinExist = True Then
MsgBox "製品番号検索を開いてください。"
Exit Sub
End If
ObjIE.Visible = True

Do While i < 21

i = 1

Set elements = ObjIE.document.getElementsByName("partsno_0" & "i")
If elements Is Nothing Then
Exit Sub
End If
elements.Item(0).Value = Worksheets(1).Cells(i, 1).Value

i = i + 1
Loop
End Sub

で、
elements.Item(0).Value = Worksheets(1).Cells(1, 1).Value

が常にエラーになります。
間違っていはいないと思うんですが・・・・。
何がいけないのでしょうか。

A 回答 (1件)

 「製品番号検索」という ページ の詳細な構成が判りませんが、「ん?」と思う点を列挙いたします。



1)getElementsByName("partsno_0" & "i")

getElementsByName("partsno_0" & i)
ではありませんか?

2)If Not WinExist = True Then
とのことですが、「製品番号検索」という ページ 以外の WEBページ が開いている場合も、
WinExist = True
になりませんかねぇ?

3)i = i + 1
しながら、「Do ~ Loop」で回すのでしたら、
i = 1
は「Do」より前ですね。

4)「i」が2桁になった場合に「partsno_20」ではなくて、「partsno_020」というような文字列になってしまいますので、(1)で訂正した
("partsno_0" & i)
の部分は、
("partsno_" & Format(i, "00"))
とすべきです。

この回答への補足

すみません。なぜかできました。

補足日時:2009/11/30 23:15
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

1)気づきませんでした。その通りですね。
2)その通りです。ただ、普段はfirefoxを使用するので、予測される問題はおきません。
3)その通りですね。すみません素人で・・・。
4)なるほど、formatって、そういう使い方もできるんですね。

以下のように書き換えましたが、まだ
elements.Item(0).Value = Worksheets(1).Cells(i, 1).Value
で、止まります・・・・。

i = 1

Do While i < 21

Set elements = ObjIE.document.getElementsByName("partsno_" & Format(i, "00"))
If elements Is Nothing Then
Exit Sub
End If
elements.Item(0).Value = Worksheets(1).Cells(i, 1).Value

i = i + 1
Loop

elements.Item(0).form.submit


End Sub

お礼日時:2009/11/30 23:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!