Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1932to1936
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

Makro Absturz beim zweiten Ausführen

Makro Absturz beim zweiten Ausführen
15.06.2023 15:32:39
Tobias

Hallo, ich bin noch relativ neu in der VBA Programmierung, darum bitte ich um Nachsicht.

Hier das Problem: Ich habe eine Liste, aus welche Daten für ein Protokoll in einem seperaten Tabellenblatt gezogen werden. Dieses Protokoll soll in ein separates Dokument kopiert werden, allerdings nur mit den statischen Werten (damit keine Bezüge mehr vorhanden sind).
Der Code funktioniert beim ersten Mal ausführen einwandfrei, allerdings stürzt Excel beim zweiten Mal ausführen ab. Wird der Code über Einzelschritte durchgeführt funktioniert es ebenfalls ohne Fehler.
Ich bin inzwischen etwas ratlos. Habe schon recht viel recherchiert, bin aber leider noch nicht fündig geworden.

Hier der Code:

Option Explicit

Sub Prot_kopieren_statisch()
'
' BlattKopieren in eine ausgewählte Datei Makro

Dim Dateiname As Variant
Dim wbZiel As Workbook
Dim wbQuelle As Workbook
Dim wsKopiert As Worksheet  'das kopierte Protokoll
Dim wsQuelle As Worksheet
Dim ws As Worksheet
Dim btn As Button
Dim BPNr As String



Set wbQuelle = ThisWorkbook 'Workbook Quelle ist diese Arbeitsmappe
Set wsQuelle = wbQuelle.Worksheets("Protokoll_Übertrag")
BPNr = wsQuelle.Range("E9")

'ScreenUpdating und PopUps deaktivieren
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'Meldungen zu großer Datenmenge werden unterdrückt



'Benutzer kann Datei auswählen xlsm oder xlsx
Dateiname = Application.GetOpenFilename(FileFilter:="Excel-Dateien (*.xls*),(*.xls*")

'Wurde eine Datei ausgewählt?
If Dateiname > False Then
    
    
    'Arbeitsmappe öffnen
    Set wbZiel = Workbooks.Open(Filename:=Dateiname)
'        DoEvents
    'Prüfen ob Protokoll schon existiert
    Dim BoVorhanden As Boolean
    For Each ws In Worksheets

    If ws.Name = BPNr Then
    BoVorhanden = True
    Exit For
    End If
    Next ws
    If BoVorhanden Then
        MsgBox ("Das zu kopierende Protokoll ist schon vorhanden. Bitte kontrollieren und zuerst löschen")
'   Arbeitsmappe schließen
        wbZiel.Close SaveChanges:=False
    Else
        
        
        'Tabellenblatt kopieren und einfügen

        wsQuelle.Copy After:=wbZiel.Sheets(wbZiel.Sheets.Count) 'am Ende einfügen
        
        'Buttons in kopiertem Blatt löschen
        Set wsKopiert = wbZiel.ActiveSheet
        wsKopiert.Buttons.Delete
    
        
        'Daten kopieren und nur Inhalt ohne Formeln (Bezüge) einfügen
        wsKopiert.Range("A1:AE51").Copy
        wsKopiert.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        
        ' Blatt umbenennen
        wsKopiert.Name = wbZiel.Sheets(Sheets.Count).Range("E9")
        
        'Arbeitsmappe schließen
        wbZiel.Close SaveChanges:=True
        
        'Feedback für Benutzer
        MsgBox ("Protokoll für den Pfahl " & BPNr & " wurde erfolgreich übertragen")

    End If
End If

'ScreenUpdating und PopUps aktivieren
Application.ScreenUpdating = True
Application.DisplayAlerts = True


End Sub



Danke vielmals für die Hilfe
Tobias

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Absturz beim zweiten Ausführen
15.06.2023 15:56:27
GerdL
Hallo Tobias,
sollte die Zieldatei beim 2. Mal schon geöffnet sein, ändere mal:

If Dateiname > False Then
'Wurde eine Datei ausgewählt?

'Arbeitsmappe öffnen
    
    On Error Resume Next
    Set wbZiel = Workbooks(Dateiname)
    On Error GoTo 0
    If wbZiel Is Nothing Then Set wbZiel = Workbooks.Open(Filename:=Dateiname)
'................
Gruß Gerd


AW: Makro Absturz beim zweiten Ausführen
20.06.2023 11:25:55
Tobias
Hallo Gerd,

danke für die Hilfe. In der Regel ist die Zieldatei geschlossen. Der Code hilft aber sicher falls dem nicht so ist.

Leider stürzt Excel nach wie vor ab. Also lädt er für einige Sekunden, bevor sich dann alle offenen Excel Dateien schließen und ungespeicherte Inhalte verloren gehen.

Grüße Tobias


Anzeige
AW: Makro Absturz beim zweiten Ausführen
15.06.2023 16:03:05
onur
"allerdings stürzt Excel beim zweiten Mal ausführen ab"? Was heisst das denn GENAU? Excel stürzt hab heisst normalerweise, dass Excel hängt und nur noch durch den Taskmanager beendet werden kann oder dass Excel sich einfach schliesst.
Wenn du aber meinst, dass Excel eine FEHLERMELDUNG ausspuckt, musst du schon genau schreiben, in welcher Zeile und WELCHE Fehlermeldung.


AW: Makro Absturz beim zweiten Ausführen
20.06.2023 11:28:40
Tobias
Excel lädt nach dem Ausführen für einige Sekunden und schließt sich dann selbstständig. Nach erneutem öffnen können evtl. nicht gespeicherte Dateien zum Teil wiederhergestellt werden.
Fehlermeldung gibt es keine.


Anzeige
AW: Makro Absturz beim zweiten Ausführen
20.06.2023 11:34:26
onur
Poste mal die Datei - ein Makro von vielen bringt nicht viel.


AW: Makro Absturz beim zweiten Ausführen
20.06.2023 13:32:43
Tobias
Hallo,

das wollte ich soeben eh ohnehin, da mir aufgefallen ist, dass das Makro in anderen Mappen ohne Probleme funktioniert.
Hier der Link zum download: https://www.herber.de/bbs/user/159643.xlsm

Ziel ist es aus mehreren Tabellenblättern mit Infos ein Protokoll zusammenzustellen. Vielleicht sind es aber zu viele Verweise, welche zu einem Absturz führen?

VG
Tobias


AW: Makro Absturz beim zweiten Ausführen
20.06.2023 14:24:25
onur
Kann ich nicht nachvollziehen, bei mir läuft alles einwandfrei, auch beim 2. oder 3. Mal.


Anzeige
AW: Makro Absturz beim zweiten Ausführen
22.06.2023 07:52:18
Tobias
Ok danke fürs ausprobieren. Bin im Kontakt mir der IT. Vielleicht können die weiter helfen.

VG Tobias


AW: Makro Absturz beim zweiten Ausführen
15.06.2023 16:12:43
Yal
Hallo Tobias,

Variable: so viel wie nötig, aber so wenig wie möglich.
Achte auf das Einrücken. Da entdeckt man schneller Unstimmigkeiten

Die Suche nach dem Blatt in Zieldatei ist ungenau. Der Workbook muss eingegeben sein. Ich habe es abgelagert, um die Fehlertoleranz "On Error Resume Next" besser nutzen zu können.
Warum liest Du die Zelle "E9" zweimal? der Inhalt hast Du eh in der Variable "BPNr" gespeichert.

Sub Prot_kopieren_statisch()
'
' BlattKopieren in eine ausgewählte Datei Makro

Dim Dateiname As Variant
Dim wbZiel As Workbook
Dim wsQuelle As Worksheet
Dim ZielName As String

'Workbook-Quelle ist diese Arbeitsmappe
    Set wsQuelle = ThisWorkbook.Worksheets("Protokoll_Übertrag")

'ScreenUpdating und PopUps deaktivieren
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False 'Meldungen zu großer Datenmenge werden unterdrückt

'Benutzer kann Datei auswählen xlsm oder xlsx
    Dateiname = Application.GetOpenFilename(FileFilter:="Excel-Dateien (*.xls*),(*.xls*")
'Wurde eine Datei ausgewählt?
    If Dateiname > False Then
    'Arbeitsmappe öffnen
        Set wbZiel = Workbooks.Open(Filename:=Dateiname)
'        DoEvents
    'Prüfen ob Protokoll schon existiert
        ZielName = wsQuelle.Range("E9").Value
        If Not Blatt_suchen(wbZiel, ZielName) Is Nothing Then
            MsgBox ("Das zu kopierende Protokoll ist schon vorhanden. Bitte kontrollieren und zuerst löschen")
            wbZiel.Close SaveChanges:=False 'Arbeitsmappe schließen
            GoTo Finally
        End If
    'Tabellenblatt kopieren und einfügen
        wsQuelle.Copy After:=wbZiel.Sheets(wbZiel.Sheets.Count) 'am Ende einfügen
    'Buttons in kopiertem Blatt löschen
        With wbZiel.Sheets(wbZiel.Sheets.Count) 'die neue "letzte"
            .Buttons.Delete
        'Daten kopieren und nur Inhalt ohne Formeln (Bezüge) einfügen
            .Range("A1:AE51").Copy
            .Range("A1").PasteSpecial Paste:=xlPasteValues
        ' Blatt umbenennen
            .Name = ZielName
        End With
    'Arbeitsmappe schließen
        wbZiel.Close SaveChanges:=True
    'Feedback für Benutzer
        MsgBox ("Protokoll für den Pfahl " & ZielName & " wurde erfolgreich übertragen")
    End If
Finally:
'ScreenUpdating und PopUps aktivieren
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

Private Function Blatt_suchen(ByRef wb As Workbook, WSname As String) As Worksheet
'suche ein Blatt in gegebenen Workbook. Wenn nicht gefunden, bleibt "nothing"
On Error Resume Next
    Set Blatt_suchen = wb.Worksheets(WSname)
End Function
VG
Yal


Anzeige
AW: Makro Absturz beim zweiten Ausführen
20.06.2023 11:37:15
Tobias
Hallo Yal,

danke für die Tipps. Habe in der Zwischenzeit schon gelesen, dass es besser ist direkt zu verweisen anstatt über andere Variablen zu gehen. Auch auf das Einrücken werde ich achten.

Einlesen der Zelle E9 ist natürlich unnötig. Danke für den Hinweis und den ausgebesserten Code. Damit funktioniert es leider aber auch noch nicht. Excel stürzt jetzt sogar direkt beim ersten Ausführen nach wie vor ohne Fehlermeldung ab (schließt selbstständig alle Fenster).
Vielleicht noch dazu ein Hinweis: Ich nutze Office 365 Business und die Dateien liegen alle auf OneDrive.

VG Tobias

Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige