返回列表 上一主題 發帖

處理STRING時遇到困難

回復  小俠客
InStr(raw.Cells(i, 3), "小學")   這只會傳回數字
你自串中 初小, 小學,初中, 國中....  ...
GBKEE 發表於 2012-8-28 09:44



我忽然想到,如果我把小學、中學、大學、研究生以上的類別用array儲起來,用FOR LOOP + select case 或if是不是可以?
例如:
  1. scl(1,1) = "初小"
  2. scl(1,2) = "小學"
  3. scl(2,1) = "初中"
  4. scl(2,2) = "高中"
  5. scl(3,1) = "大學"
  6. .
  7. .
  8. .

  9. edu(1)="小學"
  10. edu(2)="中學"
  11. edu(3)="大學"
  12. .
  13. .

  14. for j = 1 to 4
  15.         for k = 1 to 2
  16.                 select case instr(raw.Cells(i, 3), scl(j,k))
  17.                         case >0
  18.                                 vbtype=edu(j)
  19.                 end select
  20.         next k
  21. next j
複製代碼
但如果sub中放了太多的array,會有點混亂,而且類似的array在其他的sub 也會用到,如果在每一個sub都存有相同的array,維護時也很麻煩,所以我打算用public const去define array,但失敗了。

我的做法是:

public dim scl(4,2) as string
const dim scl(1,1) = "初小"
const scl(1,2) = "小學"
.

sub abc()

是不是不能在public define 2dimensional的 array?

TOP

本帖最後由 GBKEE 於 2012-8-29 13:09 編輯

回復 11# 小俠客
  1. Option Explicit
  2. Public scl, edu                  '此公用變數 可供其他程序使用   
  3. Private Sub Workbook_Open()  ' Workbook_Open 是ThisWorkbook 模組的程式碼
  4.     設立陣列
  5. End Sub
  6. Sub 設立陣列()  '在此設立陣列 可供其他程序使用   
  7.     ReDim scl(1 To 3, 1 To 2)
  8.     ReDim edu(1 To 3)
  9.     scl(1, 1) = "初小"
  10.     scl(1, 2) = "小學"
  11.     scl(2, 1) = "初中"
  12.     scl(2, 2) = "國中"
  13.     scl(3, 1) = "大學"
  14.     scl(3, 2) = "專科"
  15.     edu(1) = "小學"
  16.     edu(2) = "中學"
  17.     edu(3) = "大學"
  18. End Sub
  19. Sub Ex()   '執行 "設立陣列" 程序後可執行此程序
  20.     Dim j, k, w, vbtype
  21.     w = "--國中**"
  22.     For j = 1 To UBound(scl)
  23.         For k = 1 To UBound(scl, 2)
  24.            If InStr(w, scl(j, k)) Then vbtype = edu(j): GoTo Define_unit
  25.         Next k
  26.     Next j
  27. Define_unit:
  28.     MsgBox vbtype
  29. End Sub
複製代碼

TOP

回復  小俠客
GBKEE 發表於 2012-8-29 13:08



  嘩!我在網上四處找"excel vba public const array",只能找到1 dimension array的設定方法
原來還有這一招,又學起來了,謝謝版大

TOP

        靜思自在 : 滴水成河。粒米成蘿,勿輕己靈,勿以善小而不為。
返回列表 上一主題