電子書籍の厳選無料作品が豊富!

以前、こちらでインターネット上の窓にエクセルの数値を自動で入れたいと言う質問をさせて頂きました。http://oshiete.goo.ne.jp/qa/7676012.html

VBAを利用したらどうかと教えていただき、マクロをその後、勉強し動いて感動しました。

クロネコの宅急便サイトで応用しようと試みたのですが、「オブジェクト変数またはWithブロック変数が設定されてません。」とエラーが出ます。

同じ仕組みだと思うのですが何がいけないんでしょうか?

Dim myWindow As Object
Dim myUrl As String

myUrl = "http://toi.kuronekoyamato.co.jp/cgi-bin/tneko?init
For Each myWindow In CreateObject("Shell.Application").Windows
With myWindow
If .LocationURL = myUrl Then
.document.getElementById("text1").value = Range("A1").value
.document.getElementById("text2").value = Range("A2").value
.document.getElementById("text3").value = Range("A3").value
.document.getElementById("text4").value = Range("A4").value
.document.getElementById("text5").value = Range("A5").value
Exit For
End If
End With
Next myWindow

A 回答 (4件)

既にki-aaaさんが回答されていますがソースを見なければいけません。


入力欄のソースは
<input name="number01" size="20" maxlength="14">
というようになっています。
ID属性は設定されていないのでgetElementByIdは使えません。

Name属性を手掛かりに
(例1)
.document.getelementsbytagname("input").number03.value = Range("A1").value
(例2)
.all.tags("input").number01.value = Range("A1").value
(例3)
.document.all("number01").value = Range("A1").value
(例4)
.document.all.number01.value = Range("A1").value
等と書くことができます。
    • good
    • 0
この回答へのお礼

ありがとうございます!

下記にて希望の動作が出来ました!


Dim myWindow As Object
Dim myUrl As String

myUrl = "http://toi.kuronekoyamato.co.jp/cgi-bin/tneko?in …
For Each myWindow In CreateObject("Shell.Application").Windows
With myWindow
If .LocationURL = myUrl Then

.document.all.number01.Value = Range("A1").Value
.document.all.number02.Value = Range("A2").Value
.document.all.number03.Value = Range("A3").Value
.document.all.number04.Value = Range("A4").Value
.document.all.number05.Value = Range("A5").Value
Exit For
End If
End With
Next myWindow


今回はそのHPのソースを見て判断すると言う事を学習させてもらいました。
色々な書き方があるようですが、何がどう違うのか勉強不足でわかりませんが、色々といじりながらまた勉強させて頂きます。

普通は投げ出すところを救っていただき本当にありがとうございます!

お礼日時:2012/10/16 22:03

こんにちわ



似ているようなサイトだからといって、まったく同じではありません。

そのときは、ツールバーから 表示 ソースを押してコードをみます。

'<input name="text1" id="text1" size="50" onkeyup="showLength(value,id);" type="text">

'<input name="number01" size="20" maxlength="14">

text1をnumber01に変えます。
    • good
    • 0
この回答へのお礼

大変ありがとうございます。
ページのソースを見て input name を探すのですね!
そしてそれに準じて書き換えていくのですね。
目からウロコです。
ありがとうございます!

お礼日時:2012/10/16 21:58

#1です。



With myWindow '←For Each の次の行に、これが抜けていませんか?
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2012/10/16 21:57

こんにちは。



>同じ仕組みだと思うのですが何がいけないんでしょうか?
はっきり分かりませんが、ただ、私もしますが、手抜きのコードだと思います。

それはどこかというと、
>CreateObject("Shell.Application").Windows
この部分です。環境の差にもよるのだと思いますが、ここで、オブジェクトが生成されないのだと思います。そういうエラーが出たら、以下のようにしてみたらいかがですか?

例:

Dim myShell As Object
Dim myWindow As Object
Dim myUrl As String
myUrl = "http://toi.kuronekoyamato.co.jp/cgi-bin/tneko?in …
Set myShell = CreateObject("Shell.Application")
For Each myWindow In myShell.Windows()
    • good
    • 0
この回答へのお礼

ありがとうございます!こうで宜しいでしょうか?

今度は「コンパイルエラー:参照が不正または不完全です。」と出ます。

Dim myWindow As Object
Dim myUrl As String

myUrl = "http://toi.kuronekoyamato.co.jp/cgi-bin/tneko?in …

Set myShell = CreateObject("Shell.Application")
For Each myWindow In myShell.Windows()

If .LocationURL = myUrl Then
.document.getElementById("text1").Value = Range("A1").Value
.document.getElementById("text2").Value = Range("A2").Value
.document.getElementById("text3").Value = Range("A3").Value
.document.getElementById("text4").Value = Range("A4").Value
.document.getElementById("text5").Value = Range("A5").Value
Exit For
End If
End With
Next myWindow

お礼日時:2012/10/16 10:48

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