Board logo

標題: [發問] 執行階段錯誤 '438': 物件不支援此屬性或方法 [打印本頁]

作者: av8d    時間: 2014-8-18 13:30     標題: 執行階段錯誤 '438': 物件不支援此屬性或方法

本帖最後由 av8d 於 2014-8-18 13:54 編輯

[attach]18951[/attach]
  1. Private Sub CommandButton3_Click()
  2. '帳密驗證
  3.     With CreateObject("InternetExplorer.Application")
  4.         .Navigate "https://cas.tycg.gov.tw/casserver/login?service=http%3A%2F%2Fe.tycg.gov.tw%2Fapp%2Fportal%2Flogin"
  5.    
  6.         Do While .Busy Or .ReadyState <> 4
  7.             DoEvents
  8.         Loop
  9.         
  10.         '帳號欄位
  11.         .Document.all("username").innerText = "A"
  12.         '密碼欄位
  13.         .Document.all("password").innerText = "B"
  14.         .Document.all("usernamebutton").Click
  15.         .Visible = True
  16.         '.Navigate "http://odis.tycg.gov.tw/HOME/Home_Splitter.aspx"
  17.     End With
  18. End Sub
複製代碼
帳號成功自動丟上去,到了密碼就卡住了,懇請大大們幫忙,謝謝
我會繼續在網路上尋找解答!
作者: GBKEE    時間: 2014-8-18 14:48

回復 1# av8d
網頁在桃園縣政府民政局內部嗎?無法連上線,
你可查看這登入網頁的原始碼,可參考這裡
作者: av8d    時間: 2014-8-18 15:08

回復 2# GBKEE

[attach]18952[/attach]
作者: GBKEE    時間: 2014-8-18 20:46

回復 3# av8d
  1. Option Explicit
  2. Dim FormDLL As String
  3. Sub Ie_document()
  4.     Dim URL As String, Ie As Object, A As Object, i
  5.    ' URL = "D:\原始檔.htm"
  6.     URL = "https://cas.tycg.gov.tw/casserver/login?service=http%3A%2F%2Fe.tycg.gov.tw%2Fapp%2Fportal%2Flogin"
  7.     Set Ie = CreateObject("InternetExplorer.Application")
  8.     With Ie
  9.         .Navigate URL
  10.         .Visible = True
  11.         Do While .Busy Or .readyState <> 4:         Loop
  12.         Stop   '網頁上輸入 帳號,密碼 後繼續程式
  13.         On Error Resume Next
  14.         Set A = .document.ALL
  15.         For i = 0 To A.Length - 1
  16.             Cells(i + 1, "A") = A(i).TAGNAME
  17.             Cells(i + 1, "B") = A(i).ID
  18.             Cells(i + 1, "C") = A(i).Name
  19.             Cells(i + 1, "D") = A(i).Value
  20.             Cells(i + 1, "E") = A(i).INNERTEXT
  21.             Cells(i + 1, "F") = A(i).Type
  22.         Next
  23.         '到工作表上看 [帳號,密碼]在哪一個元素上
  24.     End With
  25. End Sub
  26. Sub Ie()
  27.     Dim URL As String, Ie As Object, i
  28.     'URL = "D:\原始檔.htm"
  29.     URL = "https://cas.tycg.gov.tw/casserver/login?service=http%3A%2F%2Fe.tycg.gov.tw%2Fapp%2Fportal%2Flogin"
  30.    
  31.     Set Ie = CreateObject("InternetExplorer.Application")
  32.     With Ie
  33.         .Navigate URL
  34.         .Visible = True
  35.         Do While .Busy Or .readyState <> 4:         Loop
  36.         With .document.getElementsByTagName("input")
  37.             .Item("pincode").Value = "pincode"
  38.             .Item("pinpassword").Value = "pinpassword"
  39.             
  40.             '****************
  41.             .Item("username").Value = "帳AAA號"
  42.             For i = 0 To .Length - 1
  43.                 If .Item(i).ID = "password" And .Item(i).Name = "password" Then
  44.                                  '大小寫有分別
  45.                    .Item(i).Value = "TEST"
  46.                 End If
  47.             Next
  48.             '********************
  49.             .Item("pinbutton").Click  '這裡我無法測試
  50.         End With
  51.     End With
  52.    
  53. End Sub
複製代碼

作者: av8d    時間: 2014-8-18 21:35

本帖最後由 av8d 於 2014-8-18 21:42 編輯

回復 4# GBKEE


請問
帳號是填在  帳AAA號
密碼是填在  TEST 上  這樣?
是不是因為他是用ASP寫的~所以會比較複雜?
再次感謝版主用心良苦的幫助.

Sub Ie_document()
Sub Ie()
是選擇一個即可?
作者: GBKEE    時間: 2014-8-19 06:37

本帖最後由 GBKEE 於 2014-8-19 08:12 編輯

回復 5# av8d
帳號是填在  帳AAA號
密碼是填在  TEST 上  這樣?
是不是因為他是用ASP寫的~所以會比較複雜?
Sub Ie_document()
Sub Ie()
是選擇一個即可?

是帳號填上   "帳AAA號"
是密碼填上   'TEST"
是不是因為他是用ASP寫的~所以會比較複雜? ,應該不是
Sub Ie_document() 程式讓你明暸網頁上要輸入元素,的TAGNAME, ID, NAME, VALUE ,INNERTEXT,好對號入座
Sub Ie() 執行你要的動作
作者: av8d    時間: 2014-8-19 10:53

本帖最後由 av8d 於 2014-8-19 10:56 編輯

回復 6# GBKEE


    非常感謝板大解開難題~我稍做修改了一下~還是感覺不是很通順~因為複製貼上的關係出現了兩個With~
  1. Private Sub CommandButton1_Click()
  2. '帳密驗證
  3.     With CreateObject("InternetExplorer.Application")
  4.         .Navigate "https://cas.tycg.gov.tw/casserver/login?service=http%3A%2F%2Fe.tycg.gov.tw%2Fapp%2Fportal%2Flogin"
  5.    
  6.         Do While .Busy Or .ReadyState <> 4
  7.             DoEvents
  8.         Loop
  9.         
  10.         .Visible = True
  11.         '帳號欄位
  12.         .Document.all("username").innerText = "***"
  13.         '密碼欄位
  14.         '.Document.all("password").innerText = "***"
  15.     With .Document.getElementsByTagName("input")
  16.         For i = 0 To .Length - 1
  17.             If .Item(i).ID = "password" And .Item(i).Name = "password" Then
  18.                              '大小寫有分別
  19.                .Item(i).Value = "***"
  20.             End If
  21.         Next
  22.     End With
  23.         .Document.all("usernamebutton").Click
  24.     End With
  25. End Sub
複製代碼
新提問
如果重複執行,會出現
執行階段錯誤'91'
沒有設定物件變數或 With 區塊變數
錯誤段落如下
.Document.all("username").innerText = "***"
我在想應該是重複登入,因此找不到帳號欄位
所以我使用了On Error Resume Next,請問版主是否可行
作者: GBKEE    時間: 2014-8-19 11:01

本帖最後由 GBKEE 於 2014-8-19 11:10 編輯

回復 7# av8d
  1. .Document.all("username").innerText = "***"
複製代碼
這語法是錯誤的應如下
  1. .Document.all("username").VALUE ="***"
複製代碼
必須是已登出,才有登入的網頁可用,何謂重複登入??
作者: av8d    時間: 2014-8-19 14:05

本帖最後由 av8d 於 2014-8-19 14:25 編輯

回復 8# GBKEE


    可能是已經登入了~但是在按一次~他會找不到輸入帳號和密碼的地方,
他會直接前往帳號密碼正確的頁面,所以他會出現找不到帳號欄位的錯誤,
因此我使用忽略On Error Resume Next解決可否?謝謝版主!
作者: av8d    時間: 2014-8-19 14:54

回復 8# GBKEE


    請問版主如果會跳出網頁訊息,我該如何自動關閉呢?
作者: GBKEE    時間: 2014-8-19 15:13

回復 10# av8d
因是內部網頁,無法為你測試.
你自行試試使用On Error Resume Next 忽略錯誤.可否成功.

如果會跳出網頁訊息
試試看
  1. .Document.Focus
  2. Application.SendKeys ("~") '按下 Enter 鍵
複製代碼

作者: av8d    時間: 2014-8-19 16:20

本帖最後由 av8d 於 2014-8-19 16:30 編輯

回復 11# GBKEE


    沒有作用~

我在想會不會是因為
Private Sub CommandButton1_Click()
的關係~

請教版主~這段的意思  .Document.Focus
作者: GBKEE    時間: 2014-8-19 21:10

回復 12# av8d
  1. .Document.Focus
複製代碼
網頁文件主體的選定

JavaScript 徹底剖析 電子書(全書下載)
的3-17.htm的原始檔 用小作家存檔(3-17.htm)
  1. <HTML>
  2. <HEAD>
  3. <TITLE>計算體重</TITLE>
  4. </HEAD>
  5. <BODY>
  6. <SCRIPT Language="JavaScript">
  7. //彈出輸入視窗
  8. height=prompt("請問您的身高?",170)
  9. if(height) //判斷是否有回傳資料
  10. {
  11. //呼叫計算體重的函式
  12. weight=test(height)
  13. //彈出標準體重視窗
  14. alert("您的標準體重"+weight+"公斤")
  15. }
  16. //計算體重函式
  17. function test(height)
  18. {
  19. var weight=height-110
  20. //傳回函式的運算結果
  21. return weight
  22. }
  23. </SCRIPT>
複製代碼
3-17.htm的原始檔, 存檔(3-17.htm),執行試試看
  1. Option Explicit
  2. Sub EX()
  3.     Dim URL As String
  4.   ' Set_FormDLL
  5.     URL = "D:\3-17.htm"  '
  6.     With CreateObject("InternetExplorer.Application")
  7.         .Navigate URL
  8.         .Visible = True
  9.         
  10.         Application.Wait Time + #12:00:01 AM# '等候一秒
  11.         Application.SendKeys "{DEL}", True '按下 DEL 鍵
  12.         Application.SendKeys "ABC", True   '輸入 ABC 鍵
  13.         Application.Wait Time + #12:00:01 AM# '等候一秒
  14.         
  15.         Application.SendKeys ("~") '按下 Enter 鍵

  16.         '.Quit
  17.     End With
  18. End Sub
複製代碼

作者: av8d    時間: 2014-8-20 08:41

本帖最後由 av8d 於 2014-8-20 09:11 編輯

回復 13# GBKEE

%
    謝謝版主百忙之中抽空的詳細的jsp解答,完成了90%,我會努力的!

最近發現一個疑問
進入後,讓他自動導入一個超連結,但是他的超連結不是網址
卻是 javascript:;

附上原始檔
[attach]18970[/attach]
作者: av8d    時間: 2014-8-20 09:14

回復 13# GBKEE


    我想應該和ch4 事件處理器有關~努力學習中!
作者: av8d    時間: 2014-8-20 11:23

本帖最後由 av8d 於 2014-8-20 11:40 編輯

回復 13# GBKEE


    找到了~帳號密碼是從這裡登入
可是帳號密碼和確定按鈕的名稱有點怪怪的
附上原始檔
[attach]18971[/attach]

帳號密碼都丟不上去,確認按鈕找不到name
--------------------
帳號好像是userNameTD
密碼好像是passwordTD
但是找不到確定按鈕
作者: av8d    時間: 2014-8-20 14:28

回復 11# GBKEE


    目前只剩這個問題~如何讓開啟網頁後~讓網頁為最上層
我按照大大使用.Document.Focus
但是EXCEL卻還是在最上層~然後接下來按ENTER的動作就無法繼續執行.
再次謝謝版主.
作者: GBKEE    時間: 2014-8-20 15:11

本帖最後由 GBKEE 於 2014-8-20 15:46 編輯

回復 17# av8d
如何讓開啟網頁後~讓網頁為最上層

你的問題是 login 成功 -> 開啟一新的IE的視窗,無法取得(新的IE)的資料(元素)

[attach]18977[/attach]

如 機關內部人事業務系統-登入 完成 (登入要 記住一天 以上),
  1. With IE
  2.         .Navigate URL 'login
  3.         .Visible = True
  4.         Do While .Busy Or .readyState <> 4:         Loop
  5.         .Document.getElementsByTagName("OPTION")(2).Selected = True '記住一天
  6.         '或是
  7.         '.Document.getElementsByTagName("SELECT")(0).Value = "week" '記住一個月
  8.    
複製代碼
程式碼直接進入 機關內部人事業務系統的iIE ,不必由登入網頁進入
機關內部人事業務系統的URL
可如圖 : 在IE主體上,按下右鍵, 選取內容,內容的視窗,滑鼠複製URL
[attach]18978[/attach]
作者: av8d    時間: 2014-8-21 08:41

回復 18# GBKEE


    謝謝版大~
目前剩下唯一問題~
每次開啟後網頁總是在EXCEL下層~
導致訊息視窗會存在的問題
(有使用.Document.Focus)
每個位子也測試過,皆無效
作者: GBKEE    時間: 2014-8-21 08:59

回復 19# av8d
這是內部網頁.幫不上忙.
作者: av8d    時間: 2014-8-21 10:06

本帖最後由 av8d 於 2014-8-21 10:35 編輯

回復 20# GBKEE


    版主再次麻煩您~真不好意思~
附上代碼
  1. Private Sub CommandButton1_Click()
  2.     With CreateObject("InternetExplorer.Application")
  3.         .Navigate "https://google.com"
  4.         .Visible = True

  5.         Do While .Busy Or .ReadyState <> 4
  6.             DoEvents
  7.         Loop
  8.         .Document.Focus
  9.     End With
  10. End Sub
複製代碼
以上是最簡易的Google開啟的網頁
-------------------------------------------------
以下非常重要~首先我把按這按鈕放上這個代碼後
儲存並關閉EXCEL
然後重新開啟,直接按下按鈕後
您會看到Google網頁很明顯的在EXCEL後面
該如何讓網頁在最上層呢?
----------------------------------------------------
發現一個現象~每當開啟後端程式碼區後
再執行按鈕就會正常將網頁在最上層
但是當檔案關閉,開啟檔案後直接按按鈕,網頁又會再度跑到EXCEL後面
作者: av8d    時間: 2014-8-21 13:25

本帖最後由 av8d 於 2014-8-21 13:27 編輯

回復 20# GBKEE


    解決了~
我讓開EXCEL時,自動開啟程式碼,即可
  1. Private Sub Workbook_Open()
  2.     On Error Resume Next
  3.     Application.SendKeys ("%{F11}") '按下 Alt+F11 鍵
  4. End Sub
複製代碼
只是不清楚如何讓他最小化,努力查詢中
版主辛苦了~謝謝
作者: GBKEE    時間: 2014-8-21 17:06

回復 22# av8d
  1. Dim IE As Object
  2. Sub CommandButton1_Click()
  3.     Set IE = CreateObject("InternetExplorer.Application")
  4.     With IE
  5.         .Navigate "https://google.com"
  6.         .Visible = False  'ie 不顯示 替代IE最小化的指令        
  7.         '.Visible = True   'ie 顯示
  8.         'IE最小化要動用到API函數,可指定上,右,高,寬 替代IE最小化的指令
  9.         '.Top = 1
  10.         '.Left = 1
  11.         '.Width = 1
  12.         '.Height = 1
  13.         Do While .Busy Or .readyState <> 4
  14.             DoEvents
  15.         Loop
  16.     End With
  17. End Sub
  18. Sub Ex() '其他程式中呼叫IE
  19.     MsgBox IE.document.getElementsByTagName("Title")(0).innertext
  20.     IE.Quit
  21.     Set IE = Nothing
  22. End Sub
複製代碼

作者: av8d    時間: 2014-8-26 08:39

回復 23# GBKEE


    謝謝版主~想再請教版主~
一般我們打開EXCEL後~
按下Alt+F11會打開程式碼~
是否有最小化程式碼的寫法呢?謝謝!
作者: GBKEE    時間: 2014-8-26 09:56

回復 24# av8d
  1. Option Explicit
  2. Sub Ex()
  3.     With Application                    'Excel 物件
  4.         .WindowState = xlMinimized      '視窗最小化
  5.       '  .Visible = False                '決定物件是否可見:不可見
  6.         With .VBE.MainWindow            'VBA視窗 (Window 物件)
  7.             .Visible = True             'Alt+F11
  8.             .WindowState = vbext_ws_Maximize        '視窗最大化
  9.                         '= vbext_ws_Normal          '視窗一般化
  10.             Application.Wait Time + #12:00:02 AM#   '暫停2秒
  11.             .WindowState = vbext_ws_Minimize       '視窗最小化
  12.         '    .Visible = False            'Alt+q
  13.         End With
  14.       '  .WindowState = xlMaximized      '視窗最大化
  15.        ' .Visible = True                '決定物件是否可見:可見
  16.     End With
  17. End Sub
複製代碼

作者: av8d    時間: 2014-8-26 11:33

回復 25# GBKEE


    謝謝版主鼎力相助,完成如下
  1.     With Application
  2.         With .VBE.MainWindow
  3.             .WindowState = vbext_ws_Minimize
  4.             .Visible = False
  5.         End With
  6.     End With
複製代碼
真是受益良多~感激萬分!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)