Excel VBA質問箱 IV

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

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


8469 / 13644 ツリー ←次へ | 前へ→

【32258】webクエリ ゼロイオン 05/12/11(日) 22:06 質問[未読]
【32262】Re:webクエリ かみちゃん 05/12/11(日) 22:38 回答[未読]
【32263】Re:webクエリ かみちゃん 05/12/11(日) 22:45 発言[未読]
【32264】Re:webクエリ ゼロイオン 05/12/11(日) 22:52 お礼[未読]
【32265】Re:webクエリ Kein 05/12/11(日) 23:05 発言[未読]
【32918】こまったことになります。 ゼロイオン 05/12/27(火) 5:10 発言[未読]
【32919】Re:こまったことになります。 かみちゃん 05/12/27(火) 5:16 発言[未読]
【32920】Re:こまったことになります。 ゼロイオン 05/12/27(火) 6:37 発言[未読]
【32921】Re:こまったことになります。 ゼロイオン 05/12/27(火) 6:50 質問[未読]
【32923】Re:こまったことになります。 かみちゃん 05/12/27(火) 7:03 発言[未読]
【32931】Re:こまったことになります。 Kein 05/12/27(火) 12:03 回答[未読]
【32957】Re:こまったことになります。 ゼロイオン 05/12/28(水) 3:52 発言[未読]
【32958】Re:こまったことになります。 ゼロイオン 05/12/28(水) 5:12 お礼[未読]
【33080】Re:こまったことになります。 ゼロイオン 06/1/2(月) 4:55 質問[未読]
【33081】Re:こまったことになります。 ゼロイオン 06/1/2(月) 5:18 質問[未読]
【33093】Re:こまったことになります。 Kein 06/1/2(月) 15:31 発言[未読]
【33094】Re:こまったことになります。 ゼロイオン 06/1/2(月) 17:00 質問[未読]
【33097】Re:こまったことになります。 Kein 06/1/2(月) 19:29 発言[未読]
【33106】Re:こまったことになります。 ゼロイオン 06/1/3(火) 1:21 発言[未読]
【33108】Re:こまったことになります。 やっちん 06/1/3(火) 1:52 発言[未読]
【32922】Re:こまったことになります。 かみちゃん 05/12/27(火) 7:02 発言[未読]
【32924】Re:こまったことになります。 ゼロイオン 05/12/27(火) 7:27 質問[未読]
【32925】Re:こまったことになります。 かみちゃん 05/12/27(火) 7:30 発言[未読]
【32955】Re:こまったことになります。 ゼロイオン 05/12/28(水) 0:08 質問[未読]

【32258】webクエリ
質問  ゼロイオン  - 05/12/11(日) 22:06 -

引用なし
パスワード
   webクエリで情報を取り込みたいのですが、
ログインIDとパスワードを入力するサイトにアクセスして
自動的に取り込むことはできるものでしょうか?
やり方をお教えください。

【32262】Re:webクエリ
回答  かみちゃん E-MAIL  - 05/12/11(日) 22:38 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Webクエリで情報を取り込みたいのですが、
>ログインIDとパスワードを入力するサイトにアクセスして
>自動的に取り込むことはできるものでしょうか?

私も、Webクエリをよく使っていますが、
ログイン認証がある場合は、ログインID等を入力する必要があるので、
Webクエリは使えないと思います。
その変わりに、私は、以下のような方法で情報を取得しています。
以下の例は、Yahoo!JAPANにログインして、ログイン直後のデータを表示する仕組みです。

Sub Macro1()
 '参考URL
 'http://www.ken3.org/vba/backno/vba097.html
 
 Dim objIE As Object 'IEオブジェクト参照用
 Dim strURL As String, strLogin As String, strPassword As String

 'インターネットエクスプローラーのオブジェクトを作る
 Set objIE = CreateObject("InternetExplorer.application")
  
 With objIE
  .Visible = True '見えるようにする(お約束)
  
  'ログイン情報を設定する。
  strURL = "http://login.yahoo.co.jp/config/login?"
  strLogin = "userID" 'ユーザ名
  strPassword = "PassWord" 'パスワード
  
  '文字列で指定したURLに飛ぶ
  objIE.Navigate strURL

  '表示終了まで待つ
  Do While objIE.Busy = True
  '何もしないループ(笑)
   DoEvents
  Loop
  '項目名を指定して、データをセットする
  With .Document
   .all.login.Value = strLogin 'ユーザー名をセットする。
   .all.passwd.Value = strPassword  'パスワードをセットする。
   .Forms(0).Submit 'ログインボタンをクリックする。
   
   '表示終了まで待つ
   Do While objIE.Busy = True
   '何もしないループ(笑)
    DoEvents
   Loop
   'ログイン直後のページの情報を取得
   Range("A1").Value = .body.innerText
  
  End With
 End With
 Set objIE = Nothing
End Sub

なお、以下のURLも参考になると思います。
http://www.ken3.org/cgi-bin/group/vba_ie.asp

【32263】Re:webクエリ
発言  かみちゃん E-MAIL  - 05/12/11(日) 22:45 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Webクエリで情報を取り込みたいのですが、
>ログインIDとパスワードを入力するサイトにアクセスして
>自動的に取り込むことはできるものでしょうか?

または、過去ログ[#30454]あたりも参考になるかと思います。
[#30454]は、WebBrowserコントロールを使う方法です。

【32264】Re:webクエリ
お礼  ゼロイオン  - 05/12/11(日) 22:52 -

引用なし
パスワード
   かみちゃんさんありがとうございます。
参考にさせていただきます。
ありがとうございました♪

【32265】Re:webクエリ
発言  Kein  - 05/12/11(日) 23:05 -

引用なし
パスワード
   かみちゃんさんが書いて下さったコードを応用すれば、殆ど出来るはずだと
思いますが、どこのサイトで入力するパスワードか分からないので、パスワード
を入力するボックスの指定方法について、少し解説しておきます。
まず当該サイトを IE で開いたとき、メニューバーの「表示」「ソース」を選択
します。するとメモ帖などにHTMLコードが表示されます。その中からFormタグを
探すわけですが、例えばかみちゃんさんのコードで使った Yahooのサイト なら

<input name="passwd" type=password size=23 id=txbx maxlength="32">

というタグが見つかります。input で始まるタグがテキストボックスですから、
それを探してみて、nameプロパティの値を覚えておいて

IE.Document.All("passwd").Value = パスワードの文字列

というようにコードを作れば良いのです。
この All というのは便利なプロパティです。HTMLコードで使ういろいろな
オブジェクトに対して使えますから、これ一本で様々なことが出来ますが、
今回は Valueプロパティ の設定に関する質問なので、具体的な例は割愛します。

【32918】こまったことになります。
発言  ゼロイオン  - 05/12/27(火) 5:10 -

引用なし
パスワード
   上の教えてもらったコードですが
innerTextのところで変数にダウンロードしたテキストを
入れますよね。
ヤフーや他のサイトなどの認証サイトで
が上記のようにできるのですが、
私がやっているサイトでは同じようにコーディングして
変数にinnerTextが代入できません。
これはコーディングが悪いのではなくてサイト側で
ダウンロードできないように制限しているのでしょうか?
何が原因なんでしょうか?
どなたかご存知の方おしえてください。

【32919】Re:こまったことになります。
発言  かみちゃん E-MAIL  - 05/12/27(火) 5:16 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ヤフーや他のサイトなどの認証サイトで
>が上記のようにできるのですが、
>私がやっているサイトでは同じようにコーディングして
>変数にinnerTextが代入できません。
>これはコーディングが悪いのではなくてサイト側で
>ダウンロードできないように制限しているのでしょうか?

そのサイトのURLまたは、HTMLソースを提示していただかないとレスは難しいと思います。
私自身は、Webクエリては取得できないけど、innerTEXTだと取得できるといったことは経験があるのですが・・・
innerTEXTでも取得できないというのは、経験したことがありません。

【32920】Re:こまったことになります。
発言  ゼロイオン  - 05/12/27(火) 6:37 -

引用なし
パスワード
   楽天なのですが、
IEでダウンロードできているから
できないわけないんですが、
ログインしてすぐのページが見えません。
https://www.rakuten-sec.co.jp/ITS/V_ACT_Login.html

【32921】Re:こまったことになります。
質問  ゼロイオン  - 05/12/27(火) 6:50 -

引用なし
パスワード
   ついでといってはなんですが、
このサイトはいるとクリックするところがタグになっている
たりするんですが、
これをクリックしたいので、clickメソッドやsubmitで
押そうとしているのですが、実行時エラー91がでます。
これもどうにかならないものですかね?

【32922】Re:こまったことになります。
発言  かみちゃん E-MAIL  - 05/12/27(火) 7:02 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>楽天証券なのですが、
>IEでダウンロードできているから
>できないわけないんですが、
>ログインしてすぐのページが見えません。

先日、知人からまったく同じ質問を受けました。
私は、楽天証券のIDを持っていないので、ログイン直後のページの情報が取得
できるかどうか検証ができません。
ログイン画面であれば、以下のような感じになるのですが・・・

Sub Macro1()
 Dim objIE As Object
 
 Set objIE = CreateObject("InternetExplorer.application")
 With objIE
  .Visible = True
  .Navigate "https://www.rakuten-sec.co.jp/ITS/V_ACT_Login.html"
  Do While .Busy = True
   DoEvents
  Loop
  Range("A1").Value = .Document.body.innerText
  .Quit
 End With
 Set objIE = Nothing
End Sub

【32923】Re:こまったことになります。
発言  かみちゃん E-MAIL  - 05/12/27(火) 7:03 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>このサイトはいるとクリックするところがタグになっている
>たりするんですが、
>これをクリックしたいので、clickメソッドやsubmitで
>押そうとしているのですが、実行時エラー91がでます。

以下のような感じでできませんか?
これも、検証していないのですが・・・

'注文ボタンをクリックする。
For Each objITEM In objIE.Document.all '.allからオブジェクトを探す
 If objITEM.alt = "注文" Then
  objITEM.Click
  Exit For
 End If
Next

【32924】Re:こまったことになります。
質問  ゼロイオン  - 05/12/27(火) 7:27 -

引用なし
パスワード
   両方、試してみましたが、
クリックする奴はそのまま貼り付けてやってみましたが
エラーがでました。

楽天の最初の画面は僕もためしてみていままでの
やり方でもダウンロードできました。
その後なんですよね。肝心なのは。
IDなどがないかみちゃんさんには検証のしようがないから
きついかもしれませんが。
なにか他に方法があったらよろしくお願いします。

【32925】Re:こまったことになります。
発言  かみちゃん  - 05/12/27(火) 7:30 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>IDなどがないかみちゃんさんには検証のしようがないから
>きついかもしれませんが。

すみません。いい加減なことを申しまして。
やはり、検証していない情報は提供すべきではなかったですね。
これ以上は、私にはわかりませんので、このあたりで失礼させていただきます。

【32931】Re:こまったことになります。
回答  Kein  - 05/12/27(火) 12:03 -

引用なし
パスワード
   偶然、私も楽天証券に口座を持っていたので、そのようなマクロを作ってみました。
例えばログイン画面から入ったところで「投資情報」というタブを開くコード
ですが、以下のようになります。

Sub RAKUTEN_LogIn()
  Dim IE As Object
  Const MyURL As String = _
  "https://www.rakuten-sec.co.jp/ITS/V_ACT_Login.html"

  Set IE = CreateObject("InternetExplorer.Application")
  With IE
   .Visible = True
   .Navigate MyURL
   Do While .Busy: Loop
   Do Until .ReadyState = 4: Loop
   With .Document
     .all.namedItem("loginid").Value = "xxxxxxxx"
     .all.namedItem("passwd").Value = "yyyyyyyy"
     .Forms(0).submit
   End With
  End With
  Application.Wait Time + TimeValue("00:00:01")
  SendKeys "{TAB 10}"
  Application.Wait Time + TimeValue("00:00:01")
  SendKeys "{ENTER}"
  Set IE = Nothing
End Sub

IE では TABキーによってフォーカスを与えるオブジェクトを順々に変更できます。
それを利用して SendKeys によってTABキーを押す回数を指定し、うまく目的の
タグにフォーカスを持って来て ENTER しようというわけです。その回数は、まず
手作業で自分専用の画面にログインして画面を注視し、TAB を回数を数えながら
押していき、目的のところへフォーカスが移るところまでをカウントすれば良い
でしょう。
ただし、SendKeys は安定した動作をするわけでなく、そうでなくても楽天証券側で
画面のレイアウトを変更したりすれば、たちまちヘンなところへ行ってしまうおそれが
あることを承知しておいて下さい。

【32955】Re:こまったことになります。
質問  ゼロイオン  - 05/12/28(水) 0:08 -

引用なし
パスワード
   .all.login.Value = strLogin
がうまく動作しないとき、
他に値をセットする書き方はありませんか?

【32957】Re:こまったことになります。
発言  ゼロイオン  - 05/12/28(水) 3:52 -

引用なし
パスワード
   ▼Kein さん:
わざわざありがとうございます♪
レスに埋もれて今の今まで気づきませんでした。
sendkeyで
値をテキストボックスに送ることはできないものなんでしょうか?
いまは、ログインするたびにころっころ変わるテキストボックスの属性に苦労しています。

【32958】Re:こまったことになります。
お礼  ゼロイオン  - 05/12/28(水) 5:12 -

引用なし
パスワード
   値は
sendkeyに値をつけるだけでできるんですね。
失礼しました。

【33080】Re:こまったことになります。
質問  ゼロイオン  - 06/1/2(月) 4:55 -

引用なし
パスワード
   keinさんに教えてもらったsendkeys役に立つのですが、
この方法だとたまに通信の状況によっては失敗して変なことに
なるみたいですね。
これを確実にするにはどうしたらいいか、ご存知でしょうか?

【33081】Re:こまったことになります。
質問  ゼロイオン  - 06/1/2(月) 5:18 -

引用なし
パスワード
   やはりsendkeyだとタブの位置が変化すると失敗してしまうようです。
なぜタブの位置が変わるのかなぞですが、、
もしかしたらタブの位置が変わって失敗するのではないのかも
しれません。
そこで、ソースを調べて直接操作するほうが確実なので
そっちでいこうと思ったのですが、
ソースを調べてボタンやテキストボックスの値をしらべても
毎回値が変化するようです。たとえばpf0やpf1などに変化しています。
よってソースをプログラムで毎回し調べ
dim ボタン as String
ボタン = "pf0"
objIE.Document.all.ボタン.Value としようとおもったんですが。
これだと値が代入できないみたいです。
毎回、ソースを調べて値を代入するにはどうしたらいいのでしょうか?

【33093】Re:こまったことになります。
発言  Kein  - 06/1/2(月) 15:31 -

引用なし
パスワード
   >ソースを調べて直接操作
ログインした後の画面では、ソースを調べてもボタン名などは出てこないはず
だと思うのですが、あなたが操作したい画面はどこですか ? 注文タブとか
投資情報タブとか「タブ」の名前で知らせて下さい。
(注:HTMLの "タグ" と間違えないで下さい。)

【33094】Re:こまったことになります。
質問  ゼロイオン  - 06/1/2(月) 17:00 -

引用なし
パスワード
   通常画面だとソースが多すぎてやりづらいので、PDAの画面で操作しています。
これだとどういう風にしたらよろしいのでしょか?

【33097】Re:こまったことになります。
発言  Kein  - 06/1/2(月) 19:29 -

引用なし
パスワード
   >あなたが操作したい画面はどこですか ?
と質問しているのに答えられないので、私はこのスレから退出します。

【33106】Re:こまったことになります。
発言  ゼロイオン  - 06/1/3(火) 1:21 -

引用なし
パスワード
   ▼Kein さん:
>>あなたが操作したい画面はどこですか ?
>と質問しているのに答えられないので、私はこのスレから退出します。

PDAの画面っていっているでしょ?
これでわからんか?

【33108】Re:こまったことになります。
発言  やっちん  - 06/1/3(火) 1:52 -

引用なし
パスワード
   ▼ゼロイオン さん:
>PDAの画面っていっているでしょ?
>これでわからんか?

【33093】をもう一度読み返してみては?

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