Board logo

標題: [發問] 請教 Combobox 字串判斷 [打印本頁]

作者: mark15jill    時間: 2012-11-2 09:41     標題: 請教 Combobox 字串判斷

本帖最後由 mark15jill 於 2012-11-2 09:50 編輯

如題。
Q1若 Combobox1  讀取 資料夾內半不規則 的檔案名稱,請問要怎在 Combobox1 判斷不重複,並且在Combobox2篩選
例如
C:\imagelist_test\          內有以下檔案
099年度-01-001.jpg  ~  099年度-01-n.jpg  (n 為不定值整數,如 001 002 003 等等之類 )
099年度-02-001.jpg  ~  099年度-02-n.jpg  (n 為不定值整數,如 001 002 003 等等之類 )
099年度-03-001.jpg  ~  099年度-03-n.jpg  (n 為不定值整數,如 001 002 003 等等之類 )
099年度-04-001.jpg  ~  099年度-04-n.jpg  (n 為不定值整數,如 001 002 003 等等之類 )

在Combobox1 內已讀取 以上檔案:
099年度-01-001.jpg
099年度-01-002.jpg
099年度-01-003.jpg
099年度-01-004.jpg
099年度-02-001.jpg
099年度-02-002.jpg
099年度-02-003.jpg
099年度-02-004.jpg
099年度-03-001.jpg
099年度-03-002.jpg
099年度-03-003.jpg
099年度-03-004.jpg
099年度-04-001.jpg
099年度-04-002.jpg
099年度-04-003.jpg
099年度-04-004.jpg

要怎變成         
Combobox1讀取                       Combobox2(若選擇 099年度-01時候)
099年度-01                        099年度-01-001.jpg
099年度-02                        099年度-01-002.jpg
099年度-03                        099年度-01-003.jpg
099年度-04                        099年度-01-004.jpg
  1. '相關程式碼
  2. Private Sub cmdReadFileName_Click()
  3.     Dim strNowPath As String   '儲存目前檔案目錄
  4.     Dim strFileName As String   '讀取到的檔案名稱
  5.     Dim strFileExt As String    '檔案副檔名
  6.    

  7.     strNowPath = Range("B1")   '如果有設定以設定為主
  8.    
  9.     strFileExt = Range("b2")   '查詢檔案類型
  10.    
  11.     If Trim(strNowPath) = "" Then
  12.        strNowPath = Excel.ActiveWorkbook.Path
  13.     End If
  14.    
  15.    
  16.     n = 0
  17.    
  18.     Sheet3.Cells.Delete  '將之前的結果清除
  19.    
  20.     If Right(strNowPath, 1) = "\" Then
  21.         strFileName = Dir(strNowPath & strFileExt, vbDirectory)
  22.         strFileNameTime = strNowPath
  23.     Else
  24.         strFileName = Dir(strNowPath & "\" & strFileExt, vbDirectory)
  25.         strFileNameTime = strNowPath & "\"
  26.     End If
  27.    
  28.     While strFileName <> ""
  29.         If strFileName <> ActiveWorkbook.Name Then '這個檔案不要顯示
  30.             If strFileName <> "." And strFileName <> ".." Then
  31.                 n = n + 1
  32.                 Sheet3.Cells(n, 1).Value = n
  33.                 Sheet3.Cells(n, 2).Value = strFileName
  34.             End If
  35.         End If
  36.         strFileName = Dir() '讀取下一個檔案
  37.         'strFileNameTime = FileDateTime()
  38.     Wend
  39.    
  40.    
  41.     Exit Sub

  42. End Sub
複製代碼
Q2-1
若檔案名稱前段後段無規則,那要怎區分?
099年度-01月-x2x4sa1.jpg
099年度-10-x2x4se4.jpg
Q2-2
若檔案名稱前段後段無規則,那要怎區分?(若以-為分界點)
099年度-01月-x2x4sa1.jpg
099年度-10-x2x4se4.jpg
作者: GBKEE    時間: 2012-11-2 18:02

本帖最後由 GBKEE 於 2012-11-2 18:05 編輯

回復 1# mark15jill
若檔案名稱前段後段無規則,那要怎區分?(若以-為分界點) 就是以 - 為分界點
099年度-01月-x2x4sa1.jpg    099年度-10-x2x4se4.jpg

試試看
表單 有ComboBox1,ComboBox2
  1. Option Explicit
  2. Dim xlpath
  3. Private Sub ComboBox1_Change()
  4.     If ComboBox1.ListIndex > -1 Then Combobox2檔案
  5. End Sub
  6. Private Sub UserForm_Initialize()
  7.     xlpath = "C:\imagelist_test\"
  8.     Combobox1檔案
  9. End Sub
  10. Sub Combobox1檔案()
  11.     Dim xF As String, x, Ar(), xi As Integer
  12.     xF = Dir(xlpath & "*-*-*.JPG")
  13.     Do While xF <> ""
  14.         x = Split(xF, "-")(0) & "-" & Split(xF, "-")(1)
  15.         If xi = 0 Then
  16.             ReDim Preserve Ar(xi)
  17.             Ar(xi) = x
  18.             xi = xi + 1
  19.         ElseIf UBound(Filter(Ar, x, True)) Then
  20.             ReDim Preserve Ar(xi)
  21.             Ar(xi) = x
  22.             xi = xi + 1
  23.         End If
  24.         xF = Dir
  25.     Loop
  26.     If xi > 0 Then Me.ComboBox1.List = Ar
  27. End Sub
  28. Sub Combobox2檔案()
  29.     Dim xF As String
  30.     ComboBox2.Clear
  31.     xF = Dir(xlpath & ComboBox1 & "*.JPG")
  32.     Do While xF <> ""
  33.         ComboBox2.AddItem xF
  34.         xF = Dir
  35.     Loop
  36. End Sub
複製代碼

作者: mark15jill    時間: 2012-11-5 09:20

回復 2# GBKEE

感謝大大的教導。
抱歉 這幾天在忙沒上線 今天才看到,等等來去試驗 謝謝




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)