我避免與多個工作簿就像是一個痛苦的瘟疫工作,如果這是一個正在進行的要求,那麼我會建議看回您的工作簿的設計,看是否可以合併回一個工作簿。我經常看到每個月都保存的工作簿,他們應該有一張工作簿,每張工作簿包含原始數據(其中每行代表一個月份),然後是另一張用於查看用戶選擇的原始數據的顯示工作表。這是一個非常大的概括,你可能會處於完全不同的情況。
如果一次過 - 我知道它不是你想要的,但我認爲你會通過使用VBA的工作簿最好的循環。喜歡的東西(未經測試):
Excel 2003中:
Sub AdjustMultipleFiles()
Dim lCount As Long
Dim wbLoopBook As Workbook
Dim wsLoopSheet As Worksheet
With Application
.ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False
End With
With Application.FileSearch
.NewSearch
'// Change path to suit
.LookIn = "C:\MyDocuments"
'// ALL Excel files
.FileType = msoFileTypeExcelWorkbooks
'// Uncomment if file naming convention needed
'.Filename = "Book*.xls"
'// Check for workbooks
If .Execute > 0 Then
'// Loop through all.
For lCount = 1 To .FoundFiles.Count
'// Open Workbook x and Set a Workbook variable to it
Set wbLoopBook = Workbooks.Open(Filename:=.FoundFiles(lCount), UpdateLinks:=0)
'// Loop through all worksheets
For Each wsLoopSheet In wbLoopBook.Worksheets
'//Update your worksheets here...
Next wsLoopSheet
'// Close Workbook & Save
wbLoopBook.Close SaveChanges:=True
'// Release object variable
Set wbLoopBook = Nothing
Next lCount
End If
End With
With Application
.ScreenUpdating = True: .DisplayAlerts = True: .EnableEvents = True
End With
End Sub
對於Excel 2007+:
Sub AdjustMultipleFiles()
Dim sFileName As String
Dim wbLoopBook As Workbook
Dim wsLoopSheet As Worksheet
With Application
.ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False
End With
'// Change path to suit
ChDir "C:\Documents"
'// ALL Excel 2007 files
sFileName = Dir("*.xlsx")
Do While sFileName <> ""
'// Open Workbook x and Set a Workbook variable to it
Set wbLoopBook = Workbooks.Open(Filename:=sFileName, UpdateLinks:=0)
'// Loop through all worksheets
For Each wsLoopSheet In wbLoopBook.Worksheets
'//Update your worksheets here...
Next wsLoopSheet
'// Close Workbook & Save
wbLoopBook.Close SaveChanges:=True
'// Release object variable
Set wbLoopBook = Nothing
'//Next File
sFileName = Dir
'//End Loop
Loop
With Application
.ScreenUpdating = True: .DisplayAlerts = True: .EnableEvents = True
End With
End Sub
Excel 2007中+(FileSystemObject的 - LateBinding)
Sub AdjustMultipleFiles()
Dim wbLoopBook As Workbook
Dim wsLoopSheet As Worksheet
With Application
.ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False
End With
With CreateObject("Scripting.FileSystemObject")
'// Change path to suit
For Each File In .GetFolder("C:\Documents").Files
'// ALL Excel 2007 files
If .GetExtensionName(File) = "xlsx" Then
'// Open Workbook x and Set a Workbook variable to it
Set wbLoopBook = Workbooks.Open(Filename:=File.Path, UpdateLinks:=0)
'// Loop through all worksheets
For Each wsLoopSheet In wbLoopBook.Worksheets
'//Update your worksheets here...
Next wsLoopSheet
'// Close Workbook & Save
wbLoopBook.Close SaveChanges:=True
'// Release object variable
Set wbLoopBook = Nothing
End If
Next File
End With
With Application
.ScreenUpdating = True: .DisplayAlerts = True: .EnableEvents = True
End With
End Sub
你或許應該考慮自動化Excel做到這一點:你可以使用VBA或Python如果你更舒服。大多數在那裏循環遍歷目錄中的文件的例子將在VBA中,儘管... – 2011-06-14 18:22:50
這不是VBA是用於*的嗎? – 2011-06-14 18:59:34
你甚至可以記錄你需要的大部分宏,然後整理它們。 – Fionnuala 2011-06-14 20:06:49