Ich habe ein Modul, das 4 andere Arbeitsmappen öffnet, formatiert einige der Daten und fügt sie in die aktuelle Arbeitsmappe und schließt dann die anderen Arbeitsmappen.Excel VBA - "Application.DisplayAlerts = False" Absturz Excel
Wenn ich die anderen Arbeitsmappen schließe, bekomme ich ein DisplayAlert, das mich fragt, ob ich die Arbeitsmappe speichern möchte. Ich möchte den DisplayAlert stoppen.
Die Empfehlung von Microsoft zu verwenden:
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
Jedoch, wenn ich dies tun, das Makro stürzt Excel jedes Mal.
Wenn ich die DisplayAlerts Zeilen auskommentieren, läuft das Makro gut, außer ich muss mit dem "Möchten Sie speichern?" DisplayAlerts.
Irgendwelche Ideen?
Code:
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
Meiner Erfahrung nach machen Aufrufmethoden wie 'Workbooks.Open' innerhalb einer' Funktion' VBA instabil. Erwägen Sie stattdessen, diese Methoden innerhalb eines "Sub" aufzurufen. – xidgel
@xidgel Sind Sie sicher? Wenn Sie nicht versuchen, die Funktion von einem Arbeitsblatt aus als UDF aufzurufen, sollen Sie alles tun, was ein Sub tut, und mehr. Fehle ich hier etwas? – vacip
@vacip Du hast Recht --- Danke, dass du meinen Fehler gefunden hast. – xidgel