2020年11月4日 星期三

EXCEL VBA 關鍵字找檔案名稱

 EXCEL 內建相當多檔案物件與函數可以使用,函數部分最常用的是DIR這個函數,在DOS的年代這個指令是用來列印出目前該目錄內的檔案清單,其實DOS'S DIR與EXCEL的DIR很像!!

不過EXCEL是取得檔案名稱。基本操作參考MSDN:DIR

回歸主題,先把標題變成問題:

如果我們要搜尋關鍵字找檔案名稱應該怎做?

再延伸:如果我們要搜尋關鍵字找檔案名稱應該怎做,又可以防呆?

再延伸一次:如果我們要搜尋多關鍵字找檔案名稱應該怎做,然後又可以防呆?

(把問題想三次,比較好聚焦)

如果我們要搜尋關鍵字找檔案名稱應該怎做?

例如要搜尋2330台積電的EXCEL檔案。

語法:DIR("路徑\2330.xlsm")

Private Sub CommandButton1_Click()

    a = Dir("X:\股票\2330.xlsm")

End Sub

解說:如果有找到則A變數會儲存2330.xlsm的字串資料。

續:

如果我們要搜尋關鍵字找檔案名稱應該怎做,又可以防呆?

試想防呆這情況,為何需要防呆??若以上敘語法有需要其實是不需要的歐,

因為都指定檔案名稱跟副檔名了;反之當僅知道關鍵字時,

例如僅知道2330,則我們需要多一道手續來防呆避免抓錯檔案。

使用INSTR來檢查有無含有指定關鍵字。

類似這樣子:

IF INSTR(FILENAME,"2330")>0 THEN 

END IF 

所以合併一下:

Private Sub CommandButton1_Click()

    a = Dir("X:\股票\2330*.*")

IF INSTR(A,"2330")>0 THEN 

  MSGBOX  "找到了 " & A

END IF 

End Sub

可以加上迴圈作多檔案名稱檢查:

Private Sub CommandButton1_Click()

    a = Dir("X:\股票\*2330*.*")

Do while a<>""

 IF INSTR(A,"2330")>0 THEN    

MSGBOX  "找到了 " & A

END IF 

a = Dir("X:\股票\2330*.*") 

loop 

End Sub

再延伸一次:如果我們要搜尋多關鍵字找檔案名稱應該怎做,然後又可以防呆?

發想:

結合兩個迴圈做不同關鍵字檢查,檢查無誤則把正確檔案明確留下。

Private Sub CommandButton1_Click()

I=1  

  a = Dir("X:\股票\*" & ACTIVESHEET.RANGE("A" & I ).VALUE & "*.*")

Do while a<>""

ACTIVESHEET.RANGE("B" & I )=A '先列出檔名

        J=1 

Do while ACTIVESHEET.RANGE("B" & J) <>""

        IF  INSTR(ACTIVESHEET.RANGE("B" & I).VALUE,

ACTIVESHEET.RANGE("A" & I ).VALUE)=0 THEN 

                   ACTIVESHEET.RANGE("B" & I ).VALUE=""

                 END IF 

J=J+1 

loop 

           I=I+1 

          a = Dir("X:\股票\*" & ACTIVESHEET.RANGE("A" & I ).VALUE & "*.*")

loop

End Sub




沒有留言:

張貼留言

我的雷達:20240506

自己紀錄給自己看。 在大跌1400多點後,拉回中。 雷達顯示遠離風險區但離前一個底(大盤高點也不遠了)