Board logo

標題: [發問] 搜尋某資料夾中檔案的數量,每增加一筆資料就收錄進來 [打印本頁]

作者: sweetkitty    時間: 2012-7-18 17:49     標題: 搜尋某資料夾中檔案的數量,每增加一筆資料就收錄進來

某個軟體每秒在"D:\raw data\"資料夾中儲存一個Excel檔案
檔案名稱依序從 ResultsFile1、ResultsFile2、ResultsFile3、....、ResultsFile10、ResultsFile11、...
我想要建一個"Record.xls"  叫他自動偵測這個資料夾是否有新的Excel檔進來
每當有新檔案就把他打開存取Cells(2,3)的值進入"Record.xls" 中
請問該如何寫VBA叫他自動偵測?
感謝
作者: Hsieh    時間: 2012-7-19 00:00

本帖最後由 Hsieh 於 2012-7-20 09:20 編輯

回復 1# sweetkitty
或許還有其他辦法(如開通DDE通道)
比較不花腦筋的作法
利用ONTIME方法,每秒去跑資料夾內的檔案名稱
然後記錄在A、B欄內,就能判斷是否有新增檔案
一般模組
  1. Sub auto_open()
  2. fd = "D:\raw data\" '資料夾
  3. fs = Dir(fd & "*.xls")
  4. Set sht = ThisWorkbook.Sheets(1)
  5. Do Until fs = ""
  6. If IsError(Application.Match(fs, sht.Columns("A"), 0)) Then
  7. With Workbooks.Open(fd & fs)
  8. sht.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 2) = Array(fs, .Sheets(1).Cells(2, 3).Value)
  9. .Close 0
  10. End With
  11. End If
  12. fs = Dir
  13. Loop
  14. Application.OnTime Now + TimeValue("00:00:01"), "auto_open"
  15. End Sub
複製代碼

作者: hugh0620    時間: 2012-7-19 10:42

回復 2# Hsieh


    H大大~ 這樣的方式~
   不是也一定要打開excel才能夠自動去搜尋嘛??
作者: sweetkitty    時間: 2012-7-19 15:53

回復 2# Hsieh
感謝H大回答,不過我執行的時候出現"無法執行巨集"的視窗
Loop之前的動作都執行完畢了,是最後一行Application沒辦法做
請問有什麼我沒注意的地方嗎?
謝謝!!
作者: sweetkitty    時間: 2012-7-24 16:22

本帖最後由 sweetkitty 於 2012-7-24 17:15 編輯

回復 2# Hsieh

感謝H大大!  我發現把程式碼放在"模組"裡面就可以執行了
另外我修改成我要的樣子,發現您原來的程式碼跑會自動抓"有新增的檔案"取值
但我的程式碼會一直不斷的從第一個檔案開始repeat
請問是哪個程式碼沒改到呢?
感謝
  1. Sub 自動整理資料()

  2. fd = "D:\Wayne\" '資料夾
  3. fs = Dir(fd & "ResultsFile*")
  4. Set sht = ThisWorkbook.Sheets(2)
  5. Do Until fs = ""
  6. If IsError(Application.Match(fs, sht.Columns("A"), 0)) Then
  7. With Workbooks.Open(fd & fs)
  8. sht.Cells(Rows.Count, 1).End(xlUp).Offset(1) = Mid(Workbooks(fs).Name, 12)
  9. sht.Cells(Rows.Count, j * 2).End(xlUp).Offset(1) = Workbooks(fs).Sheets(1).Cells(23, j * 2 + 1).Value
  10. .Close 0
  11. End With
  12. End If
  13. fs = Dir
  14. Loop

  15. Application.OnTime Now + TimeValue("00:00:01"), "自動整理資料"

  16. End Sub
複製代碼

作者: sweetkitty    時間: 2012-7-24 17:17

回復 5# sweetkitty

我發現把上面那個程式碼的第9行改成以下這樣,就不會發生重複填入資料的狀況了
  1.         sht.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 2) = Array(fs, .Sheets(1).Cells(2, 3).Value)
複製代碼
但是我還是不太明白原理,希望可以解惑
感謝




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