Excel VBA質問箱 IV

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

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


1868 / 13645 ツリー ←次へ | 前へ→

【71346】情報の更新について 困惑 12/2/24(金) 12:21 質問[未読]
【71347】Re:情報の更新について hint 12/2/24(金) 13:26 発言[未読]
【71349】Re:情報の更新について 困惑 12/2/24(金) 13:35 質問[未読]
【71350】Re:情報の更新について hint 12/2/24(金) 14:02 発言[未読]
【71351】Re:情報の更新について 困惑 12/2/24(金) 14:07 質問[未読]
【71352】Re:情報の更新について 困惑 12/2/24(金) 14:09 質問[未読]
【71359】Re:情報の更新について ちん 12/2/24(金) 23:29 発言[未読]
【71373】Re:情報の更新について 困惑 12/2/25(土) 20:55 お礼[未読]
【71379】Re:情報の更新について 774 12/2/27(月) 10:04 発言[未読]

【71346】情報の更新について
質問  困惑  - 12/2/24(金) 12:21 -

引用なし
パスワード
   よろしくお願いします。

サイトより情報を取得する際

同じ画面(サイト)が5秒以上表示された時
IEの「最新の情報に更新」ボタンを押す。

ということをしたいと思っています。

その際、どうコードを入力したらいいのか、
さっぱりわからなく困っています。

マクロの記録でのIEの動作は記録できない?
ので、困っています。

ご指導よろしくお願いします。

【71347】Re:情報の更新について
発言  hint  - 12/2/24(金) 13:26 -

引用なし
パスワード
   不明なのはどこですか?
IEの「最新の情報に更新」ボタンを押す、という部分ですか?
私には、
「同じ画面(サイト)が5秒以上表示された時」
の意味がわかりません。5秒ごとに自動更新していきたいということ?
あなたがやっていることをもっと説明しないと他人にはわかりませんよ。
現在どこまでできているかを示してみてはどうでしょう。

関係サイトを載せておきます。
tp://ie.vba-ken3.jp/Methods/
より広い事項については
tp://www.ken3.org/cgi-bin/group/vba_ie.asp

【71349】Re:情報の更新について
質問  困惑  - 12/2/24(金) 13:35 -

引用なし
パスワード
   ▼hint さん:ありがとうございます。


不明な点は、
1.IEの「最新の情報に更新」ボタンを押す、というコード
2.パソコンの動作が悪くて、更新すると動くので、そのコードを
 書きたい。

の2点がわからない状態です。

【71350】Re:情報の更新について
発言  hint  - 12/2/24(金) 14:02 -

引用なし
パスワード
   大事な前提を確認するのを忘れました。
> サイトより情報を取得する際
どのようにして取得しているのですか?
Webクエリーなのか、手作業なのか、
またはIEをVBAから操作して取得しているのですか?
それを明記してください。

【71351】Re:情報の更新について
質問  困惑  - 12/2/24(金) 14:07 -

引用なし
パスワード
   ▼hint さん:
IEをVBAから操作して取得しています。

現在開いているサイトの画面が5秒以上表示されたら、
更新する。としたいので

更新の部分のコードだけ書くと・・・

If Now + TimeValue("0:00:05") Then
  Set IE = GetObject, "InternetExplorer.Application")
  IE.Refresh
  Set IE = Nothing
End If

こうしてみたのですが、エラーになります。。。

【71352】Re:情報の更新について
質問  困惑  - 12/2/24(金) 14:09 -

引用なし
パスワード
   ▼hint さん:

なお、IEを開く。というコードまでは完了していて
 IEが開いてから、5秒以上たったら、更新
という部分で、つまずいています。

【71359】Re:情報の更新について
発言  ちん  - 12/2/24(金) 23:29 -

引用なし
パスワード
   ▼困惑 さん、こんばんわ、ちんといいます。
5秒は時間的に短いとおもいますが。(WEBの表示などに時間がかかると5秒では短い)
あくまでもサンプルとして、SENDKEYを使用します。
タイトルもしくはアドレスが変更されていない時、「最新情報に更新する」です。
※Excelを終了しないと永遠に実行しますので、注意ください。
ただし、CPU負荷はそれほどでもないです。
Application.OnTime で設定した時間後とに起動します。

Option Explicit
Public IE   As Object
Public strURL As String
Public lngRet As Long
Public Ie_locationName As Variant
Public Ie_locationURL As Variant
Private Declare Function SetForegroundWindow Lib "user32.dll" ( _
  ByVal hWnd As Long _
) As Long


Sub Sample()
 
  Const READYSTATE_COMPLETE = &H4
 
  strURL = "ht tp://www.yahoo.co.jp"
  
  Set IE = CreateObject("InternetExplorer.application")
  IE.Visible = True
  IE.navigate strURL
  Do
    DoEvents
  Loop Until Not IE.Busy And IE.readyState = READYSTATE_COMPLETE
 
  ' IE のウインドウをアクティブにする
  lngRet = SetForegroundWindow(IE.hWnd)
  If lngRet <> 0 Then
   Ie_locationName = IE.locationname  '*** 現在のタイトルを取得
   Ie_locationURL = IE.locationURL   '*** 現在のURLを取得
  
  End If
  
  Application.OnTime Now + TimeValue("00:00:05"), "AlarmMessage"

End Sub


Sub AlarmMessage()
  If Ie_locationName = IE.locationname And Ie_locationURL = IE.locationURL Then
  '*** 情報が変わってない
   ' IE のウインドウをアクティブにする
   lngRet = SetForegroundWindow(IE.hWnd)
   If lngRet <> 0 Then
     ' アクティブにできたらキー送信して結果をコピー
    SendKeys "^r", True   '*** 最新情報に更新
    Ie_locationName = IE.locationname
    Ie_locationURL = IE.locationURL
   End If
  
  Else
   ' IE のウインドウをアクティブにする
   lngRet = SetForegroundWindow(IE.hWnd)
   If lngRet <> 0 Then
    Ie_locationName = IE.locationname
    Ie_locationURL = IE.locationURL

   End If

  End If
  
  Application.OnTime Now + TimeValue("00:00:05"), "AlarmMessage"

End Sub

以上、参考までに・・・

【71373】Re:情報の更新について
お礼  困惑  - 12/2/25(土) 20:55 -

引用なし
パスワード
   ▼ちん さん:
 ありがとうございます。
 考え方をいただき、べんきょうになりました。
 コードを参考に、勉強したいと思います。

【71379】Re:情報の更新について
発言  774  - 12/2/27(月) 10:04 -

引用なし
パスワード
   いや、そんな、API使わんでもよろしいのではないかと・・・。

Option Explicit

Private IE As Object
Private Const OLECMDID_REFRESH = &H16
Private Const OLECMDEXECOPT_DODEFAULT = &H0
Private Const READYSTATE_COMPLETE = &H4

Public Sub Sample()
  Set IE = CreateObject("InternetExplorer.Application")
  IE.Visible = True
  IE.Navigate "h t t p://www.ugtop.com/spill.shtml"
  Do
    DoEvents
  Loop Until Not IE.Busy And IE.ReadyState = READYSTATE_COMPLETE
  Application.OnTime Now + TimeValue("00:00:05"), "RefreshIE"
End Sub

Public Sub RefreshIE()
  Debug.Print "更新します。"
  IE.ExecWB OLECMDID_REFRESH, OLECMDEXECOPT_DODEFAULT
  Application.OnTime Now + TimeValue("00:00:05"), "RefreshIE"
End Sub

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