Сбой Excel во время workbook.save или workbook.close - PullRequest
0 голосов
/ 16 января 2019

Я написал небольшой фрагмент кода, который копирует диаграммы из различных временных рабочих книг и объединяет их в отдельный файл.

Фактический процесс манипуляции, показанный ниже, работает нормально, и файл результатов генерируется, как и ожидалось. Однако у меня возникают проблемы после попытки закрыть рабочую книгу (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...