Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Laufzeitfehler bei doppelter Betätigung eines Buttons.

Forumthread: Laufzeitfehler bei doppelter Betätigung eines Buttons.

Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 10:26:20
Jarod
Hallo zusammen.

Ich habe folgenden Code der eine Excel Datei im c:temp speichert und diese dann an ein Mail anhängt. Dies funktioniert super. Leider ist es aber so, dass wenn ich den Button ein zweites mal anklicke ich einen Laufzeitfehler erhalte. Gibt es eine Möglichkeit, dass ich den Button auch ein zweites mal benutzen kann falls ich im Excel eine Korrektur vorgenommen habe?

Besten Dank für eure Hilfe.
J.


Private Sub MailFS_Click()

Dim Nachricht As Object, OutlookApplication As Object
Dim Anhang As String, Pfad As String
Pfad = "c:\temp\"

Anhang = ThisWorkbook.FullName ' Ist noch ohne Endung
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=Pfad & Anhang, FileFormat:= _
xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = True
Anhang = ThisWorkbook.FullName ' komplett mit Pfad und Endung

Set OutlookApplication = CreateObject("Outlook.Application")

Set Nachricht = OutlookApplication.CreateItem(0)
With Nachricht
.To = "80811@xxxxx.ch"
.Subject = "Wertschriften-Eröffnungsauftrag (Datei in Kundenordner speichern)"
.attachments.Add Anhang
.Display
'.Mail.Send
End With
Set OutlookApplication = Nothing
Set Nachricht = Nothing

End Sub
Anzeige
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 10:46:27
velo
Hallo,

ohne irgendwas zu testen oder sonst was wäre das meine Vermutung:
Bau vorm speichern einen Check ein, ob es bereits eine Datei mit diesem Namen in dem Ordner gibt (mit der Dir-Funktion).
Wenn die Datei nicht vorhanden ist, dann speichere die Datei mit SaveAs, wenn schon dann mit Save. Du könntest den Dateinamen auch dynamisch hochzählen lassen (z.B. DateiName_V2.xlsx), wenn dir das lieber ist.
Eine weitere Möglichkeit wäre auch, die ursprüngliche Datei (falls vorhanden natürlich, siehe den Check mit Dir) erst zu löschen und dann deine mit SaveAs zu speichern

Hoffe das hilft weiter.

VG
velo
Anzeige
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 11:03:02
Daniel
Hi
Welcher Fehler tritt denn auf (Nummer, Fehlerbeschreibung) und in welcher Programmzeile passiert das?
Das wären immer die ersten Informationen, die man benötigt um die Fehlerursache zu finden.

Gruß Daniel
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 17:33:16
daniel
Hi
das Problem ist, dass durch SaveAs die Makro-Datei zur gerade gespeicherten Datei wird.
beim zweiten Klick versuchst du daher, eine Datei zu überschreiben, die geöffnet und daher auf dem Laufwerk nicht überschrieben werden kann.

eine Möglichkeit wäre, die Datei mit Thisworkbook.SaveCopyAs Pfad & Dateiname zu speichern, da hierbei die Ausgangsdatei ihren alten Namen behält und nicht zur neuen gespeicherten Datei wird. Damit ist die gespeicherte Datei geschlossen und kann überschrieben werden.
Beim SaveCopyAs gibt man nur den neuen Dateinamen an, da der FileType hierbei nicht geändert werden kann.

eine andere Möglichkeit wäre, zu prüfen ob der aktuelle vollständige Dateiname dem neuen Dateinamen entspricht und die Datei nur noch mit .Save zu speichern.

Gruß Daniel

Anzeige
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 18:12:50
Jarod
Besten Dank Daniel

Ich hab's angepasst. Jetzt habe ich aber das Problem, dass ich bisher die datei als Anhang ans geöffnete Mail angehängt habe.

Ich habe als String: Anhang = thisworkbook.fullName

Das klappt jetzt aber nicht weil ich nun die gespeicherte Kopie anhängen sollte. Ich erhalte den Laufzeitfehler '-2147024894 (80070002)' Die Datei kann nicht gefunden werden. Überprüfen sie den Pfad und den Dateinamen.

Er bleibt dann hängen bei .attachments.add Anhang.

Der Code sieht nun so aus.
Private Sub MailFS_Click()

Dim Nachricht As Object, OutlookApplication As Object
Dim Anhang As String, Pfad As String
Pfad = "c:\temp\"

Anhang = ThisWorkbook.FullName ' Ist noch ohne Endung
Application.DisplayAlerts = False


ThisWorkbook.SaveCopyAs Pfad & Anhang

Application.DisplayAlerts = True
Anhang = ThisWorkbook.FullName ' komplett mit Pfad und Endung

Set OutlookApplication = CreateObject("Outlook.Application")

Set Nachricht = OutlookApplication.CreateItem(0)
With Nachricht
.To = "80811@xxxx.ch"
.Subject = "Wertschriften-Eröffnungsauftrag (Datei in Kundenordner speichern)"
.attachments.Add Anhang
.Display
'.Mail.Send
End With
Set OutlookApplication = Nothing
Set Nachricht = Nothing

End Sub


Anzeige
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 18:48:45
daniel
Hi
du hast doch die Datei unter Pfad & Datei gespeichert.
nimm doch genau den Text du bei SaveCopyAs als Speichername eingesetzt hast, auch für das Anfügen des Attachments.
ist doch eigentlich logisch, oder?
Gruß Daniel
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 19:11:08
Jarod
Für dich klingt das logisch, für mich leider nicht, da ich nicht gross Ahnung von... :-(

Ich nehme an dass ich bei der Zeile:
Anhang = ThisWorkbook.FullName
Änderungen vornehmen muss. Ich habe dort nun
Anhang = Pfad & Anhang
drin und das scheint auch zu funktionieren.

Aber beim speichern, fehlt die Endung .xlsm

Wie kriege ich diese jetzt noch hin?

Danke für Deine Hilfe.
Anzeige
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 20:02:23
daniel
naja, du weißt, wie du die beiden Textvariablen Pfad und Anhang zu einem Text verbindest (nämlich mit dem dem "&")
dass man festen Text in Anführungszeichen setzt, weißt du sicherlich auch, bzw kannst es deinem Code entnehmen. (Pfad = "c:\temp\")

bisher war ich der Ansicht, dass jeder Mensch, der einen besseren Schulabschluss hat als "Hauptschule mit viel Wohlwollen", jetzt selbstständig in der Lage sein sollte, sich mit diesem Wissen (das ja offensichtlich vorhanden sein muss, sonst hättest du deinen Code aus der Eingangsfrage ja nicht schreiben können) und etwas Transfer-Denkleistung dann das hier selbst zu erstellen:


Anhang = Pfad & Anhang & ".xlsm"

sag mir bitte bescheid, wenn ich Recht hatte oder habe ich da überzogene Ansprüche?
Anzeige
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
17.04.2025 10:05:12
Jarod
Super vielen herzlichen Dank.

Noch zur Info. Wie ersichtlich habe ich in VBA keine Erfahrung. Ich habe den existierenden Code nicht selber erstellt, muss diesen aber nun anpassen.

Deshalb meine doofen Fragen. Tut mir leid, aber VBA ist für mich noch nicht wirklich logisch... Ich versuche mein Bestes um es zu lernen und bin deshalb sehr froh um dieses Forum!

Aber ich glaube ich hab's jetzt hingekriegt und es scheint so zu funktionieren wie es sollte.

Nochmals vielen Dank und schöne Ostern.
J.
Anzeige
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 14:42:44
Jarod
Hallo Daniel

Laufzeitfehler 1004 in diesem Teil.

ActiveWorkbook.SaveAs Filename:=Pfad & Anhang, FileFormat:= _

xlOpenXMLWorkbookMacroEnabled
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 11:02:33
Jarod
Danke Velo

Wie müsste dann der Code aussehen, wenn ich zuerst Checken würde, ob die Datei vorhanden ist und dann mit Save überspeichern und wenn nicht mit Saveas speichern?
Anzeige
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 11:25:50
velo
Hallo Jarod,

wieder ungetestet:
Option Explicit


Private Sub MailFS_Click()
Dim Nachricht As Object, OutlookApplication As Object
Dim Anhang As String, Pfad As String
Pfad = "c:\temp\"

Application.DisplayAlerts = False
If Dir(Pfad & ThisWorkbook.Name) > "" Then
ThisWorkbook.Save
Else:
Anhang = ThisWorkbook.FullName ' Ist noch ohne Endung
ActiveWorkbook.SaveAs Filename:=Pfad & Anhang, FileFormat:= _
xlOpenXMLWorkbookMacroEnabled
End If
Application.DisplayAlerts = True

Anhang = ThisWorkbook.FullName ' komplett mit Pfad und Endung

Set OutlookApplication = CreateObject("Outlook.Application")

Set Nachricht = OutlookApplication.CreateItem(0)
With Nachricht
.To = "80811@xxxxx.ch"
.Subject = "Wertschriften-Eröffnungsauftrag (Datei in Kundenordner speichern)"
.attachments.Add Anhang
.Display
'.Mail.Send
End With
Set OutlookApplication = Nothing
Set Nachricht = Nothing

End Sub


Der Code prüft jetzt, ob die Datei schon unter dem Pfad abgespeichert wurde.
Wenn ja: normal speichern
Wenn nein: speichern unter

VG
velo
Anzeige
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 14:41:48
Jarod
hat leider nicht geholfen. Immer noch den Laufzeitfehler 1004. Hier in diesem Teil.

ActiveWorkbook.SaveAs Filename:=Pfad & Anhang, FileFormat:= _

xlOpenXMLWorkbookMacroEnabled
AW: Laufzeitfehler bei doppelter Betätigung eines Buttons.
16.04.2025 15:41:07
velo
Hallo,

habs mal getestet:

Mein Code funktioniert wie gewollt, wenn ich die Datei im Downloads-Ordner speichere. Wenn ich allerdings im Ordner tmp abspeichern will, dann bekomme ich den gleichen Fehler.

An was das liegt? Ehrlich gesagt keine Ahnung.
Als "Lösung" kann ich dir aber vorschlagen einen anderen Ordner zu wählen, in dem du deine Dateien abspeicherst.

VG
velo
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18