Я написал небольшой фрагмент кода, который копирует диаграммы из различных временных рабочих книг и объединяет их в отдельный файл.
Фактический процесс манипуляции, показанный ниже, работает нормально, и файл результатов генерируется, как и ожидалось. Однако у меня возникают проблемы после попытки закрыть рабочую книгу (workbook.close) или сохранить файл результатов (workbook.save) ближе к концу при сбое Excel.
Я поставил DoEvents с каждой стороны каждого оператора, чтобы попытаться дать Excel превосходить себя, но безрезультатно!
Я также пытался отключить надстройки COM, но, похоже, это не помогло.
Есть идеи, почему это может быть сбой?
Заранее большое спасибо !!
Sub CompareResults()
Dim wkbAll As Workbook
Dim FilesToOpen
Dim x As Integer
Dim wkbTemp As Workbook
Dim wkbAllname As Variant
Dim wkbfirst As Workbook
Dim nofiles As Integer
Dim seriesname As String
'Create the new workbook
Workbooks.Add
Set wkbAll = ActiveWorkbook
'Select which files to merge
FilesToOpen = Application.GetOpenFilename(fileFilter:="Excel Files (*.xlsx), *.xlsx", MultiSelect:=True, Title:="Arbin Results Files")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "No Files were selected"
End If
'How many files?
nofiles = UBound(FilesToOpen)
'Set up the first graphs
Set wkbfirst = Workbooks.Open(filename:=FilesToOpen(1))
Set wkbfirst = ActiveWorkbook
ActiveSheet.Shapes.Range(Array("ESR", "GravCap", "VolCap", "ActGravCap", "CapRet", "DisTime")).Select
Selection.Copy
wkbAll.Activate
Range("A1").Select
ActiveSheet.Paste
'Copy each set of graphs to wkball
x = 2
While x <= UBound(FilesToOpen)
Set wkbTemp = Workbooks.Open(filename:=FilesToOpen(x))
Set wkbTemp = ActiveWorkbook
Set wkbTemp = wkbTemp
wkbTemp.Activate
'Copy ESR Graph
ActiveSheet.ChartObjects("ESR").Activate
ActiveChart.ChartArea.Copy
wkbAll.Activate
ActiveSheet.ChartObjects("ESR").Activate
ActiveChart.Paste
wkbTemp.Activate
'Copy GravCap Graph
ActiveSheet.ChartObjects("GravCap").Activate
ActiveChart.ChartArea.Copy
wkbAll.Activate
ActiveSheet.ChartObjects("GravCap").Activate
ActiveChart.Paste
wkbTemp.Activate
'Copy ActGrav Graph
ActiveSheet.ChartObjects("ActGravCap").Activate
ActiveChart.ChartArea.Copy
wkbAll.Activate
ActiveSheet.ChartObjects("ActGravCap").Activate
ActiveChart.Paste
wkbTemp.Activate
'Copy VolCap Graph
ActiveSheet.ChartObjects("VolCap").Activate
ActiveChart.ChartArea.Copy
wkbAll.Activate
ActiveSheet.ChartObjects("VolCap").Activate
ActiveChart.Paste
wkbTemp.Activate
'Copy CapRet Graph
ActiveSheet.ChartObjects("CapRet").Activate
ActiveChart.ChartArea.Copy
wkbAll.Activate
ActiveSheet.ChartObjects("CapRet").Activate
ActiveChart.Paste
wkbTemp.Activate
'Copy DisTime Graph
ActiveSheet.ChartObjects("DisTime").Activate
ActiveChart.ChartArea.Copy
wkbAll.Activate
ActiveSheet.ChartObjects("DisTime").Activate
ActiveChart.Paste
DoEvents
wkbTemp.Close (False)
DoEvents
x = x + 1
Wend
DoEvents
'Save the merged File
wkbAllname = Application.GetSaveAsFilename("merged", fileFilter:="microsoft
excel files (*.xlsx), *.xlsx")
If wkbAllname <> False Then
MsgBox "File Saved as " & wkbAllname
Else: End
End If
DoEvents
wkbAll.SaveAs wkbAllname
DoEvents
End Sub