Informationen und Beispiele zum Thema MsgBox | |
---|---|
![]() |
MsgBox-Seite mit Beispielarbeitsmappe aufrufen |
Informationen und Beispiele zum Thema CommandButton | |
---|---|
![]() |
CommandButton-Seite mit Beispielarbeitsmappe aufrufen |
Informationen und Beispiele zum Thema Userform | |
---|---|
![]() |
Userform-Seite mit Beispielarbeitsmappe aufrufen |
Betrifft: leere Excel Instanz bleibt offen
von: Werner
Geschrieben am: 13.09.2019 21:33:42
Hallo,
ich bräuchte auch mal wieder Hilfe bei einem Makro-Problem. Ist zwar nur ein Schönheitsfehler aber vielleicht kann mir den ja jemand beseitigen.
Zur Sache:
Ich habe eine Excel .xlsm mit der tägliche Stärkemeldungen erfasst werden. Das ganze läuft ausschließlich über Userformen, Excel selbst wird minimiert gestartet.
Sobald die Daten für die Nachtschicht erfasst sind soll eine leere Datei für den nächsten Tag angelegt werden.
Dabei soll aber die aktuelle .xlsm als .xlsx gespeichert werden. So können dann nachträglich keine Änderungen daran mehr durchgeführt werden (Blatt ist geschützt).
Mein Code macht auch alles was ich von ihm will. Die .xlsm wird als .xlsx gespeichert, die .xlsm wird (ggf. wird ein neuer Jahresordner und/oder ein neuer Monatsordner angelegt), die .xlsm wird umbenannt in den nächsten Tag und ggf. in den neuen Monatsordner/Jahresordner verschoben.
Klappt alles wunderbar, nur bleibt mir nach Makrodurchlauf eine leere Excelinstanz offen.
Ich vermute der Casus Knacktus liegt darin, dass die .xlsm als .xlsx gespeichert wird, das Makro der .xlsm aber zu diesem Zeitpunkt ja noch nicht durch ist.
Vielleicht denke ich bei dem Code auch zu sehr um die Ecke.
Private Sub CommandButton18_Click() Dim Pfad As String, Jahr As String, Monat As String Dim daDatum As Date, i As Long, loZähler As Long, sh As Shape Dim mldg As Variant, Quelle As String, Ziel As String Application.ScreenUpdating = False 'Prüfung ob alle Stärkemeldungen erfasst sind For i = 1 To 12 If Me.Controls("Commandbutton" & i).BackColor = vbGreen Then loZähler = loZähler + 1 End If Next i If Me.CommandButton15.BackColor = vbGreen Then loZähler = loZähler + 1 'Datu aus Zelleholen daDatum = Range("L3") If loZähler < 13 Then mldg = MsgBox("Fehler: Unzulässig, es sind noch nicht alle Särkemeldungen erfasst." _ , , "Hinweis für " & Application.UserName) Exit Sub Else If MsgBox("Sind alle Stärkemeldungen" & vbLf & "für den " & daDatum _ & " bereits erfasst?", vbYesNo, "Sicherheitsabfrage an " _ & Application.UserName) = vbYes Then 'Userform ausblenden Start.Hide 'neues Datum für Folgetag erstellen Jahr = Year(daDatum + 1) Monat = Format(daDatum + 1, "MM") & "-" & Format(daDatum + 1, "MMMM") Worksheets("Tabelle1").Range("D1") = "Abschluß" ThisWorkbook.Save '# Pfad zur aktuellen Datei anpassen ## Pfad = "P:\Stärke\" & Jahr & "\" '## '###################################### 'Quelldatei festlegen = Datei des aktuellen Tages Quelle = ThisWorkbook.Path & "\" & daDatum & ".xlsm" 'ggf. neuen Jahresordner und/oder neuen Monatsordner anlegen If Dir(Pfad, vbDirectory) = "" Then MkDir (Pfad) End If Pfad = Pfad & Monat & "\" If Dir(Pfad, vbDirectory) = "" Then MkDir (Pfad) End If 'aktuelle .xlsm als .xlsx speichern Application.DisplayAlerts = False With ThisWorkbook .Worksheets("Personal").Delete .Worksheets("Tabelle1").Range("D1").ClearContents .Worksheets("Tabelle1").Columns("N:U").ClearContents For Each sh In .Worksheets("Tabelle1").Shapes sh.Delete Next sh .SaveAs Filename:=ThisWorkbook.Path & "\" & daDatum & ".xlsx", _ FileFormat:=xlOpenXMLWorkbook 'aktuelle .xlsm umbenennen (neuer Tag) 'und ggf. in neuen Ordner verschieben On Error GoTo Ausgang Ziel = Pfad & daDatum + 1 & ".xlsm" Name Quelle As Ziel mldg = MsgBox("Die Datei für den " & daDatum + 1 & " wurde erfolgreich angelegt." _ , , "Hinweis für " & Application.UserName) .Close False End With Application.DisplayAlerts = True 'aktive Datei speichern und schließen ThisWorkbook.Close True 'Excel beenden Application.Quit End If End If Exit Sub Ausgang: MsgBox "Es ist ein Fehler aufgetreten." & vbLf _ & "Die Datei für den neuen Tag konnte nicht angelegt werden." _ & vbLf & vbLf & "Bitte die Datei ""Vorlage Stärkemeldung"" aus dem Hauptverzeichnis öffnen." _ & vbLf & "Anschließend die Datei mit ""Speichern unter... im entsprechenden Monat" _ & vbLf & "unter dem Datum des neu anzulegenden Tages abspeichern." & vbLf _ & "Datumsformat: XX.XX.XXXX" End Sub
Betrifft: AW: leere Excel Instanz bleibt offen
von: 1713009.html
Geschrieben am: 13.09.2019 22:14:16
Hi Werner
Ich denke das Grundproblem hast du erkannt. Gemäss dem Symptom vermute ich, dass Quit ausgelassen wird, nachdem die Datei bereits zu ist.
ThisWorkbook.Close True Application.QuitSpeichere (bei Bedarf) die Datei und schliesse danach direkt die Applikation.
Betrifft: AW: leere Excel Instanz bleibt offen
von: 1713012.html
Geschrieben am: 13.09.2019 22:41:48
Hallo Chris,
das mit einer .XLTM wollte ich nicht, da die Nutzer dann wieder die Vorlagendatei öffnen und für den neuen Tag unter dem Tagesdatum abspeichern müssen.
Da gibt es welche, die selbst damit überfordert sind.
Mit meiner Version läuft das alles automatisch ab. Die müssen nur noch ein Knöppchen drücken, die Datei wird als .xlsx gespeichert, die .xlsm für den neuen Tag wird angelegt ggf. auch mit Ordner für ein neues Jahr bzw. für einen neuen Monat.
Aber weitergeholfen hast du mir trotzdem.
Einfach nach dem Abspeicheren als .xlsx ein Application.Quit und am Schluß wird alles sauber geschlossen.
Das hatte ich noch nicht versucht, weil ich davon ausgegangen bin, dass ich mir damit den Ast absäge auf dem ich sitze.
Danke für die Erleuchtung.
Gruß Werner
Betrifft: AW: leere Excel Instanz bleibt offen
von: 1713132.html
Geschrieben am: 14.09.2019 21:24:49
Hallo Werner,
das mit dem leeren Excel-Fenster ist wirklich lästig. Das 1. Mal habe ich das in einem Vba-Programm festgestellt, wo mehrere Exceldateien nacheinander von der Hauptdatei dazu geladen werden.
Allerdings erst ab Excel 2013, denn da hat man ja die gesamte Excel-Festertechnologie geändert, _
siehe:
http://www.excel-ticker.de/uebersicht-der-globalen-aenderungen-in-den-office-2013-anwendungen/
Betrifft: AW: leere Excel Instanz bleibt offen
von: 1713986.html
Geschrieben am: 19.09.2019 20:29:05
Hallo Werner,
und nun - kein Interesse mehr. Ich habe nachgeschaut, wie ich das Problem löste aber bei Null Interesse bleibt der Hilfekasten einfach zu.
Gruß von Luschi
aus klein-Paris