Excel崩溃在Workbook.close上



i具有一个VBA功能,该功能将在我运行时碰撞Excel(" Microsoft Excel已停止工作"),但是如果我跨越编辑器中的每一行,则可以正常工作。我想打开另一个功能的工作簿,更改给定表上的切片机,找到一个值,然后在不保存的情况下关闭新工作簿。我拥有的功能如下:

Function ValueLookup()
Dim Check As Boolean
Dim NewBook As Workbook
Check = IsWorkBookOpen("C:LocationFilename")
If Check = False Then
    Set NewBook = Workbooks.Open("C:LocationFilename")
Else
    Set NewBook = Workbooks("Filename")
End If
NewBook.Activate
Worksheets("Sheetname").Activate
ActiveSheet.PivotTables("pivottable1")ManualUpdate = True
With ActiveWorkbook.SlicerCaches("Slicer_SlicerName")
    .ClearManualFilter
    .VisibleSlicerItemsList = Array("[Tablename].[Columnname].&[MyValue]")
End With
ActiveSheet.PivotTables("pivottable1").ManualUpdate = False
ValueLookup = ActiveSheet.Cells.Find(What:="*", _
                                     After:=Range("A1"), _
                                     LookAt:=xlPart, _
                                     LookIn:=xlFormulas, _
                                     searchorder:=xlByRows, _
                                     searchdirection:=xlPrevious, _
                                     MatchCase:=False)
If Check = False Then NewBook.Close savechanges:=False
End Function

(isworkbookopen()是从检测中删除Excel Workbook是否已经打开的,并且似乎没有任何问题)。

似乎试图关闭新工作簿是引起问题的原因,如果在我运行功能之前打开了工作簿,则没有问题。调用该函数的子例程通常会在excel崩溃之前直接执行该行(为用户输入打开MSGBOX)。我尝试在每行之后添加睡眠1000,并在最后一行之后添加doevents,而结果没有变化。我尝试更改

NewBook.Close savechanges:= False

to

Application.Windows("NewBook").Close

没有任何区别。我还尝试用

替换结尾
If Check = False Then
    Cancel = True
    Application.OnTime Now, "Close_Xls"
End If
End Function
Sub Close_Xls()
    ThisWorkBook.Close savechanges:=False
End Sub

,这关闭了错误的工作簿(我希望从最初的宏来运行的原始工作簿)完成后。但是,它似乎确实在关闭错误的工作簿之前成功执行了代码,并且不会导致Excel崩溃。

有什么建议?

编辑:

现在似乎没有问题而起作用。我更改了以下内容:

If Check = False Then NewBook.Close savechanges:=False
End Function

to

NewBook.Saved = True
    If Check = False Then
        Cancel = True
        Application.OnTime Now, "Close_Xls"
    End If
End Function
Sub Close_Xls()
    Workbooks("Filename").Close savechanges:=False
End Sub

谢谢!

Close_Xls()子更改为以下将定为关闭的正确表:

Sub Close_Xls()
    Workbooks("Filename").Close savechanges:=False
End Sub

在不保存可能有效的情况下关闭工作簿的另一种方法是使用:

NewBook.Saved = True

关闭之前。

最新更新