Board logo

標題: [發問] 將多個EXCEL 匯到一個EXCEL的問題 [打印本頁]

作者: yanto913    時間: 2012-4-14 08:51     標題: 將多個EXCEL 匯到一個EXCEL的問題

本帖最後由 yanto913 於 2012-4-14 10:30 編輯

請見附檔
將檔案放到C:\槽

此資料夾內有五個EXCEL分別是1.xls~5.xls
執行all.xls匯入1.xls~5.xls
現況是沒問題

但是我想請教的是如果中間有缺檔會產生錯誤(假設缺1.xls, 3.xls, 4.xls)
查閱網站有說要用on error goto
但是錯誤好像只能跳過一次,第二次還是會出現錯誤

另外轉出時也會出現問題
因為我不會判斷陣列為從第二個sheet(2)~最後一個匯出

懇請各位先進賜教   謝謝
作者: LeafYeung    時間: 2012-4-14 09:05

回復 1# yanto913

可否把 on error goto 改成 on error resume next 試試看?
作者: yanto913    時間: 2012-4-14 09:30

回復 2# LeafYeung


抱歉,我試不出來耶!!
on error resume next
應該放在哪裡呢??
作者: LeafYeung    時間: 2012-4-14 09:41

回復 3# yanto913

我不能下載你的 file~~ 這裡有個 On Error 用法 的例子...你可以看看.....(ref. " followme excel 2007 vba")

Sub On_Error_用法1()
    Dim StBase As String, myInc As Integer
    Dim mySheet As Worksheet
   
    Set mySheet = Worksheets.Add
    StBase = "測試"
    myInc = 1
'   On Error Resume Next
    mySheet.Name = StBase & myInc
    Do Until Err.Number = 0
        Err.Clear
        myInc = myInc + 1
        mySheet.Name = StBase & myInc
    Loop
End Sub
作者: yanto913    時間: 2012-4-14 10:20

回復 4# LeafYeung


    on error resume next 剛剛用了一下,可以用
但用了變成全部忽略
但我是比較想要如果錯誤跳到某行執行所以才想用on error go to
但是變成執行第二次錯誤就無法跳過錯誤了
作者: LeafYeung    時間: 2012-4-14 10:30

回復 5# yanto913


可否 email 給我看看... [email protected]   

謝謝...
作者: Hsieh    時間: 2012-4-14 10:41

回復 1# yanto913
  1. Sub test()
  2. Dim sht()
  3. Application.ScreenUpdating = False '關閉螢幕更新
  4. fd = ThisWorkbook.Path & "\" '檔案所在目錄
  5. fs = fd & "*.xls"
  6. fb = Dir(fs)
  7. Do Until fb = "" '所有xls檔案迴圈
  8. If fb <> ThisWorkbook.Name Then
  9. With Workbooks.Open(fd & fb)
  10.    Set sh = .Sheets(1)
  11.    ReDim Preserve sht(s) '記住所有工作表名稱
  12.    sht(s) = sh.Name
  13.    s = s + 1
  14.    sh.Copy after:=ThisWorkbook.Sheets(1) '複製工作表
  15.    .Close 0 '關閉檔案
  16. End With
  17. End If
  18. fb = Dir
  19. Loop
  20. Sheets(sht).Move '移動所有複製的工作表到新檔案
  21. Application.ScreenUpdating = True '恢復螢幕更新
  22. End Su
複製代碼

作者: yanto913    時間: 2012-4-14 12:23

回復 7# Hsieh




    謝謝Hsieh 版主

請問如果我只想要把sheets("all")中A1~A5為檔名去搜尋xls
而且搜尋到的在sheets("all")中B1~B5標示"OK"該如何做呢?
作者: Hsieh    時間: 2012-4-14 12:35

回復 8# yanto913


    看你A1:A5的檔名樣式為何?是否包含資料夾目錄或副檔名
不同資料有不同處理方式,以樓上的程式碼去加判斷式應該不是很難的
作者: LeafYeung    時間: 2012-4-14 13:54

回復 9# Hsieh

Hsieh 版主
請問以下程序在執行第二次 on error goto 時 為何會出現 error 呢??

Sub test1()
For i = 1 To 10
On Error GoTo AAA '錯誤時跳至
B = i / 0 '製造錯誤
AAA:
On Error GoTo 0
Next
End Sub

當 i=1時就可行,但當i=2時就 error
煩請教導~~謝謝
作者: Hsieh    時間: 2012-4-14 14:29

回復 10# LeafYeung
On Error 陳述式
一個「啟動的」錯誤處理程式是由 On Error 陳述式所打開的;一個「動作中」的錯誤處理程式是一個已啟動的錯誤處理程式正在處理錯誤。如果錯誤處理程式在動作中又發生了錯誤,(在錯誤發生和 Resume,Exit Sub,Exit Function,或 Exit Property 陳述式之間),那麼現在此程序的錯誤處理程式將無法再處理此錯誤。
所以,要處理可能產生多次錯誤的程序,必須是Resume Next,而要繼續處理就必須清除當前錯誤物件
執行下面程序當可了解錯誤後處理狀態
  1. Sub test1()
  2. For i = 1 To 10
  3. k = Int((2 - 0 + 1) * Rnd + 0)
  4. On Error GoTo AAA '錯誤時跳至
  5. B = i / k '製造錯誤
  6. Next
  7. AAA:
  8. MsgBox "被除數等於=" & i & "除數等於=" & k
  9. Err.Clear
  10. Resume Next
  11. End Sub
複製代碼

作者: LeafYeung    時間: 2012-4-14 15:21

回復 10# LeafYeung

明白了.....謝謝 Hsieh 的指導
作者: yanto913    時間: 2012-4-14 16:50

回復 9# Hsieh


    謝謝Hsieh 版主

我的附檔內A1~A5分別為1~5數字,當A1儲存格的1有找到1.xls則B1顯示"OK"
但因我仍卡在的問題是用on error resume next會全部忽略錯誤,導致B1~B5全部顯示都"OK"
作者: Hsieh    時間: 2012-4-14 16:57

回復 13# yanto913

程式設計應盡量避免錯誤產生才是正道
  1. Sub test()
  2. Dim sht()
  3. Application.ScreenUpdating = False '關閉螢幕更新
  4. fd = ThisWorkbook.Path & "\" '檔案所在目錄
  5. For Each a In [A1:A5]
  6. fs = fd & a & ".xls"
  7. fb = Dir(fs)
  8. If fb <> "" Then
  9. a.Offset(, 1) = "OK"
  10. With Workbooks.Open(fd & fb)
  11.    Set sh = .Sheets(1)
  12.    ReDim Preserve sht(s) '記住所有工作表名稱
  13.    sht(s) = sh.Name
  14.    s = s + 1
  15.    sh.Copy after:=ThisWorkbook.Sheets(1) '複製工作表
  16.    .Close 0 '關閉檔案
  17. End With
  18. End If
  19. Next
  20. Sheets(sht).Move '移動所有複製的工作表到新檔案
  21. Application.ScreenUpdating = True '恢復螢幕更新
  22. End Sub
複製代碼

作者: konantw    時間: 2012-4-26 21:56

原來是要這樣才能將檔案併在一起呀




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