【问题标题】:Excel crashes on workbook.close?Excel 在 workbook.close 上崩溃?
【发布时间】:2018-02-23 16:05:27
【问题描述】:

我有一个 VBA 函数,当我运行它时会导致 excel 崩溃(“Microsoft Excel 已停止工作”),但如果我单步执行编辑器中的每一行,它就可以正常工作。我想使用该功能打开另一个工作簿,更改给定工作表上的切片器,找到一个值,然后关闭新工作簿而不保存它。我的功能如下:

Function ValueLookup()

Dim Check As Boolean
Dim NewBook As Workbook

Check = IsWorkBookOpen("C:\Location\Filename")
If Check = False Then
    Set NewBook = Workbooks.Open("C:\Location\Filename")
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() 取自 Detect whether Excel workbook is already open,似乎没有任何问题)。

似乎尝试关闭新工作簿是导致问题的原因,如果在我运行该功能之前工作簿已打开,则没有问题。调用该函数的子例程通常会在 excel 崩溃之前执行该函数之后的行(打开一个 MsgBox 供用户输入)。我尝试在每行之后添加 Sleep 1000 并在最后一行之后添加 DoEvents ,结果没有变化。我试过改变

NewBook.Close savechanges:= False

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

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

谢谢!

【问题讨论】:

  • 我遇到了我认为可能是类似的问题,并发现在探索了许多其他可能的解决方案之后,我必须重新创建正在打开的工作簿的文件(并在关闭时崩溃)才能解决它.
  • 虽然我不确定是什么导致了问题,但您可以在关闭文件之前尝试 DoEvents。听起来你有某种时间问题。 DoEvents 会将控制权交给操作系统以完成任何待处理的任务。关于使用 DoEvents 有很多争论,但在这里它可能会对您有所帮助。
  • 在关闭前尝试NewBook.Saved = True。也可以在你的Close_Xls() sub 中尝试Workbooks("Filename").Close savechanges:=False
  • @robinCTS 我添加了这两项更改,现在它似乎可以正常工作了,谢谢!
  • 你能不能一次只做一个改变,如果有任何工作可以让我知道吗?

标签: vba excel


【解决方案1】:

Close_Xls() 子更改为以下内容将针对要关闭的正确工作表:

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

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

NewBook.Saved = True

关门前。

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多