启用宏的文件在执行任何操作时会停止工作并崩溃

时间:2019-03-13 14:39:51

标签: excel vba excel-2016

所以这对我来说很奇怪,但是我有一个启用宏的excel 2016文件。文件中唯一的宏是BeforeSave事件,该事件存储在ThisWorkbook中。使用空白文件一次或两次后,它会达到打开文件并执行任何操作(例如单击FileDeveloper或输入数据)的程度,从而导致excel“停止工作”并关闭

下面是BeforeSave事件,它是此文件中唯一的宏(ThisWorkbook中没有模块或用户窗体,其他都没有)。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Application.EnableEvents = False
Cancel = True

ThisWorkbook.Sheets("Pending").Columns(9).NumberFormat = "@"
ActiveWorkbook.Save

Application.EnableEvents = True

End Sub

此基本宏事件将完美运行几次。然后,在文件中包含一些数据之后,下次打开该文件时,就会发生此问题。这是唯一遇到此崩溃的excel文件,我仍然可以使用此宏打开尚没有数据的原始备份文件,这没关系。

我试图在安全模式下打开文件,并且已经安装了所有最新的Microsoft Office更新。

其他人遇到过这样的问题吗?它与BeforeSave事件宏有关吗?

更新: 我将ActiveWorkbook更改为ThisWorkbook。另外,我已经从编辑整个列更改为现在查找最后使用的行,并格式化除标题行之外的范围。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Application.EnableEvents = False
Cancel = True

Dim Lastrow As Integer
Lastrow = ThisWorkbook.Sheets("Pending").Cells(Rows.Count, 9).End(xlUp).Row

ThisWorkbook.Sheets("Pending").Range("I2:I" & Lastrow).NumberFormat = "@"
ThisWorkbook.Save

Application.EnableEvents = True

End Sub

谢谢。

1 个答案:

答案 0 :(得分:0)

正如Zack&GWD在评论中建议的那样,我更新了VBA以将标头行包括在内,并将所有引用都设置为ThisWorkbook,而不是包括ActiveWorkbook。到目前为止,该错误尚未再次发生。如果将来确实发生这种情况,如果无法解决问题,我将发布一个新问题。

以下是更新的代码以供参考:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Application.EnableEvents = False
Cancel = True

Dim Lastrow As Integer
Lastrow = ThisWorkbook.Sheets("Pending").Cells(Rows.Count, 9).End(xlUp).Row

ThisWorkbook.Sheets("Pending").Range("I2:I" & Lastrow).NumberFormat = "@"
ThisWorkbook.Save

Application.EnableEvents = True

End Sub