返回列表 上一主題 發帖

用excel上網查音標 又掛了

回復 3# oobird
請問版大
我用了相關語法.responseText
可是電腦出現不正確的引用

可否幫我看看問題,謝謝!
測試.rar (4.8 KB)

TOP

回復 5# oobird


    oobird 大
回傳值,多了 '> 及強制換行Alt+Enter
可否排除?!

剛剛對照一下語法
仍舊不解 .responseText
在之前未何會出現"不正確的引用"
兩者VBA 除了回圈
似乎差異不大

我外行,請大大提示
謝謝!

TOP

回復 5# oobird

剛剛稍微修改試了GBKEE大的語法
排除了Alt+Enter的問題

Left(VBA.Split(.responseText, "filename' value='")(1), InStr(VBA.Split(.responseText, "<table class='noBorder")(1), ">"))

算是"瞎貓"~呼弄對了嗎?!
^^

另一個疑問,還請版大開示!

TOP

回復 8# Hsieh


    我VBA是在ㄧ知半解的應用 http://tw.knowledge.yahoo.com/question/question?qid=1512022306295
所以常常搞不清楚
謝謝版大提醒,感恩!

TOP

回復 2# GBKEE

請問 <input type='hidden' name='filename' value='t108sb27_20120712_17145551.csv'>
取出這段 t108sb27_20120712_17145551.csv
應該怎麼下語法才對

以下語法,有時會Err
Left(VBA.Split(.responseText, "filename' value='")(1), InStr(VBA.Split(.responseText, "<table class='noBorder")(1), ">"))
Left(VBA.Split(.responseText, "filename' value='")(1), InStr(VBA.Split(.responseText, "<table class='noBorder")(1), "<"))
紅色字體位置,時常要更正
是長度運算錯誤?!

這段語法不懂,可以麻煩指導及稍加說明?!
Left(VBA.Split(.responseText, "filename' value='")(1), InStr(VBA.Split(.responseText, "<table class='noBorder")(1), ">"))
InStr 及 Split 查過了還是不懂

~謝謝!!

TOP

本帖最後由 HSIEN6001 於 2012-7-12 20:31 編輯

Sorry ~~完整的段落是這樣~~
<input type='hidden' name='filename' value='t108sb27_20120712_17145551.csv'>
<table class='noBorder' align='center' width='100%'><tr><td align='left'>

VBA.Split 特別看不懂
http://msdn.microsoft.com/zh-tw/library/system.string.split.aspx

InStr函数可返回一个字符串在另一个字符串中首次出现的位置。
http://www.w3school.com.cn/vbscript/func_instr.asp
InStr([start,]string1,string2[,compare])

請問...
InStr(VBA.Split(.responseText, "<table class='noBorder")(1)
中的(1)是甚麼意思?!

TOP

本帖最後由 HSIEN6001 於 2012-7-13 15:34 編輯

回復 13# GBKEE

    不好意思!
因為這問題是 #4 樓的延伸
所以麻煩版大再幫我看看
取得原始碼為X變數


Left(VBA.Split(.responseText, "filename' value='")(1), InStr(VBA.Split(.responseText, "<table class='noBorder")(1), ">"))
請問,該句語法修定
  1. Sub EX()
  2. Dim xml As New XMLHTTP
  3. Dim stream As New ADODB.stream
  4. Dim strURL As String
  5. Dim x As String
  6.     strURL = "http://mops.twse.com.tw/mops/web/ajax_t108sb27?step=1&firstin=ture&off=1&TYPEK=sii&co_id_1=&co_id_2=&year=" & _
  7.                 Year(Date) - 1911 & "&month=&b_date=&e_date=&type=1&rulesubmit2=%20%E6%90%9C%E5%B0%8B%20"
  8.         With xml
  9.             .Open "GET", strURL, 0
  10.             .send
  11.             Do While xml.ReadyState <> 4
  12.             Loop
  13.             x = Left(VBA.Split(.responseText, "filename' value='")(1), InStr(VBA.Split(.responseText, "<table class='noBorder")(1), "<"))
  14.         End With
  15. End Sub
複製代碼

TOP

回復 13# GBKEE

這範例,我還需要再Google 及消化吸收
一維陣列 & UBound(W) ?!
屆時若還不懂,再請教版大

xi=2 , Mid(A,2,1)=A , Split(1ABCD2ABCD3ABCD4ABCD,A)=1  , A為分割之界?
xi=3 , Mid(A,3,1)=B , Split(1ABCD2ABCD3ABCD4ABCD,B)=BCD2
xi=4 , Mid(A,4,1)=C , Split(1ABCD2ABCD3ABCD4ABCD,C)=BCD3
xi=5 , Mid(A,5,1)=D , Split(1ABCD2ABCD3ABCD4ABCD,D)=BCD4
xi=6 , Mid(A,3,1)=2 , Split(1ABCD2ABCD3ABCD4ABCD,2)=BCD

TOP

回復 13# GBKEE

終於意會這範例
xi=2 , Mid(A,2,1)=A , W=Split(1ABCD2ABCD3ABCD4ABCD,A)=4 個 A , UBound(W)=4 , For i = 0 To 4
  則 W(0)=1 , W(1)=BCD2 , W(2)=BCD3 , W(3)=BCD4 , W(4)=BCD

xi=3 , Mid(A,3,1)=B , w=Split(1ABCD2ABCD3ABCD4ABCD,B)=4 個 B , UBound(W)=4 , For i = 0 To 4
  則 W(0)=1A , W(1)=CD2A , W(2)=CD3A , W(3)=CD4A , W(4)=CD

xi=4 , Mid(A,4,1)=C , w=Split(1ABCD2ABCD3ABCD4ABCD,C)=4 個 C , UBound(W)=4 , For i = 0 To 4
  則 W(0)=1AB , W(1)=D2AB , W(2)=D3AB , W(3)=D4AB , W(4)=D

xi=5 , Mid(A,5,1)=D , w=Split(1ABCD2ABCD3ABCD4ABCD,D)=4 個 D , UBound(W)=4 , For i = 0 To 4
  則 W(0)=1ABC , W(1)=2ABC , W(2)=3ABC , W(3)=4ABC , W(4)=空值

xi=6 , Mid(A,3,1)=2 , w=Split(1ABCD2ABCD3ABCD4ABCD,D)=1 個 2 , UBound(W)=1 , For i = 0 To 1
  則 W(0)=1ABCD , W(1)=ABCD3ABCD4ABCD

好難喔!需要消化.....很久!
魚不如漁,謝謝版大的範例說明

===========================
再來自解問題
InStr函數可返回一個字串在另一個字串中首次出現的位置。
Split在字串中以指定的字元作分割傳回一維陣列。
需求是 t108sb27_20120712_17145551.csv

語法修改前:Left(VBA.Split(.responseText, "filename' value='")(1), InStr(VBA.Split(.responseText, "<table class='noBorder")(1), "<"))

VBA.Split(.responseText, "filename' value='")=t108 開始
InStr(VBA.Split(.responseText, "<table class='noBorder")(1),"<")
因為兩段落之間有Alt+Enter

所以給了這個值 -1
(InStr(VBA.Split(.responseText, "<table class='noBorder")(1),"<")-1)
RUN結果不對耶!

若遇上字串間有個Alt+Enter 該如何處理??  這疑問尚未解決
<input type='hidden' name='filename' value='t108sb27_20120712_17145551.csv'>
<table class='noBorder' align='center' width='100%'><tr><td align='left'>

再請教 Split(字串,分割字元)(1)--->這個(1)是?意思

TOP

本帖最後由 HSIEN6001 於 2012-7-15 17:50 編輯

回復 18# GBKEE

程式碼在#14樓

若顯示在[A1]
  1. Sub EX()
  2. Dim xml As New XMLHTTP
  3. Dim stream As New ADODB.stream
  4. Dim strURL As String
  5.     strURL = "http://mops.twse.com.tw/mops/web/ajax_t108sb27?step=1&firstin=ture&off=1&TYPEK=otc&co_id_1=&co_id_2=&year=" & _
  6.                 Year(Date) - 1911 & "&month=&b_date=&e_date=&type=1&rulesubmit2=%20%E6%90%9C%E5%B0%8B%20"
  7.         With xml
  8.             .Open "GET", strURL, 0
  9.             .send
  10.             Do While xml.ReadyState <> 4
  11.             Loop
  12.             [A1] = Left(VBA.Split(.responseText, "filename' value='")(1), InStr(VBA.Split(.responseText, "<table class='noBorder")(1), "<"))
  13.             
  14.         End With
  15. End Sub
複製代碼
不知為何有時OK~有時不行?!


我是參考#2 樓語法
Rng.Offset(0, 1) = Left(VBA.Split(.responseText, "KK</span>")(1), InStr(VBA.Split(.responseText, "KK</span>")(1), "]"))
修改而來的
Left(VBA.Split(.responseText, "filename' value='")(1), InStr(VBA.Split(.responseText, "<table class='noBorder")(1), "<"))

Split(字串,分割字元)(1)--->這個(1)是?意思
看不懂(1)的作用

TOP

        靜思自在 : 不要小看自己,因為人有無限的可能。
返回列表 上一主題