返回列表 上一主題 發帖

[發問] 代碼應該如何撰寫才能忽視 因查詢不到而產生的網頁訊息呢?

[發問] 代碼應該如何撰寫才能忽視 因查詢不到而產生的網頁訊息呢?

各位前輩大家好,

目前遇到的問題是:『有什麼方法可以忽視網頁訊息?例如:在網頁http://www.tdcc.com.tw/smWeb/QryStock.jsp,資料日期為20150529 證券代號為6456,會出現查無訊息的視窗』
如下圖:
未命名_副本.jpg

我有試過 Application.DisplayAlerts = False ,不過這只對excel本身產生問題可以忽略,對網頁產生的問題就行不通了。
請各位前輩們出手相救,感謝!
  1. my_url = "http://www.tdcc.com.tw/smWeb/QryStock.jsp"
複製代碼

回復 1# justintoolbox
  1. .Document.getElementsByName("sub")(0).Click                    '按下查詢鍵
  2.         Do While .Busy Or .ReadyState <> 4                             '等候網頁下載完畢
  3.             DoEvents
  4.             Application.SendKeys "~", True                '按 ENTER 按鍵 ,預防 "證券代號"有錯誤
  5.          Loop
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  justintoolbox
GBKEE 發表於 2015-7-17 07:46


真的太棒了!!!
非常感謝GBKEE出手相救!
讓我學到該如何克服這方面的問題,感謝!

TOP

回復 2# GBKEE

有改了!但按下去時,vba處會一直出現圈圈,有問題,請G大幫忙
  1. Declare Sub Sleep Lib "kernel32" (ByVal dwMS As Long)
  2. Sub ex()

  3. Set iea = CreateObject("internetexplorer.application")
  4.         With iea
  5.             .Visible = True
  6.             .Navigate "http://www.tdcc.com.tw/smWeb/QryStock.jsp"
  7.             Do Until .ReadyState = 4
  8.                 DoEvents
  9.             Loop
  10.             
  11.              Set x = iea.document.all.tags("option") '查下拉選單
  12.                  x(6).Selected = True '選取該子項目
  13.                        
  14.               iea.document.getElementsByName("StockNo")(0).Value = "6456"
  15.              iea.document.getElementsByName("sub")(0).Click                    '按下查詢鍵
  16.             
  17.              Sleep 2000
  18.             
  19.                 Do While .Busy Or .ReadyState <> 4                             '等候網頁下載完畢
  20.                     DoEvents
  21.                     Application.SendKeys "~", True                '按 ENTER 按鍵 ,預防 "證券代號"有錯誤
  22.                     Sleep 1000
  23.                  Loop
  24.            .Quit
  25.     End With
  26.    

  27. End Sub
複製代碼

TOP

回復 4# joey0415
ie8 執行沒這問題.
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 5# GBKEE

我是win7  ie11 就無法抓到

失焦抓不到

TOP

我剛剛ie10測試,也沒有問題,alert訊息框會跳到最上層,所以沒問題
如果執行時有亂點,好像就沒辦法了。

TOP

回復  joey0415
ie8 執行沒這問題.
GBKEE 發表於 2015-7-18 05:13


請問版大如果是用我自己寫的範例網頁,我自己是抓不到的,能指點一下嗎?
https://dl.dropboxusercontent.com/u/40393708/test1.htm



TOP

  1. Option Explicit

  2. #If Win64 = 1 Then
  3. Private Declare PtrSafe Function GetWindow Lib "user32" (ByVal HWND As Long, ByVal wCmd As Long) As Long
  4. Private Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long
  5. #Else
  6. Private Declare Function GetWindow Lib "user32" (ByVal HWND As Long, ByVal wCmd As Long) As Long
  7. Private Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long
  8. #End If

  9. Private Const GW_HWNDNEXT = 2
  10. Private Const GW_CHILD = 5

  11. Sub ex()
  12.     Dim lHwndChild&
  13.    
  14.     With CreateObject("InternetExplorer.Application")
  15.         .Visible = True
  16.         .Navigate "https://dl.dropboxusercontent.com/u/40393708/test1.htm"
  17.         Do While .Busy Or .ReadyState <> 4
  18.             DoEvents
  19.             If 3 = .ReadyState Then
  20.                 lHwndChild = GetWindow(.HWND, GW_CHILD)
  21.                 Do While lHwndChild
  22.                     SetForegroundWindow .HWND 'HWND is the HWND of the myIEWindow
  23.                     Application.SendKeys "~", True
  24.                     lHwndChild = GetWindow(lHwndChild, GW_HWNDNEXT)
  25.                 Loop
  26.             End If
  27.         Loop
  28.     End With
  29.    
  30. End Sub
複製代碼
回復 8# joey0415

TOP

回復 9# azrael19

超級感謝真的可以動了!抓到我要的資料

從你引用的函式來看好像是找到視窗並確認是哪個窗後,送出enter並關閉它

請問一下
Private Const GW_HWNDNEXT = 2
Private Const GW_CHILD = 5
是什麼設定值呢?

謝謝

後來我修改了,送出後要sleep一下,效果會比較好

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題