Thema Datum  Von Nutzer Rating
Antwort
Rot Excel Stürzt bei Makro Ausführung per Button ab
15.11.2018 11:59:48 Gast7046
NotSolved
15.11.2018 13:45:46 Verfasser
NotSolved

Ansicht des Beitrags:
Von:
Gast7046
Datum:
15.11.2018 11:59:48
Views:
1012
Rating: Antwort:
  Ja
Thema:
Excel Stürzt bei Makro Ausführung per Button ab

Hallo, mein Problem ist das mein Makro bzw. die Excel Datei an sich abstürzt wenn ich das Makro per Button ausführe. 

Starte ich es aber über den VBA Editor läuft alles reibungslos. Ich bin dahingehend jetzt etwas ratlos. 

im folgenden der Code, falls es an diesem liegen sollte: 

'Prüft, ob alle Variablen deklariert werden, wenn nicht wird ein Fehler zur Laufzeit erzeugt
Option Explicit

Dim Zeile As Integer 'Zeile aus der die Daten kopiert werden
Dim ZielZeile As Integer 'Zeile in der die Daten eingefügt werden
Dim Monat As String 'Bestimmt den Syntax des Monats, Bsp. 01.01.2000
Dim q_datei As String 'Setzt den Pfad aus der die Datei kopiert werden soll



'Mit dieser Funktion werden die Daten aus dem Wunschordner kopiert
'Es wird geprüft ob die Daten des letzten Monats, und danach die Daten des aktuellen Monats bereits eingeflegt wurden
Sub Daten_holen()
    With Application
        .EnableEvents = False
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With

prüfe_ob_vorhanden_letzter_monat
End Sub


Function prüfe_ob_vorhanden_letzter_monat() As Boolean

Dim I As Integer
I = 1
Dim boolsch As Boolean
    'Prüft genau die Anzahl der Sheets
    Do While I <= Worksheets.Count
            
            'Wenn ein Sheet mit dem ersten Tag des aktuellen Monats existiert dann setze boolsch auf 'Wahr'
            If Worksheets(I).Name = ersterTag_letztesMonat Then
                prüfe_ob_vorhanden_letzter_monat = True
                    End If
                        I = I + 1
                         Loop
                            Dim statement
                                If prüfe_ob_vorhanden_letzter_monat = False Then
                                        statement = MsgBox("Die Daten vom " & ersterTag_letztesMonat & " wurden noch nicht eingepflegt. " & _
                                            "Sollen die Daten nun eingefügt werden?", vbQuestion + vbYesNoCancel)
                                                Select Case statement
                                                Case vbYes
                                                    MsgBox_popup ("Die Daten werden jetzt eingepflegt")
                                                    'Funktionsaufrufe
                                                    ThisWorkbook.Worksheets.Add after:=Sheets(1)
                                                    ActiveSheet.Name = ersterTag_letztesMonat
                                                    'Funktionsaufruf
                                                    daten_kopieren_letzter_Monat
                                                    
                                                Case vbNo
                                                    MsgBox_popup ("Die Daten werden nicht eingepflegt")
                                                    
                                                Case vbCancel
                                                    MsgBox_popup ("Das Programm wird abgebrochen")
                                                        With Application
                                                            .EnableEvents = True
                                                            .Calculation = xlCalculationAutomatic
                                                            .ScreenUpdating = True
                                                        End With
                                                    End
                                                End Select
                                                    Else
                                                        MsgBox "Die Daten vom " & ersterTag_letztesMonat & " wurden bereits eingepflegt", vbInformation
                                                End If
                                
                                'Ruft jetzt die Funktion "prüfe-ob_vorhanden_aktueller_monat" auf
                                prüfe_ob_vorhanden_aktueller_monat
                    End Function

Function prüfe_ob_vorhanden_aktueller_monat() As Boolean

Dim I As Integer
I = 1
    'Prüft genau die Anzahl der Sheets
    Do While I <= Worksheets.Count
            
            'Wenn ein Sheet mit dem ersten Tag des aktuellen Monats existiert dann setze boolsch auf 'Wahr'
            If Worksheets(I).Name = ersterTag_aktuellesMonat Then
                prüfe_ob_vorhanden_aktueller_monat = True
                    End If
                        I = I + 1
                         Loop
                            Dim statement
                                If prüfe_ob_vorhanden_aktueller_monat = True Then
                                    MsgBox "Die Daten vom " & ersterTag_aktuellesMonat & " wurden bereits eingepflegt", vbInformation
                                         Else
                                            statement = MsgBox("Die Daten vom " & ersterTag_aktuellesMonat & " wurden noch nicht eingepflegt. " & _
                                            "Sollen die Daten nun eingefügt werden?", vbQuestion + vbYesNoCancel)
                                                
                                                Select Case statement
                                                Case vbYes
                                                    MsgBox_popup ("Die Daten werden jetzt eingepflegt")
                                                    'Funktionsaufrufe
                                                    ThisWorkbook.Worksheets.Add after:=Sheets(1)
                                                    ActiveSheet.Name = ersterTag_aktuellesMonat
                                                    'Funktionsaufruf
                                                    daten_kopieren_aktueller_Monat
                                                    
                                                Case vbNo
                                                    MsgBox_popup ("Die Daten werden nicht eingepflegt")
                                                    With Application
                                                        .EnableEvents = True
                                                        .Calculation = xlCalculationAutomatic
                                                        .ScreenUpdating = True
                                                    End With
                                                    
                                                Case vbCancel
                                                    MsgBox_popup ("Das Programm wird abgebrochen")
                                                    With Application
                                                        .EnableEvents = True
                                                        .Calculation = xlCalculationAutomatic
                                                        .ScreenUpdating = True
                                                    End With
                                                    End
                                                End Select
                                End If
                    End Function
                                     
Sub daten_kopieren_letzter_Monat()

    Monat = ersterTag_letztesMonat
        q_datei = Monat & "_Mitarbeiterübersicht.xlsx"
            'Öffnet die Excel-Quell-Datei
                Mitarbeiterübersicht_letztes_monat_öffnen
                            

        'Kopf der Quelldatei kopieren
        Workbooks(q_datei).Worksheets("CO01").Range("A1:L2").Copy
            Workbooks("Krankenstand.xlsm").Worksheets(Monat).Range("A1:L2").PasteSpecial Paste:=xlPasteAll
                Workbooks("Krankenstand.xlsm").Worksheets(Monat).Range("A1:L2").PasteSpecial Paste:=8
        
                    'Durchläuft die Excel-Datei von unten nach oben bis zur letzten belegten Zeile
                        For Zeile = Range("E" & Rows.Count).End(xlUp).Row To 2 Step -1
                            
                            Workbooks(q_datei).Activate
                            
                                'Selektionskriterium Kostenstelle
                                    If Range("E" & Zeile) = 1605 Or Range("E" & Zeile) = 1830 Then
                                        
                                        Workbooks(q_datei).Worksheets("CO01").Range("A" & Zeile & ":L" & Zeile).Copy
                        
                                            'Sucht die erste leere Zeile des Blattes "Mitarbeiter" anhand der Spalte "A"
                                                 ZielZeile = Workbooks("Krankenstand.xlsm").Worksheets(Monat).Cells(Rows.Count, 1).End(xlUp).Row + 1
                                                
                                                    'Fügt die selektierten Werte in die //!!Name!!// Datei ein
                                                        Workbooks("Krankenstand.xlsm").Worksheets(Monat).Range("A" & ZielZeile).PasteSpecial Paste:=xlAll

                                    
            End If
        Next
        'Quelldatei wieder schließen
            Workbooks(q_datei).Close SaveChanges:=False
                MsgBox "Die Daten vom " & Monat & " wurden eingefügt!"
    
End Sub
                            
Sub daten_kopieren_aktueller_Monat()

Monat = ersterTag_aktuellesMonat
    q_datei = Monat & "_Mitarbeiterübersicht.xlsx"
        'Öffnet die Excel-Quell-Datei
            Mitarbeiterübersicht_diesen_monat_öffnen

                'Kopf der Quelldatei kopieren
                    Workbooks(q_datei).Worksheets("CO01").Range("A1:L2").Copy
                        Workbooks("Krankenstand.xlsm").Worksheets(Monat).Range("A1:L2").PasteSpecial Paste:=xlPasteAll
                            Workbooks("Krankenstand.xlsm").Worksheets(Monat).Range("A1:L2").PasteSpecial Paste:=8
                    
                                'Durchläuft die Excel-Datei von unten nach oben bis zur letzten belegten Zeile
                                    For Zeile = Range("E" & Rows.Count).End(xlUp).Row To 2 Step -1
                                        
                                        Workbooks(q_datei).Activate
                                        
                                            'Selektionskriterium Kostenstelle
                                                If Range("E" & Zeile) = 1605 Or Range("E" & Zeile) = 1830 Then
                                                    
                                                    Workbooks(q_datei).Worksheets("CO01").Range("A" & Zeile & ":L" & Zeile).Copy
                                    
                                                        'Sucht die erste leere Zeile des Blattes "Mitarbeiter" anhand der Spalte "A"
                                                             ZielZeile = Workbooks("Krankenstand.xlsm").Worksheets(Monat).Cells(Rows.Count, 1).End(xlUp).Row + 1
                                                            
                                                                'Fügt die selektierten Werte in die //!!Name!!// Datei ein
                                                                    Workbooks("Krankenstand.xlsm").Worksheets(Monat).Range("A" & ZielZeile).PasteSpecial Paste:=xlAll

                                    
            End If
        Next
        'Quelldatei wieder schließen
            Workbooks(q_datei).Close SaveChanges:=False
                MsgBox "Die Daten vom " & Monat & " wurden eingefügt!"
                    With Application
                        .EnableEvents = True
                        .Calculation = xlCalculationAutomatic
                        .ScreenUpdating = True
                    End With
    
End Sub


Function Mitarbeiterübersicht_letztes_monat_öffnen()

Dim datum As Date
Dim Pfad As String
Dim quelldatei As String
    'Ruft die Funktion 'ersterTag_letztesMonat' auf
        datum = ersterTag_letztesMonat

            Pfad = "C:\Users\_name_\Mitarbeiterübersicht\Mitarbeiterübersicht\Originale\"

            'Die Quelldatei entspricht der Datei mit dem neuesten Datum
                quelldatei = Pfad & datum & "_Mitarbeiterübersicht.xlsx"
                    Workbooks.Open quelldatei

End Function

Function Mitarbeiterübersicht_diesen_monat_öffnen()

Dim datum As Date
Dim Pfad As String
Dim quelldatei As String

    'Ruft die Funktion 'ersterTag_letztesMonat' auf
        datum = ersterTag_aktuellesMonat

            Pfad = "C:\Users\_name_\Desktop\Mitarbeiterübersicht\Mitarbeiterübersicht\Originale\"

            'Die Quelldatei entspricht der Datei mit dem neuesten Datum
                quelldatei = Pfad & datum & "_Mitarbeiterübersicht.xlsx"
                    Workbooks.Open quelldatei

End Function

Function ersterTag_letztesMonat() As String

Dim LastDay As Date

LastDay = DateSerial(Year(Date), Month(Date), 0)
ersterTag_letztesMonat = LastDay - Day(LastDay) + 1

End Function

Function ersterTag_aktuellesMonat() As Date

ersterTag_aktuellesMonat = DateSerial(Year(Date), Month(Date), 1)

End Function

Public Function MsgBox_popup(text As String)
      Dim objWSH As Object
        Set objWSH = CreateObject("WScript.Shell")
            objWSH.popup text, 1
                Set objWSH = Nothing
End Function

Sub hinten_anfuegen()

Dim anzahl_sheets As Integer
anzahl_sheets = Sheets.Count 'Anzahl der vorhanden Blätter
This.Add after:=Sheets(anzahl_sheets) 'Sheet hizufügen
End Sub

        

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Excel Stürzt bei Makro Ausführung per Button ab
15.11.2018 11:59:48 Gast7046
NotSolved
15.11.2018 13:45:46 Verfasser
NotSolved