Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1696to1700
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 / Exceldatei funktioniert nur sporadisch

Makro / Exceldatei funktioniert nur sporadisch
19.06.2019 09:38:43
Daniel
Hallo liebe VBA-Gemeinde,
ich erstelle eine Excel-Datei, in der verschiedene Mitarbeiter ihre Projekte eintragen.
Mit Hilfe von VBA sollen diese Projekte je nach Benutzereingabe gefiltert und in einem separaten Tabellenblatt abgelegt werden. Das funktioniert schon wunderbar.
Dieses Tool soll auch in mehreren Abteilungen verwendet werden, weshalb man über UserFormen Mitarbeiter hinzufügen sowie entfernen kann.
Hinzufügen: Nachname des Mitarbeiters wird in eine Textbox eingetragen und bei Click auf einen Command-Button in einen als "Tabelle" formatierten Bereich übertragen (Name dessen Bereichs = "Mitarbeiterauswahl"). Dieses Tabellenblatt heißt "Team-Uebersicht".
Weiterhin wird eine Vorlage kopiert und das neue Tabellenblatt nach dem Nachnamen des neuen Mitarbeiters umbenannt.
Entfernen: Nachname des Mitarbeiters wird in einer ComboBox ausgewählt (Quelle: "Mitarbeiterauswahl").
Per VBA wird die Mitarbeiterauswahl mit Hilfe einer FOR-Schleife durchsucht und der Name aus dem Bereich gelöscht.
Weiterhin wird das Tabellenblatt mit dem Nachnamen des Mitarbeiters gelöscht.
Das Problem:
In 3 von 5 Versuchen (Mitarbeiter hinzufügen, entfernen, etc.) funktioniert der Code / Ablauf ohne Probleme.
In den 2 anderen Versuchen kann es sein, dass
a) Nachdem ein Mitarbeiter hinzugefügt, die Datei gespeichert und auf Datei schließen geklickt wurde folgende Fehlermeldung erscheint:
"Microsoft Excel funktioniert nicht mehr. Bitte warten, während das Problem von Windows an Microsoft übermittelt wird..."
Öffnet man diese Excel-Datei wieder, dann öffnet sich eine Datei mit dem Namen "Mappe1" und der Option, das Dokument vom letzten Speicherpunkt wiederherzustellen.
Code:
Private Sub CommandButton_MitarbeiterHinzufuegen_Click()
Dim NeuerMitarbeiter As String
NeuerMitarbeiter = Me.TextBox_MitarbeiterHinzufuegen.Text        'Eingabe von Nutzer (Name)  _
wird in Variable übergeben
With ThisWorkbook
.Worksheets("Team-Uebersicht").Cells(Sheets("Team-Uebersicht").Rows.Count, 1).End(xlUp). _
Offset(1, 0) = NeuerMitarbeiter   'Einfügen des Mitarbeiternamens in Dropdown-Menü
.Worksheets("MitarbeiterAnlage").Copy Before:=Sheets(1)         'Kopiert Tabellenblatt- _
Vorlage (dieses ist ausgeblendet)
.Worksheets("MitarbeiterAnlage (2)").Name = NeuerMitarbeiter    'Umbennen von Tabellenblatt- _
Vorlage (2) in Namen von neuem Mitarbeiter
.Worksheets(NeuerMitarbeiter).Visible = True                    'Blendet neues  _
Tabellenblatt ein
.Worksheets(NeuerMitarbeiter).Range("B3") = NeuerMitarbeiter    'Name des neuen  _
Mitarbeiters in Spalte 2 einfügen
.Worksheets(NeuerMitarbeiter).Activate                          'Aktiviert Tabellenblatt  _
von neuem Mitarbeiter
End With
Unload UserFormHinzufuegen
Unload UserFormEinstellungen
End Sub

b) Wenn ein Mitarbeiter entfernt werden soll, dann stoppt der Code beim Löschen des jeweiligen Mitarbeitertabellenblatts.
Code:
Private Sub CommandButton_MitarbeiterEntfernen_Click()
Dim AnzahlMitarbeiter As Double
Dim i As Double
AnzahlMitarbeiter = WorksheetFunction.CountA(Worksheets("Team-Uebersicht").Range("A:A"))     _
_
_
'Zählt die Anzahl der Mitarbeiter, die in dem Projektteam angelegt sind
'Nö  _
_
_
tig, um den Bereich einzugrenzen, der von FOR-Schleife durchsucht werden soll
If Me.ComboBox_Mitarbeiterauswahl  "Alle" Then
If MsgBox("Soll diese Person und alle zugehörigen Projekte wirklich entfernt werden?",   _
_
_
vbYesNo) = vbYes Then
Application.DisplayAlerts = False
ThisWorkbook.Worksheets(Me.ComboBox_Mitarbeiterauswahl.Text).Delete      ' _
Tabellenblatt löschen, wenn nicht 0-Alle ausgewählt
Application.DisplayAlerts = True
For i = 1 To AnzahlMitarbeiter
If ThisWorkbook.Worksheets("Team-Uebersicht").Cells(i, 1).Value = Me. _
ComboBox_Mitarbeiterauswahl.Text Then        'Durchläuft Dropdownmenü und sucht nach ausgewä _
hltem Namen
ThisWorkbook.Worksheets("Team-Uebersicht").Cells(i, 1).Clear             _
_
_
'Ausgewählter Name wird gelöscht
Else
End If
Next i
Else
End If
Else
MsgBox "Es können nicht alle Mitarbeiter gelöscht werden!"
End If
End Sub

Diese Fehler passieren unabhängig voneinander und absolut zufällig. Ohne Vorankündigung.
Könnte jemand weiterhelfen?
Vielen Dank im Voraus und Gruß aus Oberbayern.
Daniel

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro / Exceldatei funktioniert nur sporadisch
19.06.2019 15:11:41
fcs
Hallo Daniel,
warum es gelegentlich zum Absturz von Excel kommt ?
Ich deine Makros mal um ein paar Prüfungen ergänzt (ungetestet), um zumindests offentsichtliche Fehler/Probleme zu vemeiden. (Blattname fehlt oder Eingabe ist leer).
LG
Franz
Private Sub CommandButton_MitarbeiterHinzufuegen_Click()
Dim NeuerMitarbeiter As String
NeuerMitarbeiter = Me.TextBox_MitarbeiterHinzufuegen.Text     'Eingabe von Nutzer (Name) _
wird in Variable übergeben
If Trim(NeuerMitarbeiter)  "" Then
With ThisWorkbook
With .Worksheets("Team-Uebersicht")
.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0) = NeuerMitarbeiter _
'Einfügen des Mitarbeiternamens in Dropdown-Menü
End With
.Worksheets("MitarbeiterAnlage").Copy Before:=Sheets(1)         'Kopiert Tabellenblatt- _
Vorlage (dieses ist ausgeblendet)
With .Sheets(1)
.Visible = True                    'Blendet neues Tabellenblatt ein
.Name = NeuerMitarbeiter    'Umbennen von Tabellenblatt- _
Vorlage (2) in Namen von neuem Mitarbeiter
.Range("B3") = NeuerMitarbeiter    'Name des neuen Mitarbeiters in Spalte 2 einfügen
.Activate     'Aktiviert Tabellenblatt von neuem Mitarbeiter
End With
End With
Else
MsgBox "Es ist kein neuer Mitarbeitername in Textbox eingetragen"
Exit Sub
End If
Unload UserFormHinzufuegen
Unload UserFormEinstellungen
End Sub
Private Sub CommandButton_MitarbeiterEntfernen_Click()
Dim AnzahlMitarbeiter As Double
Dim i As Double
Dim sName As String, wksName As Worksheet
AnzahlMitarbeiter = Application.WorksheetFunction.CountA( _
ThisWorkbook.Worksheets("Team-Uebersicht").Range("A:A")) _
'Zählt die Anzahl der Mitarbeiter, die in dem Projektteam angelegt sind
'Nötig, um den Bereich einzugrenzen, der von FOR-Schleife durchsucht werden soll
If Me.ComboBox_Mitarbeiterauswahl.ListIndex  -1 Then
If Me.ComboBox_Mitarbeiterauswahl  "Alle" Then
sName = Me.ComboBox_Mitarbeiterauswahl.Text
For Each wksName In ThisWorkbook.Worksheets
If LCase(sName) = LCase(wksName) Then
Exit For
End If
If Not wksName Is Nothing Then
If Not wksName.Visible = xlSheetVisible Then wksName.Visible = xlSheetVisible
If MsgBox("Soll die Person """ & sName _
& """ und alle zugehörigen Projekte wirklich entfernt werden?", _
vbYesNo) = vbYes Then
Application.DisplayAlerts = False
wksName.Delete      ' Tabellenblatt löschen, wenn nicht 0-Alle ausgewählt
Application.DisplayAlerts = True
With ThisWorkbook.Worksheets("Team-Uebersicht")
For i = 1 To AnzahlMitarbeiter
If .Cells(i, 1).Value = sName Then 'Durchläuft Dropdownmenü und sucht _
nach ausgewähltem Namen
.Cells(i, 1).ClearContents _
'Ausgewählter Name wird gelöscht
Else
End If
Next i
End With
Else
End If
Else
MsgBox "Blatt mit Name """ & sName & """ nicht gefunden!"
End If
Else
MsgBox "Es können nicht alle Mitarbeiter gelöscht werden!"
End If
Else
MsgBox "Bitte einen Mitarbeiter in der Combobox auswählen!"
End If
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige