返回列表 上一主題 發帖

[發問] 請問能否將2個VBA巨集合併成1個VBA巨集

回復 20# GBKEE

我的是win7 , IE 10 , office2010 需要改成這樣
E.all.Length >= IIf(i = 0, 415, 135)

用(azrael19大大)修改的這一句也不錯
Loop Until 0 < InStr(1, E.outerHTML, IIf(i = 0, "滬深反", "台灣加權股價指數"))  '改用相關字串確認是否有資料

TOP

本帖最後由 GBKEE 於 2015-7-27 08:15 編輯

回復 21# no3-taco
謝謝你的答覆.
由於我的軟體(xp,2003)一直沒升級,所以在回覆上有些落差.(很抱歉)
再請教 第10帖的程式碼,為何非2003版,非ie8 上執行有語法的錯誤.
可否 幫忙修正一下.
  1. Loop Until InStr(1, E.outerHTML, IIf(i = 0, "滬深反", "台灣加權股價指數"))
複製代碼
條件公式傳回的數值 0=False, 不等於0都為True
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 15# azrael19

執行結果只出現 "型態不符合" 之訊息



我看您真的很用心幫我解決問題 不論結果如何 我還是很感謝您的努力 謝謝您

TOP

回復 20# GBKEE
我的是win7 , IE 11 , office2013
跟no3-taco 一樣需要改成 E.all.Length >= IIf(i = 0, 415, 135)

回復 21# no3-taco
後來我改成 Loop Until InStr(1, E.outerHTML, IIf(i = 0, "00638R", "電子類加權股價指數"))比較沒問題

回復 19# jackyq
多謝jackyq大提點,我學習程式的經驗大部分都是網路上Google抓來貼上修改,真正自己寫的不多,確實從沒認真考慮到該如何寫才能讓後續的維護工作更輕鬆,關於這方面的經驗前輩是否可以推薦相關的書籍或網站,還是如果我要用Google搜尋這方面的資料該用什麼樣的關鍵字,謝謝!

關於lcctno大哥所提的問題一開始因為從網頁的原始碼看不到資料,我才想去將JSON資料內容重組來貼,根據jackyq大您的建議我想還是應該以 GBKEE 版主一開始所教用IE來抓取的方式最容易維護,後來我有找到動態產生的網頁原始碼才發現我做了好多白工,只要在貼上工作表前將網頁相關字串內容修改重組就可以讓負號正常顯示出來,下面的程式是用 GBKEE 版主原始碼來做修改,如果有更簡單的方式還希望您們能多指導一下,謝謝!
  1. Option Explicit
  2. Sub Ex()
  3.     Dim E As Object, AR(), i As Integer, o As Object, k As Integer
  4.     AR = Array("http://www.yuantaetfs.com/#/RtNav/Index", "http://www.yuantaetfs.com/#/Home/Index")
  5.     'Ar = Array(網址:即時淨值,網址:國內指數) 網址置入陣列
  6.     ActiveSheet.UsedRange.Clear
  7.     For i = 0 To 1
  8.         With CreateObject("InternetExplorer.Application")
  9.             .Visible = True
  10.             .Navigate AR(i)
  11.             Do While .Busy Or .readyState <> 4: DoEvents: Loop
  12.             If i = 0 Then  '國內指數:不需按下同意鍵
  13.                 Do
  14.                     Set E = .Document.getElementByid("Agree")
  15.                 Loop Until Not E Is Nothing
  16.                 E.Click
  17.             End If
  18.             Do
  19.                 Do
  20.                     Set E = .Document.getElementsByTagName("TABLE")(21 + i)
  21.                     '即時淨值 第21個 "TABLE" ,'國內指數 第22個 "TABLE"
  22.                 Loop Until Not E Is Nothing
  23.             'Loop Until E.all.Length >= IIf(i = 0, 431, 150) '
  24.             Loop Until InStr(1, E.outerHTML, IIf(i = 0, "00638R", "電子類加權股價指數"))  '改用相關字串確認是否有資料
  25.             
  26.             '刪除▲ ▼ 符號並加上數字負號顯示
  27.             If 0 = i Then
  28.                 For Each o In E.getElementsByClassName("ng-binding upcolor")
  29.                     If InStr(1, o.innerText, "▲ ▼") Then
  30.                         o.innerHTML = Mid(o.innerText, 5)
  31.                     End If
  32.                 Next
  33.                 For Each o In E.getElementsByClassName("ng-binding downcolor")
  34.                     If InStr(1, o.innerText, "▲ ▼") Then
  35.                         o.innerHTML = "-" & Mid(o.innerText, 5)
  36.                     Else
  37.                         o.innerHTML = "-" & o.innerText
  38.                     End If
  39.                 Next
  40.             Else
  41.                 For Each o In E.getElementsByClassName("ChangesText2 downcolor")
  42.                     k = InStr(1, o.innerText, "(")
  43.                     If 0 < k Then
  44.                         o.innerHTML = "-" & Mid(o.innerText, 1, k - 1) & "(-" & Mid(o.innerText, k + 1)
  45.                     End If
  46.                 Next
  47.             End If
  48.             .Document.body.innerHTML = Replace(E.outerHTML, "<span class=""ng-hide"" ng-show=""o.price == 0"">0</span>", "") ' 去除 [折溢價] 數字後面多餘的0
  49.             '.Document.body.innerHTML = E.outerHTML
  50.             'Stop
  51.             .ExecWB 17, 2       '  Select All
  52.             .ExecWB 12, 2       '  Copy selection
  53.             With ActiveSheet
  54.                 .Range("A" & IIf(i = 0, 1, 27)).Select
  55.                 .PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True
  56.                 With .Range(IIf(i = 0, "D16:D17", "C27:C28")).Interior
  57.                     .ColorIndex = 35
  58.                     .Pattern = xlSolid
  59.                 End With
  60.             End With
  61.             .Quit        '關閉網頁
  62.         End With
  63.     Next
  64. End Sub
複製代碼

TOP

回復 24# azrael19

大大果然聰明
一點就懂
從html下手就可以了

TOP

回復 24# azrael19
果然是高手 已經OK了 謝謝您了

TOP

回復 10# GBKEE

合3 內之按鈕 是您的VBA語法 但有錯誤 現將該檔案上傳 感謝您的用心
另外告知於您 我是使用WIN7 61位元  Office2003  IE11

即時估計淨值.zip (28.2 KB)

TOP

回復 27# lcctno
no3-taco  ,azrael19 提供
win7, IE 10 , office2010
win7 , IE 11 , office2013
需要改成這樣
  1. E.all.Length >= IIf(i = 0, 415, 135)
複製代碼

找出 語法錯誤,第2個Stop 註解符號沒標好, 你提供的圖示剛好擋住 .
請修改後試試看.
  1. Stop  '之後按下F5
複製代碼


azrael19 提供的語法
E.getElementsByClassName("ng-binding upcolor")
ie8不支援.
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 22# GBKEE

其實我也不是很清楚,能在指點問題的癥結點在哪嗎

我抓到的數量就這麼多Loop Until E.all.Length >= IIf(i = 0, 415, 135),都比版大的少所以會卡住。(判斷式我寫不出完整的)

下面這兩句我執行都可以,有資料都會抓的到(沒有資料我就不知道了),不知道版大指的是什麼(我的判斷能力有限,沒有很深入了解)
Loop Until InStr(1, E.outerHTML, IIf(i = 0, "滬深反", "台灣加權股價指數"))
Loop Until 0 < InStr(1, E.outerHTML, IIf(i = 0, "滬深反", "台灣加權股價指數"))

TOP

回復 29# no3-taco
條件是傳回的值 True 執行, False 不執行
  1. Option Explicit
  2. Sub Ex()
  3.     Dim AR(), E As Variant
  4.     AR = Array(1, 5, 0, -1, -2)
  5.     For Each E In AR
  6.          'MsgBox E & " = " & IIf(E, True, False)
  7.          If E Then MsgBox E
  8.     Next
  9. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 【行善要及時】行善要及時,功德要持續。如燒開水一般,未燒開之前千萬不要停熄火候,否則重來就太費事了。
返回列表 上一主題