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:
1259
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: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
'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