返回列表 上一主題 發帖

用excel上網查音標 又掛了

用excel上網查音標 又掛了

真害YAHOO!奇摩字典又改版了
音標又找不到了
只能看到解釋
新增的即時發音好像粉不錯
    1. Sub searchIT(Rng As Range)
   2.     Dim XH As Object
   3.     Dim shpRm As Shape
   4.     '清除已有的解釋及音標
   5.     With Rng.EntireRow
   6.         .Resize(1, .Columns.Count - 1).Offset(0, 1).Clear
   7.     End With
   8.     '開啟網頁
   9.     Set XH = CreateObject("Microsoft.XMLHTTP")
  10.     With XH
  11.         .Open "get", "http://tw.dictionary.yahoo.com/dictionary?p=" & Rng.Text, False
  12.         .send
  13.         On Error Resume Next
  14.         '摘取第一組中文翻譯
  15.         Rng.Offset(0, 2) = Split(Split(.responseText, "class=""description""><p>1.")(1), "<")(0)
  16.         '摘取KK音標
  17.         Rng.Offset(0, 1) = Left(VBA.Split(.responseText, "KK</span>  ")(1), InStr(VBA.Split(.responseText, "KK</span>  ")(1), "]"))
  18.         
  19.     End With
  20.     Rng.Select
  21. End Sub
50 字節以內
不支持自定義 Discuz! 代碼

本帖最後由 HSIEN6001 於 2012-7-17 18:37 編輯

回復 32# GBKEE
大致上,有概念了~^^

回復 33# c_c_lai
用 "判斷式" 的邏輯去下指令 , 避免之後程序因On Error Resume Next
未出現偵錯的段落提示 ; 而產生Run出不完整的結果
是這樣的意思,我瞭解!

受益良多,謝謝兩位大大指導!

TOP

回復 30# HSIEN6001
如果妳事前沒加上 On Error Resume Next 偵測來避開錯誤的話,
是會產生  執行階段錯誤 '53':找不到檔案 的。
妳那種寫法是  不管三七二十一先殺了再說!
這在正規的程式撰寫語法上,是不太好的,也是我極力去避免的。
明知會產生錯誤卻又走旁道避開,哪日不靈光就嗚呼哀栽了!
總之我是建議妳學習正軌模式,對妳的功力增長會有實質幫助的。

TOP

本帖最後由 GBKEE 於 2012-7-17 17:14 編輯

回復 31# HSIEN6001
最小的索引值是----> 0 開始的長整數.  這不一定
例  Dim A(4 To 7)  ->   最小的索引值是 4 , 最大的索引值是7   
Option Base  0 或 1   可指定最小的索引值為 0 或 1
  1. Option Explicit
  2. Option Base 1
  3. 'Option Base 陳述式 在模組層次中用來宣告陣列索引的預設下限。語法 Option Base {0 | 1}
  4. Sub Ex_陣列()
  5. Dim A As String, W, xi As Integer, i As Integer
  6. W = Array("A", "B", "C", "D")
  7. MsgBox LBound(W)
  8. For i = LBound(W) To UBound(W)
  9. MsgBox "Array(""A"", ""B"", ""C"", ""D"")" & Chr(10) & "W(" & i & ") -> " & W(i)
  10. Next
  11. End Sub
複製代碼

TOP

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

回復 29# GBKEE

~索引值  ~
最小的索引值是----> 0 開始的長整數.

這#17
  1. Sub Ex_陣列()
  2.     Dim A As String, W, xi As Integer, i As Integer
  3.     W = Array("A", "B", "C", "D")
  4.     For i = LBound(W) To UBound(W)
  5.         MsgBox "Array(""A"", ""B"", ""C"", ""D"")" & Chr(10) & "W(" & i & ")  -> " & W(i)
  6.     Next
  7. End Sub
複製代碼
這  
LBound(W) ---> LBound 函数可以找到数组某一维的下限索引值。
UBound(W)---> UBound 函数可以找到数组某一维的上限索引值。
故For  i = LBound(W) To UBound(W) = 4 個索引值 ; 最小長整數為0  , 故 i  = "W(" &  i & ") = 0 To 3
W(0) = A , W(1) = B , W(2) = C , W(3) = D

而 : Split(字串, "分割字元")(1)---->指的是第(1)個索引值

兩者的() 無相關  ;是不同的應用
.....這樣的邏輯,對嗎?!

要打結了   O_Q

TOP

回復 26# c_c_lai

這樣也可行
On Error Resume Next
Kill Apath & "櫃.csv"
.SaveToFile (Apath & "櫃.csv")

TOP

回復 28# HSIEN6001
第(索引值)個分割   
LBound(W) ---> LBound 函数可以找到数组某一维的下限索引值。
UBound(W)---> UBound 函数可以找到数组某一维的上限索引值
  1. Option Explicit
  2. Sub Ex()
  3.     Dim A(4 To 7), x As Integer
  4.     For x = LBound(A) To UBound(A)
  5.         A(x) = String(x, "A")
  6.     Next
  7.     MsgBox "LBound(A) =>下限索引值" & LBound(A) & Chr(10) & _
  8.     "UBound(A) =>上限索引值" & UBound(A) & Chr(10) & Join(A, "---")
  9. End Sub
複製代碼

TOP

回復 27# GBKEE


答案是--->第(1)個分割,對了嗎?!

很多語法都是先套用,對其理解度還不夠
新範例也很多還很陌生的,有助於我多瞭解意義
謝謝大大~^_^~

LBound(W) --->最小之長整數  'http://www.w3school.com.cn/vbscript/func_lbound.asp
UBound(W)--->最大之長整數 'http://msdn.microsoft.com/zh-cn/library/95b8f22f(v=vs.80).aspx

Chr(13) 歸位;回車 Chr(10) 換行 Chr(9) TAB键的空格 Chr(32) 空格 Chr(34)  " chr(0)则是系统控制符,表示空,也就是Null
Chr(255) 特殊空格 範例'http://www.aspxhome.com/asp/startasp/20097/82213.htm
ASCII碼 對照表 'http://big5.webasp.net/article/15/14718.htm

真的!!!!!!我有認真再消化 O_Q

TOP

回復 25# HSIEN6001
我會努力消化
  1. Option Explicit
  2. Sub Ex_陣列() 'Split(字串,分割字元)(1)--->這個(1)是?意思
  3.     Dim A As String, W, xi As Integer, i As Integer
  4.     'A = "1ABCD2ABCD3ABCD4ABCD"
  5.     'W = Split(A, "B")
  6.     W = Array("A", "B", "C", "D")
  7.     For i = LBound(W) To UBound(W)
  8.         MsgBox "Array(""A"", ""B"", ""C"", ""D"")" & Chr(10) & "W(" & i & ")  -> " & W(i)
  9.     Next
  10. End Sub
複製代碼

TOP

回復 24# GBKEE
回復 25# HSIEN6001
原來它是使用 Kill 方法。
  1. ' 指定目錄內如果該檔案已經存在,則將之予以刪除。
  2. If Dir(Apath & "市.csv") <> "" Then Kill Apath & "市.csv"         
  3. .SaveToFile (Apath & "市.csv")

  4. ' 指定目錄內如果該檔案已經存在,則將之予以刪除。
  5. If Dir(Apath & "櫃.csv") <> "" Then Kill Apath & "櫃.csv"         
  6. .SaveToFile (Apath & "櫃.csv")
複製代碼
又學到了, 謝謝!

TOP

        靜思自在 : 心中常存善解、包容、感思、知足、惜福。
返回列表 上一主題