Live-Forum - Die aktuellen Beiträge
Datum
Titel
03.05.2024 10:49:02
03.05.2024 10:43:56
03.05.2024 07:38:32
Anzeige
Archiv - Navigation
1928to1932
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Speichern unter Abbruch

Speichern unter Abbruch
23.04.2023 19:47:25
Daniel

Hallo zusammen, wie muss ich den untere Code ergänzen, wenn ich beim Dialogfenster Speicher unter auf abrechen klicke soll das Makro stoppen.
Vielen Dank :-)

Sub Speichern_Unter()

On Error GoTo ErrorHandler
ErrorHandler:
If Err.Number = 1004 Then
MsgBox "Datei kann momentan nicht überschrieben werden weil die noch synchronisiert wird. Warten bis Status grüner Kreis mit Häkchen angezeigt wird."
Application.ActiveWorkbook.Close
Exit Sub
End If


Dim Dateiname As String
Dateiname = "Invoice_" & ActiveSheet.Range("O1").Value
Application.Dialogs(xlDialogSaveAs).Show Dateiname
If Dir(Dateiname) > "" Then
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Dateiname
Application.DisplayAlerts = True

End If



Call Invoce_Formatierung
Call Delivery_Formatierung
Call Blatt_Fehlermeldung_löschen


Sheets("Invoice EN").Select

ActiveSheet.Shapes.Range(Array("Button 3")).Select
Selection.Delete
Selection.Cut


End Sub

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Speichern unter Abbruch
23.04.2023 20:06:48
ralf_b
On Error GoTo ErrorHandler
ErrorHandler:
If Err.Number = 1004 Then

steht ganz am Anfang deines Makros. Erwartet du schon zu Beginn des Makros Fehler wenn noch keine Aktion gelaufen ist?


AW: Speichern unter Abbruch
23.04.2023 20:15:45
Daniel
Nein, dieses Ereignis kann erst beim speichern auftreten


AW: Speichern unter Abbruch
23.04.2023 21:00:09
onur
Ein Error-Handler gehört ans ENDE eines Codes - der Code soll ja nur dann dahin springen, wenn ein Fehler kommt. Bei Dir wird er immer ausgeführt.
So geht das: (wenn Dir(Dateiname) leer ist, WURDE abgebrochen):
...
...
    Dim Dateiname As String
    Dateiname = "Invoice_" & ActiveSheet.Range("O1").Value
    Application.Dialogs(xlDialogSaveAs).Show Dateiname
    If Dir(Dateiname) > "" Then
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Dateiname
        Application.DisplayAlerts = True
    Else
        Stop ' oder besser Exit Sub
    End If
...


Anzeige
AW: Speichern unter Abbruch
23.04.2023 21:13:43
Daniel
Vielen Dank. Ich habe den Code nun so eingefügt. Problem ist nun, dass das Makro nicht weitergeführt wird nach dem Speichern.

Sub Speichern_Unter()

On Error GoTo ErrorHandler
ErrorHandler:
    If Err.Number = 1004 Then
        MsgBox "Datei kann momentan nicht überschrieben werden weil die noch synchronisiert wird. Warten bis Status grüner Kreis mit Häkchen angezeigt wird."
        Application.ActiveWorkbook.Close
    Exit Sub
    End If
      
Dim Dateiname As String
    Dateiname = "Invoice_" & ActiveSheet.Range("O1").Value
    Application.Dialogs(xlDialogSaveAs).Show Dateiname
    If Dir(Dateiname) > "" Then
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Dateiname
        Application.DisplayAlerts = True
    Else
        Exit Sub
    End If


Call Invoce_Formatierung
Call Delivery_Formatierung
Call Blatt_Fehlermeldung_löschen


Sheets("Invoice EN").Select

ActiveSheet.Shapes.Range(Array("Button 3")).Select
Selection.Delete
Selection.Cut


Range("Q1").Select
ActiveCell.FormulaR1C1 = "X"
Selection.ClearContents

End Sub


Anzeige
AW: Speichern unter Abbruch
23.04.2023 21:30:34
onur
Noch einmal: Der Errorhandler gehört ans ENDE.
On Error GoTo ErrorHandler
...
Dein Code
...
Exit Sub
Errorhandler:
...
End Sub
Zum Rest kann ich nix sagen, denn ich habe deine Datei nicht, nur ein paar Zeilen Code.
Ich weiss nicht mal, was du genau damit meinst: "dass das Makro nicht weitergeführt wird"


AW: Speichern unter Abbruch
23.04.2023 21:35:23
onur
Wozu soll der Errorhandler überhaupt gut sein ?


AW: Speichern unter Abbruch
23.04.2023 21:42:37
Daniel
Wenn im SharePoint der Dateiname bereits existiert und ich den überschreiben will, aber die Datei selbst noch synchronisiert wird, kann ich die Datei nicht überschreiben.


Anzeige
AW: Speichern unter Abbruch
23.04.2023 21:39:24
Daniel
Haben den Code so angepasst, aber funktioniert immer noch nicht.

Sub Speichern_Unter()

On Error GoTo ErrorHandler

    
      Dim Dateiname As String
      Dateiname = "Invoice_" & ActiveSheet.Range("O1").Value
      Application.Dialogs(xlDialogSaveAs).Show Dateiname
      If Dir(Dateiname) > "" Then
          Application.DisplayAlerts = False
          ActiveWorkbook.SaveAs Dateiname
          Application.DisplayAlerts = True
      Else
      Exit Sub
      End If



Call Invoce_Formatierung
Call Delivery_Formatierung
Call Blatt_Fehlermeldung_löschen


Sheets("Invoice EN").Select

ActiveSheet.Shapes.Range(Array("Button 3")).Select
Selection.Delete

Exit Sub
ErrorHandler:
    If Err.Number = 1004 Then
        MsgBox "Datei kann momentan nicht überschrieben werden weil die noch synchronisiert wird. Warten bis Status grüner Kreis mit Häkchen angezeigt wird."
        Application.ActiveWorkbook.Close
    Exit Sub
    End If
End Sub


Anzeige
AW: Speichern unter Abbruch
23.04.2023 21:42:03
onur
Verrate doch endlich, was "funktioniert immer noch nicht" heisst?
Was GENAU passiert?


AW: Speichern unter Abbruch
23.04.2023 21:43:32
Daniel
Nach dem Speicher führt es den folgenden Code nicht aus.

Call Invoce_Formatierung
Call Delivery_Formatierung
Call Blatt_Fehlermeldung_löschen

Sheets("Invoice EN").Select

ActiveSheet.Shapes.Range(Array("Button 3")).Select
Selection.Delete


AW: Speichern unter Abbruch
23.04.2023 21:44:09
onur
Und wie kommst du ausgerechnet an die Errornummer 1004 ?


AW: Speichern unter Abbruch
23.04.2023 21:46:18
Daniel
Wenn ich manuell versuche eine Datei zu überschreiben die noch synchronisiert wird kommt die Errornummer 1004, so bin ich drauf gekommen.


Anzeige
AW: Speichern unter Abbruch
23.04.2023 22:08:54
onur
Man kann nicht überprüfen, ob "Abbrechen" angeklickt wurde, man kann aber überprüfen, ob eben gespeichert wurde:
Sub Speichern_Unter()
    On Error GoTo ErrorHandler
    Dim Dateiname As String
    Dateiname = "Invoice_" & ActiveSheet.Range("O1").Value
    Application.Dialogs(xlDialogSaveAs).Show Dateiname
    If Not ThisWorkbook.Saved Then Exit Sub
......
Ausserdem ist DEIN Code Quatsch, denn er speichert 2x.
Dialogs(xlDialogSaveAs) speichert schon die Datei und du speicherst ihn drunter nochmal.


doch, kann man prüfen
24.04.2023 09:48:57
Daniel
Deine Annahme ist nicht ganz korrekt.
das Dialogs(...).Show ist keine Sub, sondern eine Function, deren Rückgabewert dich darüber informiert, ob der Dialog ausgeführt (TRUE) oder abgebrochen wurde (FALSE).
Gruß Daniel (nicht der Fragesteller)


Anzeige
AW: Speichern unter Abbruch
23.04.2023 22:21:52
onur
Also komplett so:
Sub Speichern_Unter()
    On Error GoTo ErrorHandler
    Dim Dateiname As String
    Dateiname = "Invoice_" & ActiveSheet.Range("O1").Value
    Application.Dialogs(xlDialogSaveAs).Show Dateiname
    If Not ThisWorkbook.Saved Then Exit Sub
    Call Invoce_Formatierung
    Call Delivery_Formatierung
    Call Blatt_Fehlermeldung_löschen
    Sheets("Invoice EN").Select
    ActiveSheet.Shapes.Range(Array("Button 3")).Select
    Selection.Delete
    Exit Sub
ErrorHandler:
    If Err.Number = 1004 Then
        MsgBox "Datei kann momentan nicht überschrieben werden weil die noch synchronisiert wird. Warten bis Status grüner Kreis mit Häkchen angezeigt wird."
        Application.ActiveWorkbook.Close
    Exit Sub
    End If
End Sub


Anzeige
AW: Speichern unter Abbruch
23.04.2023 22:40:43
Daniel
Was jetzt noch ist, wenn ich beim Speichern auf abbreche klicke, führt es die unter aufgeführte Code auf der originale Datei aus, die originale Datei darf nicht verändert werden.

Call Invoce_Formatierung
Call Delivery_Formatierung
Call Blatt_Fehlermeldung_löschen
Sheets("Invoice EN").Select
ActiveSheet.Shapes.Range(Array("Button 3")).Select
Selection.Delete
Exit Sub


AW: Speichern unter Abbruch
23.04.2023 22:54:35
onur
Von ZWEI Dateien hattest du nix gesagt.
Schreib das vor die 3 Zeilen mit Call:
ActiveWorkbook.Close


Anzeige
AW: Speichern unter Abbruch
23.04.2023 23:05:33
Daniel
wenn ich auf abreche klicke funktioniert es. wann ich aber auf Speicher klicke und die Datei neu gespeichert wird funktionieren die codes nicht mehr.


AW: Speichern unter Abbruch
23.04.2023 23:16:04
onur
WELCHE Codes denn ???


AW: Speichern unter Abbruch
23.04.2023 23:21:10
onur
Lass mal On Error.... weg.


AW: Speichern unter Abbruch
24.04.2023 08:25:42
Daniel
Diese Cods dürfe nur dann ausgeführt werden, wenn die Datei mit neuen Name gespeichert wird.

Call Invoce_Formatierung
Call Delivery_Formatierung
Call Blatt_Fehlermeldung_löschen
Sheets("Invoice EN").Select
ActiveSheet.Shapes.Range(Array("Button 3")).Select
Selection.Delete


Anzeige
AW: Speichern unter Abbruch
24.04.2023 06:57:45
ralf_b
du weist schon das du mit saveas den Dateinamen der aktuellen Datei änderst und keine Kopie erstellst?
Kann es sein das du den originalen Dateinamen in deinen nachfolgenden Methoden verwenden möchtest?


AW: Speichern unter Abbruch
24.04.2023 09:05:04
Daniel
Ich bin im Makro unerfahren.

Was soll das Makro können:

1. Das Makro ist auf der Datei Invoice_Vorlage

2. Wenn ich das Makro Starte soll es mir das Dialogfenster Speichern unter öffnen mit dem neuen Dateinamen

a. Wenn ich die neue Datei speichern, soll es die folgende Cods ausführen, für die neue Datei. (die Datei Invoice_Vorlage darf nicht verändert werden)
• Call Invoce_Formatierung
• Call Delivery_Formatierung
• Call Blatt_Fehlermeldung_löschen
• Sheets("Invoice EN").Select
• ActiveSheet.Shapes.Range(Array("Button 3")).Select
• Selection.Delete

b. Wenn ich bei Dialogfenster auf Abbrechen oder Schliessen klicke, soll es die folgende Cods nicht ausführen, die Datei Invoice_Vorlage darf nicht verändert werden. Idealerweise ist die Datei Invoice_Vorlage offen ohne Veränderung.
• Call Invoce_Formatierung
• Call Delivery_Formatierung
• Call Blatt_Fehlermeldung_löschen
• Sheets("Invoice EN").Select
• ActiveSheet.Shapes.Range(Array("Button 3")).Select
• Selection.Delete

c. Wenn der Dateiname bereit existiert und nicht überschrieben werden kann, weil die Datei im SahrePoint synchronisiert wird oder durch einen Benutzer gesperrt ist soll es mir ein Msg Box erstellen und die Datei Invoice_Vorlage ist unverändert geöffnet
Aktuell wird der Code verwändet
• If Err.Number = 1004 Then
MsgBox "Datei kann momentan nicht überschrieben werden weil die noch synchronisiert wird. Warten bis Status grüner Kreis mit Häkchen angezeigt wird."

3. Mit dem aktuell Code ist das Dialogfenster Speicher unter mit dem Pfad vom SharePoint geöffnet und ich kann auf dem Dialogfenster keinen neuen Ordner anlagen damit ich die neue Datei dort abspeichern kann.
Gibt es die Möglichkeit, dass es mir das Dialogfenster Speicher unter so öffnet, dass ich neue Ordner anlegen kann.

Folgender Code verwende ich aktuell:

Sub Speichern_Unter()
          On Error GoTo ErrorHandler
          Dim Dateiname As String
          Dateiname = "Invoice_" & ActiveSheet.Range("O1").Value
          Application.Dialogs(xlDialogSaveAs).Show Dateiname
          If Not ThisWorkbook.Saved Then Exit Sub
          Call Invoce_Formatierung
          Call Delivery_Formatierung
          Call Blatt_Fehlermeldung_löschen
          Sheets("Invoice EN").Select
          ActiveSheet.Shapes.Range(Array("Button 3")).Select
          Selection.Delete
          Exit Sub
ErrorHandler:
          If Err.Number = 1004 Then
              MsgBox "Datei kann momentan nicht überschrieben werden weil die noch synchronisiert wird. Warten bis Status grüner Kreis mit Häkchen angezeigt wird."
              Application.ActiveWorkbook.Close
          Exit Sub
          End If
      End Sub


AW: Speichern unter Abbruch
24.04.2023 08:55:49
Daniel
Hi
Man kann überprüfen, ob so ein Dialog ausgeführt oder abgebrochen wurde, in dem man ihn als Funktion ausführt.
Dann erhält man bei Durchführung ein WAHR als Rückgabewert und ein FALSCH bei Abbruch.
Das kann man mit IF abfragen und so gezielt reagieren


...
If Application.Dialogs(xlDialogSaveAs).Show Then
    hier der Code wenn der Dialog ausgeführt wurde
Else
    hier der Code wenn der Dialog abgebrochen wurde
End if
...
oder auch einfacher wenn man bei abbruch des Dialogs das Makro sofort beenden will
If Not Application.Dialogs(xlDialogSaveAs).Show then exit sub
und hier dann der weitere Code

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige