У меня есть макрос, который объединяет несколько рабочих книг в один консолидированный файл. Первоначально это было копирование и вставка, но я изменил его, думая, что копирование и вставка были слишком тяжелыми для компьютера и приводили к тому, что он создавал sh. После успешной реализации изменений макрос продолжает давать сбой после циклического прохождения около 50-й книги. Любое понимание того, почему мой Excel аварийно завершает работу (закрывается и открывается) с использованием этого макроса, очень ценится.
Примечание. Этот макрос работает на компьютере-партнере, использующем Excel 2010
Dim TargetFolder As String, TargetFile As String
Dim wsConsol As Worksheet
Dim CopyLastRow As Long, DestLastRow As Long
Dim TranRange As Variant
'Sets the name of the wsConsol file, if required
Set wsConsol = Workbooks("Consolidation File.xlsm").Worksheets("Raw Data")
'Opens a file dialog box for user to select a folder
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
TargetFolder = .SelectedItems(1)
Err.Clear
End With
'stops screen updating, calculations, events, and status bar updates to help code run faster
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.CutCopyMode = False
'This section will loop through and open each file in the folder you selected
'and then close that file before opening the next file
TargetFile = Dir(TargetFolder & "\", vbReadOnly)
Do While TargetFile <> ""
DoEvents
On Error GoTo 0
Workbooks.Open Filename:=TargetFolder & "\" & TargetFile, UpdateLinks:=False
''''''''''''START CODE HERE TO DO SOMETHING'''''''''
'Find the last row in the wsConsol file
DestLastRow = wsConsol.Cells(wsConsol.Rows.Count, "A").End(xlUp).Offset(1).Row
wsConsol.Range("A" & DestLastRow).Value = Workbooks(TargetFile).Worksheets("Summary").Range("B22:B22").Value
wsConsol.Range("AD" & DestLastRow).Value = Workbooks(TargetFile).Worksheets("Summary").Range("B17:B17").Value
wsConsol.Range("B" & DestLastRow).Value = Workbooks(TargetFile).Worksheets("Summary").Range("B20:B20").Value
TranRange = Workbooks(TargetFile).Worksheets("Summary").Range("D25:L25").Value
TranRange = Application.WorksheetFunction.Transpose(TranRange)
wsConsol.Range("C" & DestLastRow & ":K" & DestLastRow).Value = TranRange
TranRange = Workbooks(TargetFile).Worksheets("Summary").Range("F17:F22").Value
TranRange = Application.WorksheetFunction.Transpose(TranRange)
wsConsol.Range("L" & DestLastRow & ":Q" & DestLastRow).Value = TranRange
TranRange = Workbooks(TargetFile).Worksheets("Summary").Range("G17:G22").Value
TranRange = Application.WorksheetFunction.Transpose(TranRange)
wsConsol.Range("R" & DestLastRow & ":W" & DestLastRow).Value = TranRange
TranRange = Workbooks(TargetFile).Worksheets("Summary").Range("H17:H22").Value
TranRange = Application.WorksheetFunction.Transpose(TranRange)
wsConsol.Range("X" & DestLastRow & ":AD" & DestLastRow).Value = TranRange
''''''''''''END CODE HERE THAT DID SOMETHING'''''''''
'Close TargetFile Workbook
Workbooks(TargetFile).Close SaveChanges:=False
TargetFile = Dir
Loop
'turns settings back on that you turned off before looping folders
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
Application.Calculation = xlCalculationManual
End Sub