Makro / Exceldatei funktioniert nur sporadisch
19.06.2019 09:38:43
Daniel
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