標題:
[發問]
將多個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
Sub test()
Dim sht()
Application.ScreenUpdating = False '關閉螢幕更新
fd = ThisWorkbook.Path & "\" '檔案所在目錄
fs = fd & "*.xls"
fb = Dir(fs)
Do Until fb = "" '所有xls檔案迴圈
If fb <> ThisWorkbook.Name Then
With Workbooks.Open(fd & fb)
Set sh = .Sheets(1)
ReDim Preserve sht(s) '記住所有工作表名稱
sht(s) = sh.Name
s = s + 1
sh.Copy after:=ThisWorkbook.Sheets(1) '複製工作表
.Close 0 '關閉檔案
End With
End If
fb = Dir
Loop
Sheets(sht).Move '移動所有複製的工作表到新檔案
Application.ScreenUpdating = True '恢復螢幕更新
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,而要繼續處理就必須清除當前錯誤物件
執行下面程序當可了解錯誤後處理狀態
Sub test1()
For i = 1 To 10
k = Int((2 - 0 + 1) * Rnd + 0)
On Error GoTo AAA '錯誤時跳至
B = i / k '製造錯誤
Next
AAA:
MsgBox "被除數等於=" & i & "除數等於=" & k
Err.Clear
Resume Next
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
程式設計應盡量避免錯誤產生才是正道
Sub test()
Dim sht()
Application.ScreenUpdating = False '關閉螢幕更新
fd = ThisWorkbook.Path & "\" '檔案所在目錄
For Each a In [A1:A5]
fs = fd & a & ".xls"
fb = Dir(fs)
If fb <> "" Then
a.Offset(, 1) = "OK"
With Workbooks.Open(fd & fb)
Set sh = .Sheets(1)
ReDim Preserve sht(s) '記住所有工作表名稱
sht(s) = sh.Name
s = s + 1
sh.Copy after:=ThisWorkbook.Sheets(1) '複製工作表
.Close 0 '關閉檔案
End With
End If
Next
Sheets(sht).Move '移動所有複製的工作表到新檔案
Application.ScreenUpdating = True '恢復螢幕更新
End Sub
複製代碼
作者:
konantw
時間:
2012-4-26 21:56
原來是要這樣才能將檔案併在一起呀
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)