Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8187 / 13646 ツリー ←次へ | 前へ→

【34717】IEに入力するには 初心者 06/2/10(金) 14:54 質問[未読]
【34720】Re:IEに入力するには Kein 06/2/10(金) 15:35 回答[未読]
【34724】Re:IEに入力するには 初心者 06/2/10(金) 15:59 質問[未読]
【34728】Re:IEに入力するには Kein 06/2/10(金) 16:26 発言[未読]
【34730】Re:IEに入力するには 初心者 06/2/10(金) 16:48 質問[未読]
【34739】Re:IEに入力するには Kein 06/2/10(金) 20:56 発言[未読]
【34738】Re:IEに入力するには 初心者 06/2/10(金) 20:55 発言[未読]
【34740】Re:IEに入力するには 初心者 06/2/10(金) 21:02 質問[未読]
【34741】Re:IEに入力するには 初心者 06/2/10(金) 21:22 お礼[未読]
【34742】Re:IEに入力するには Kein 06/2/10(金) 21:28 回答[未読]
【34746】Re:IEに入力するには 初心者 06/2/10(金) 22:02 お礼[未読]

【34717】IEに入力するには
質問  初心者  - 06/2/10(金) 14:54 -

引用なし
パスワード
   エクセルVBAからIEを起動する方法は過去ログを検索して27141のichinoseさんのレスで分かったのですが。

IEで開いたページに入力欄があり、その入力欄に文字を入力するようにしたいです。
例えば、http://www.vbalab.net/ に「Microsoft Office の使い方に困ったら・」と入力欄があります。
ここに文字を入力するには、エクセルVBAでどのように書けばいいでしょうか?

【34720】Re:IEに入力するには
回答  Kein  - 06/2/10(金) 15:35 -

引用なし
パスワード
   こんな感じです。

Sub MyIE()
  Dim MySt As String
  Const URL As String = "http://www.vbalab.net/"
 
  MySt = InputBox("検索する語句を入力して下さい")
  If MySt = "" Then Exit Sub
  With CreateObject("InternetExplorer.Application")
   .Visible = True
   .Navigate URL
   Do While .Busy: DoEvents: Loop
   Do Until .ReadyState = 4: DoEvents: Loop
   With .Document
     .All("txtSearch").Value = MySt
     .Forms(0).submit
   End With
  End With
End Sub

"txtSearch" という名前は、目的のサイトを表示してからIEの「表示」「ソース」
を選択し、Body部からINPUTタグ(type=text)を探して、その名前(nameの値)を
使います。

【34724】Re:IEに入力するには
質問  初心者  - 06/2/10(金) 15:59 -

引用なし
パスワード
   Keinさんありがとうございます。
私のような初心者に、いつもここの掲示板ですごい回答をされているKeinさんが答えてくれるなんて。感激です。

IEで入力欄に書き込みだけできれば、って思っていたんですが、ボタンを押すところまで教えていただきありがとうございました。

それにしても、ソースって初めて見ましたがわけが分かりません・・・

【34728】Re:IEに入力するには
発言  Kein  - 06/2/10(金) 16:26 -

引用なし
パスワード
   >ソースって初めて見ましたがわけが分かりません・
それはたぶん、あなたも聞いたことがあると思うのですが、HTMLという言語で
書かれているのです。(例題のサイトにはJavaScriptのコードも含まれている)
なのでHTMLのタグを勉強しないと、理解することが出来ないでしょう。
HTMLの解説をしているサイトは数多くありますが、よく知られたところでは
http://www.tohoho-web.com/www.htm
などがあります。やる気があったら勉強してみて下さい。もし自分のサイトを作ろう
と考えているなら、とても役に立ちますよ。(というか必須ですね)

【34730】Re:IEに入力するには
質問  初心者  - 06/2/10(金) 16:48 -

引用なし
パスワード
   ▼Kein さん:
>こんな感じです。
>
>Sub MyIE()
>  Dim MySt As String
>  Const URL As String = "http://www.vbalab.net/"
> 
>  MySt = InputBox("検索する語句を入力して下さい")
>  If MySt = "" Then Exit Sub
>  With CreateObject("InternetExplorer.Application")
>   .Visible = True
>   .Navigate URL
>   Do While .Busy: DoEvents: Loop
>   Do Until .ReadyState = 4: DoEvents: Loop
>   With .Document
>     .All("txtSearch").Value = MySt
>     .Forms(0).submit
>   End With
>  End With
>End Sub
>
>"txtSearch" という名前は、目的のサイトを表示してからIEの「表示」「ソース」
>を選択し、Body部からINPUTタグ(type=text)を探して、その名前(nameの値)を
>使います。

とりあえず質問したことが解決されたと思って、内容を確認してませんでした。
分からないところがあるので教えてください。

DoEvents
ヘルプで調べたのですが、いまいち理解できません。
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」とあります。
これは、どういう意味ですか?
ヘルプすら理解できないって恥ずかしいんですが教えてください。

Do While .Busy: DoEvents: Loop
ここは指定したURLを開こうとして、完全に開き終わってない間は待ちなさい。って意味かと勝手に考えました。

Do Until .ReadyState = 4: DoEvents: Loop
ここの意味がさっぱり分かりません。

【34738】Re:IEに入力するには
発言  初心者  - 06/2/10(金) 20:55 -

引用なし
パスワード
   >Sub MyIE()
>  Dim MySt As String
>  Const URL As String = "http://www.vbalab.net/"
> 
>  MySt = InputBox("検索する語句を入力して下さい")
>  If MySt = "" Then Exit Sub
>  With CreateObject("InternetExplorer.Application")
>   .Visible = True
>   .Navigate URL
>   Do While .Busy: DoEvents: Loop
>   Do Until .ReadyState = 4: DoEvents: Loop
>   With .Document
>     .All("txtSearch").Value = MySt
>     .Forms(0).submit
>   End With
>  End With
>End Sub

上記プログラムで、.Forms(0).submit の部分ですが、これは「officeテクニック検索」というボタンを押したときに発生する処理を実行するということですよね?

例えば、ボタンを押すではなく、リンクを押すという場合はどのように書けばいいでしょうか?
VBA質問箱のトップページの下のほうに、「テクノファイブ株式会社」というリンクがあります。これを押すという処理はどのように書けばいいでしょうか?
.Navigate "http://www.xxxx.xxx"
という書き方ではなく、リンクを押すという書き方はできるでしょうか?

【34739】Re:IEに入力するには
発言  Kein  - 06/2/10(金) 20:56 -

引用なし
パスワード
   DoEvents の働きを、正確かつ細かく説明することは私には出来ませんが、概ね
「コンピューターのCPUは、現在実行中のアプリケーション(複数ある場合はそれぞれに
時間的シェアを割り振って分散処理し、あたかも全てのアプリが切れ目なく並行して
動作しているように見せかける)の処理を優先するために、OSレベルでの処理を一時的に
休止する。しかしVBAプログラムなどの命令によってOSレベルの処理が必要になるとき、
適当なタイミングでOSの仕事へ制御を移す処理をさせるため、DoEvents を挟んでやる」
ということのようです。
それから IE のプロパティについては
http://www.d6.dion.ne.jp/~ikenji_o/works/sad/reference/webbrowser/objects/WebBrowser.htm
を参考にすればいいのですが、Busy はともかく ReadyState などは英文の直訳では
何を言ってるのか分かりませんね・・。それでWebを検索したら、以下の解説サイトが
見つかりました。↓を参考にして下さい。
http://tomizawa-web.hp.infoseek.co.jp/property/readyState.htm

【34740】Re:IEに入力するには
質問  初心者  - 06/2/10(金) 21:02 -

引用なし
パスワード
   ▼初心者 さん:
>>Sub MyIE()
>>  Dim MySt As String
>>  Const URL As String = "http://www.vbalab.net/"
>> 
>>  MySt = InputBox("検索する語句を入力して下さい")
>>  If MySt = "" Then Exit Sub
>>  With CreateObject("InternetExplorer.Application")
>>   .Visible = True
>>   .Navigate URL
>>   Do While .Busy: DoEvents: Loop
>>   Do Until .ReadyState = 4: DoEvents: Loop
>>   With .Document
>>     .All("txtSearch").Value = MySt
>>     .Forms(0).submit
>>   End With
>>  End With
>>End Sub
>
>上記プログラムで、.Forms(0).submit の部分ですが、これは「officeテクニック検索」というボタンを押したときに発生する処理を実行するということですよね?
>
>例えば、ボタンを押すではなく、リンクを押すという場合はどのように書けばいいでしょうか?
>VBA質問箱のトップページの下のほうに、「テクノファイブ株式会社」というリンクがあります。これを押すという処理はどのように書けばいいでしょうか?
>.Navigate "http://www.xxxx.xxx"
>という書き方ではなく、リンクを押すという書き方はできるでしょうか?

なんかヘンな質問になってますが、「リンクを押す」→「リンクをクリックする」です。

【34741】Re:IEに入力するには
お礼  初心者  - 06/2/10(金) 21:22 -

引用なし
パスワード
   ▼初心者 さん:
>▼初心者 さん:
>>>Sub MyIE()
>>>  Dim MySt As String
>>>  Const URL As String = "http://www.vbalab.net/"
>>> 
>>>  MySt = InputBox("検索する語句を入力して下さい")
>>>  If MySt = "" Then Exit Sub
>>>  With CreateObject("InternetExplorer.Application")
>>>   .Visible = True
>>>   .Navigate URL
>>>   Do While .Busy: DoEvents: Loop
>>>   Do Until .ReadyState = 4: DoEvents: Loop
>>>   With .Document
>>>     .All("txtSearch").Value = MySt
>>>     .Forms(0).submit
>>>   End With
>>>  End With
>>>End Sub
>>
>>上記プログラムで、.Forms(0).submit の部分ですが、これは「officeテクニック検索」というボタンを押したときに発生する処理を実行するということですよね?
>>
>>例えば、ボタンを押すではなく、リンクを押すという場合はどのように書けばいいでしょうか?
>>VBA質問箱のトップページの下のほうに、「テクノファイブ株式会社」というリンクがあります。これを押すという処理はどのように書けばいいでしょうか?
>>.Navigate "http://www.xxxx.xxx"
>>という書き方ではなく、リンクを押すという書き方はできるでしょうか?
>
>なんかヘンな質問になってますが、「リンクを押す」→「リンクをクリックする」です。

SendKeys "{TAB}"

SendKeys "{ENTER}"
で解決しました。
お騒がせして申し訳ありませんでした。

【34742】Re:IEに入力するには
回答  Kein  - 06/2/10(金) 21:28 -

引用なし
パスワード
   Linkをクリックするコードはありますが IE.Document から「テクノファイブ株式会社」
のリンクを特定する手段がないのです。無理にやろうとすると、Document.InnerHTML
を取得して、その文字列からInStr関数などで「テクノ」を検索、さらにそこから
InStrRev関数で "http" と " を探してMid関数でURL部分を切り出す・・というような
面倒な処理が必要になりますし、結果としてURLが分かれば Navigate するのが一番
簡単だから、リンクのクリックというコードにはならないのです。
ま、いちおう今後、何かの参考になるかも知れないので、リンクのクリックをする
コードのサンプルを提示しておきます。

Sub MyIE_Link()
  Dim i As Integer
  Const URL As String = "http://www.vbalab.net/"
 
  With CreateObject("InternetExplorer.Application")
   .Visible = True
   .Navigate URL
   Do While .Busy: DoEvents: Loop
   Do Until .ReadyState = 4: DoEvents: Loop
   With .Document
     For i = 0 To .links.Length - 1
       If .links(i).href = "http://www.techno5.net/" Then
        .links(i).Click: Exit For
       End If
     Next i
   End With
  End With
End Sub

【34746】Re:IEに入力するには
お礼  初心者  - 06/2/10(金) 22:02 -

引用なし
パスワード
   ▼Kein さん:
>Linkをクリックするコードはありますが IE.Document から「テクノファイブ株式会社」
>のリンクを特定する手段がないのです。無理にやろうとすると、Document.InnerHTML
>を取得して、その文字列からInStr関数などで「テクノ」を検索、さらにそこから
>InStrRev関数で "http" と " を探してMid関数でURL部分を切り出す・・というような
>面倒な処理が必要になりますし、結果としてURLが分かれば Navigate するのが一番
>簡単だから、リンクのクリックというコードにはならないのです。
>ま、いちおう今後、何かの参考になるかも知れないので、リンクのクリックをする
>コードのサンプルを提示しておきます。
>
>Sub MyIE_Link()
>  Dim i As Integer
>  Const URL As String = "http://www.vbalab.net/"
> 
>  With CreateObject("InternetExplorer.Application")
>   .Visible = True
>   .Navigate URL
>   Do While .Busy: DoEvents: Loop
>   Do Until .ReadyState = 4: DoEvents: Loop
>   With .Document
>     For i = 0 To .links.Length - 1
>       If .links(i).href = "http://www.techno5.net/" Then
>        .links(i).Click: Exit For
>       End If
>     Next i
>   End With
>  End With
>End Sub

Keinさんありがとうございました。
何番目のリンクかは固定ですので、For〜Nextで繰り返し判定するのではなく、固定番号のリンクをクリックすることができました。
ありがとうございました。

8187 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free