返回列表 上一主題 發帖

用excel上網查音標 又掛了

回復 2# GBKEE
順帶請教: 使用 VBA.Split 與 函數之 Split 實務應用上到底有何差異?

TOP

回復 13# GBKEE
  1. Option Explicit
  2. Sub Ex() 'Split在字串中以指定的字元作分割傳回一維陣列
  3.     Dim A As String, W, xi As Integer, i As Integer
  4.     A = "1ABCD2ABCD3ABCD4ABCD"
  5.     For xi = 2 To 6
  6.         W = Split(A, Mid(A, xi, 1))
  7.         For i = 0 To UBound(W)
  8.         Debug.Print W(i)     '在即時運算視窗可見
  9.         Next
  10.         ' MsgBox Join(W, ",")
  11.         MsgBox "(For " & xi & " To 6)" & Chr(10) & Chr(13) & "(For i = 0 To " & UBound(W) & ")" & Chr(10) & Chr(13) & _
  12.                                          " Split(" & A & ", Mid(A, " & xi & ", 1)) -> " & "'" & Mid(A, xi, 1) & "'" & _
  13.                                          Chr(10) & Chr(13) & "Join(W, ', ') -> " & Join(W, ",")
  14.     Next
  15. End Sub

  16. ' (For 2 to 6)
  17. ' (For i = 0 To 4)
  18. ' Split("1ABCD2ABCD3ABCD4ABCD",Mid(A,2,1)) -> 'A'
  19. ' Join(W,',') -> 1,BCD2,BCD3,BCD4,BCD
  20. '
  21. ' (For 3 to 6)
  22. ' (For i = 0 To 4)
  23. ' Split("1ABCD2ABCD3ABCD4ABCD",Mid(A,3,1)) -> 'B'
  24. ' Join(W,',') -> 1A,CD2A,CD3A,CD4A,CD
  25. '
  26. ' (For 4 to 6)
  27. ' (For i = 0 To 4)
  28. ' Split("1ABCD2ABCD3ABCD4ABCD",Mid(A,4,1)) -> 'C'
  29. ' Join(W,',') -> 1AB,D2AB,D3AB,D4AB,D
  30. '
  31. ' (For 5 to 6)
  32. ' (For i = 0 To 4)                   <---   正確應為 For i = 0 To 3
  33. ' Split("1ABCD2ABCD3ABCD4ABCD",Mid(A,5,1)) -> 'D'
  34. ' Join(W,',') -> 1ABC,2ABC,3ABC,4ABC
  35. '
  36. ' (For 6 to 6)
  37. ' (For i = 0 To 1)
  38. ' Split("1ABCD2ABCD3ABCD4ABCD",Mid(A,6,1)) -> '2'
  39. ' Join(W,',') -> 1ABCD.ABCD3ABCD4ABCD
複製代碼
謝謝您的範例,簡明扼要。
經測試, For 5 to 6 的迴圈時,因該 A 字串尾端字元為 D,
且 Split(A, Mid(A,5,1)) 又為 D 時, UBound(W) 會判定為 4,
因為 W(4) = ""。 如果使用 UBound(W) 來做處理就會有 Bug 了。

TOP

本帖最後由 c_c_lai 於 2012-7-15 20:52 編輯

回復 20# HSIEN6001
第一次一定是 OK 的,因為在 D:\ 內 市.csv、櫃.csv 並不存在,按第二次時,
妳又再次使用 .SaveToFile (Apath & "市.csv") 以及 .SaveToFile (Apath & "櫃.csv")
所以就會出錯了。
應該在 .SaveToFile() 前先判斷檔案是否業已存在,如是的話,就應先予以刪除後,
才能執行 .SaveToFile()。
至於如何去執行刪除動作(VBA 語法)就要請教 GBKEE 大大了。

TOP

回復 18# GBKEE
我指的是#16 的第32行
' (For 5 to 6)
' (For i = 0 To 4)                   <---   正確應為 For i = 0 To 3
' Split("1ABCD2ABCD3ABCD4ABCD",Mid(A,5,1)) -> 'D'
' Join(W,',') -> 1ABC,2ABC,3ABC,4ABC,
'
10.png

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

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

TOP

        靜思自在 : 人的心地是一畦田,土地沒有播下好種子,也長不出好的果實。 -
返回列表 上一主題