Ich verwende den folgenden Code, um eine aktualisierte Arbeitsmappe zu speichern.Laufzeitfehler '1004': SaveAs Methode des Objekts '_Workbook ist fehlgeschlagen
Private Sub cmdSaveUpdatedWB_Click()
On Error GoTo Err_cmdSaveUpdatedWB_Click
gwbTarget.Activate <<<<<<<<<<<<<<<<<<<<<<<
Application.DisplayAlerts = False
gwbTarget.SaveAs txtUpdWorkbookName.Value, FileFormat:=xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = False
frmLoanWBMain.Show
gwbTarget.Close
Set gwbTarget = Nothing
gWBPath = ""
gWBName = ""
lblWorkbookSaved.Enabled = True
cmdUpdateAnotherWorkbook.Visible = True
Exit_cmdSaveUpdatedWB_Click:
Exit Sub
Err_cmdSaveUpdatedWB_Click:
MsgBox "The following error occurred inthe [cmdSaveUpdateWB_Click] event handler." & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & "Error descriptioin: " & Err.Description
Resume Exit_cmdSaveUpdatedWB_Click
End Sub
Wie im Titel erwähnt, schlägt der SaveAs-Vorgang fehl. Ich habe festgestellt, dass der Fehler darauf zurückzuführen ist, dass die zu speichernde Arbeitsmappe den Fokus verliert. Ich kann durch den Code gehen und den Fehler erhalten. Nachdem der Fehler generiert wurde, wird durch Auswahl von Debug in der Fehlernachricht und anschließendes Drücken von F5 zum Ausführen des Codes die Arbeitsmappe ordnungsgemäß gespeichert. Das Platzieren von Debug.Print-Anweisungen vor und nach der Activate-Methode des zu speichernden Worbooks zeigt an, dass das aktive Wokbook die Arbeitsmappe mit dem Code und dem Formular zum Aktualisieren der Arbeitsmappe ist. Durch das Einfügen einer print-Anweisung in das Immediate-Fenster, die das ActiveWorkbook.Name-Objekt druckt, wird der Name der zu speichernden Arbeitsmappe ausgegeben - gwbTarget.Name. Durch Drücken von F5 wird der Code korrekt ausgeführt. Ich konnte nicht herausfinden, warum die zu speichernde Arbeitsmappe den Fokus verliert. Ich habe Verzögerungen, mehrere Aktivierungsanweisungen, lokale Variablen für die zu speichernde Arbeitsmappe und den Namen der zu speichernden Arbeitsmappe platziert. Jede Hilfe oder Ideen, warum dies geschieht und wie es zu beheben ist, wird sehr geschätzt.
Ich habe einige Änderungen vorgenommen. Der Code ist unten aufgeführt ...
Ich habe den Code so geändert, dass er dem folgenden Vorschlag besser entspricht. Die Auflistung ist unten zusammen mit den Variablendefinitionen wie beim Eintritt in das Programm. Der Excel-Code wird in einer Citrix-Umgebung ausgeführt, die sich zwar auf die Zeitsteuerung auswirkt, aber keine anderen Auswirkungen auf die Codeausführung haben sollte.
Ich habe die anderen Code-Versionen der Kürze wegen gelöscht. Der folgende Code hat funktioniert. Das Hauptproblem besteht darin, dass die zu speichernde Arbeitsmappe die aktive Arbeitsmappe sein muss, wenn die SaveAs-Methode aufgerufen wird.
Private Sub cmdSaveUpdatedWB_Click() On Error GoTo Err_cmdSaveUpdatedWB_Click
Dim wbSave Wie Arbeitsmappe Dim wsActive Wie Arbeitsblatt Dim sNWBName As String
Exit_cmdSaveUpdatedWB_Click:
Set wbSave = Nothing
Exit Sub
Err_cmdSaveUpdatedWB_Click:
Dim strErrMsg As StringstrErrMsg = "Error Number: " & Err.Number & " Desc: " & Err.Description & vbCrLf & _
"Source:" & Err.Source & vbCrLf & _
"Updating Workbook: " & vbCrLf & " " & gwbTarget.Name & vbCrLf & _
"Selected Worksheet: " & gwsTrgSheet.Name & vbCrLf & _
"Active Workbook: " & vbCrLf & " " & ActiveWorkbook.Name & vbCrLf & _
"Worksheet: " & ActiveSheet.Name & vbCrLf & _
"Code Segment: cmdSaveUpdatedWB_Click event handler"
RecordErrorInfo strErrMsg
Resume Exit_cmdSaveUpdatedWB_Click
End Sub
wo deklarieren Sie 'gwbTarget'? Ist es die gleiche Arbeitsmappe, in der der Code gespeichert ist? – CallumDA
Es handelt sich um eine globale Variable, die in einem Codemodul deklariert ist, das in der Arbeitsmappe enthalten ist, die den Code enthält. – Thope
Erstens können Sie Ihre 'activate'-Anweisung entfernen - Sie brauchen das nicht. Überprüfen Sie, ob Ihr 'gwbTarget' definiert ist, indem Sie einen Breakpoint auf die Zeile' SaveAs' setzen und Ihre Locals überprüfen, wenn der Code dort stoppt. Meine Vermutung ist, dass "gwbTarget" ist "Nothing" – CallumDA