Excel VBA – “Application.DisplayAlerts = False”崩溃Excel

我有一个模块,打开其他4个工作簿,重新格式化一些数据,并将其粘贴到当前工作簿,然后closures其他工作簿。

当我closures其他工作簿时,我得到一个DisplayAlert询问我是否想保存工作簿。 我想停止DisplayAlert出现。

微软的build议是使用:

Application.DisplayAlerts = False ActiveWorkbook.Close Application.DisplayAlerts = True 

但是,当我这样做macros每次崩溃的Excel。

如果我注释掉DisplayAlerts行,那么macros运行正常,除非我必须处理“您要保存吗?” DisplayAlerts。

有任何想法吗?

码:

 Function rngFoundLog(searchDate As Date) Set rngSearchLog = Workbooks("Ecom KPI.xlsm").Worksheets("Daily Update Log").Range("A:A") Set rngFoundLog = rngSearchLog.Find(What:=Sheet1.searchDate, LookIn:=xlValues, LookAt:=xlPart) End Function Function formatHourlies(fileName As String) As Object Dim fullFileName As String fullFileName = ActiveWorkbook.Path & "\Hourlies\" + fileName Workbooks.Open fileName:=fullFileName Workbooks(fileName).Worksheets("Top Line Metrics").Range("B9:H32").Copy Workbooks(fileName).Worksheets("Top Line Metrics").Range("A34").PasteSpecial Transpose:=True Workbooks(fileName).Worksheets("Top Line Metrics_0").Range("B9:H32").Copy Workbooks(fileName).Worksheets("Top Line Metrics").Range("Y34").PasteSpecial Transpose:=True Workbooks(fileName).Worksheets("Top Line Metrics_1").Range("N9:H32").Copy Workbooks(fileName).Worksheets("Top Line Metrics").Range("AW34").PasteSpecial Transpose:=True Workbooks(fileName).Worksheets("Top Line Metrics").Range("A34:BT40").Select Selection.Replace What:="-", Replacement:="0", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False Selection.Copy End Function Sub HourlyData() Application.Calculation = xlManual Application.ScreenUpdating = False 'Application.DisplayAlerts = False Dim proxyServer As String Dim clientID As String Dim report_period As String Dim report_date As String Dim searchDate As Date Sheet1.proxyServer = Worksheets("Update Data").Range("H2").Value Sheet1.proxyStatus = Worksheets("Update Data").Range("H1").Value Sheet1.report_date = Worksheets("Update Data").Range("B2").Value Sheet1.searchDate = Worksheets("Update Data").Range("B3").Value Dim answer As Integer answer = MsgBox("Do you want to import the data?", vbYesNo + vbQuestion, "Import Data?") If answer = vbYes Then Dim StartTime As Double Dim MinutesElapsed As String Dim dateRange As Range StartTime = Timer reportDate = Worksheets("Update Data").Range("B3").Value searchDatev2 = reportDate - 7 Set rngSearch = Worksheets("Business Objects").Range("A:A") Set rngFound = rngSearch.Find(What:=searchDatev2, LookIn:=xlValues, LookAt:=xlPart) Dim fileName As String fileName = "couk Hourlies.xlsx" formatHourlies (fileName) Workbooks("Ecom KPI.xlsm").Worksheets("Hourlies").Range("B" & rngFound.Row).PasteSpecial xlPasteValues Workbooks(fileName).Close fileName = "mcouk Hourlies.xlsx" formatHourlies (fileName) Workbooks("Ecom KPI.xlsm").Worksheets("Hourlies").Range("EQ" & rngFound.Row).PasteSpecial xlPasteValues Workbooks(fileName).Close fileName = "ie Hourlies.xlsx" formatHourlies (fileName) Workbooks("Ecom KPI.xlsm").Worksheets("Hourlies").Range("KF" & rngFound.Row).PasteSpecial xlPasteValues Workbooks(fileName).Close fileName = "mie Hourlies.xlsx" formatHourlies (fileName) Workbooks("Ecom KPI.xlsm").Worksheets("Hourlies").Range("PU" & rngFound.Row).PasteSpecial xlPasteValues Workbooks(fileName).Close Workbooks("Ecom KPI.xlsm").Worksheets("Daily Update Log").Range("T" & rngFoundLog(Sheet1.searchDate).Row).Value = Application.UserName MinutesElapsed = format((Timer - StartTime) / 86400, "hh:mm:ss") MsgBox "Data Import Completed in " & MinutesElapsed Else 'do nothing End If Application.ScreenUpdating = True Application.Calculation = xlAutomatic 'Application.DisplayAlerts = True End Sub 

我不会尝试closures活动工作簿,但设置工作簿并closures它:

 Sub closeWorkbook() Dim workbookToClose As Workbook Application.DisplayAlerts = False Set workbookToClose = Workbooks("WorkbookToClose.xls") workbookClose.Close Application.DisplayAlerts = True End Sub 

如果您不想保存数据,请尝试使用ActiveWorkbook.Close False 。 这将closures工作簿而不保存(不提示),也不使用DisplayAlerts行。 您还可以将活动工作簿设置为所需的任何工作簿名称。

你可以离开DisplayAlerts,但对于你想closures的工作簿设置保存的标志…

例如,就在您closuresSomeworkbook之前:

 Someworkbook.Saved = true 

这应该停止消息框要求您保存…

希望有帮助..

这发生在我身上,我意识到这是因为我打开了VBA编辑器。 当我closuresVBA编辑器,然后运行macros,Excel没有崩溃。