unerwünschte Einträge in Excel-Zellen durch VBA

Hallo

ich hab vor einiger Zeit angefangen, für die Arbeit was in Excel anzufertigen. Das habe ich jetzt aus dem alten Schema in VBA umgebaut.
Dabei funktioniert mittlerweile auch fast alles… FAST!
Ein Teil des Quellcodes habe ich unten ma aufgeführt… Genau dieser verursacht mir nämlich noch Probleme. Er wird sofort beim Start der Excel-Datei mit ausgeführt und schreibt mir komischerweise in das erste Tabellenblatt.
int_abteilung beschreibt in meinem Fall Tabellenblätter. Allerdings startet dieses immer bei 1 und wird immer um 2 erhöht, sodass er frühestens beim 3. Blatt anfangen sollte, etwas einzutragen. Auch die Prozedur fte.sub_main kann nicht dafür verantwortlich sein, da sie keine Zelleinträge macht und die Variable int_abteilung auch nicht ändert.
Das sonderbarste habe ich heute festgestellt… Ich hab die fehlerhafte Prozedur mal in Einzelschritten durchlaufen. Und siehe da, es machte mir keine sinnlosen Eintragungen auf dem ersten Tabellenblatt. Als ich die Excel-Datei allerdings erneut öffnete und alles automatisch startete, kamen wieder die selben Fehler.
Ich hoffe, irgendjemand kann mir dabei helfen.

Und entschuldigt bitte, dass der Code noch so ‚unschön‘ ist. Ich habe selber erst vor ein paar Wochen mit VBA angefangen.

Danke schon Mal (und anbei der fehlerhafte Code)

Private Sub sub\_aktuelle()

 For int\_standorte\_gesamt = 1 To 45 'vorhandene Standorte werden eingelesen & Zaehler auf 0 gesetzt
 str\_standort(int\_standorte\_gesamt) = tbl\_einstellungen.Cells(int\_standorte\_gesamt + 2, 2).Value
 str\_standort\_kz(int\_standorte\_gesamt) = tbl\_einstellungen.Cells(int\_standorte\_gesamt + 2, 3)
 tbl\_einstellungen.Cells(int\_standorte\_gesamt + 2, 6).Value = ""
 int\_standort(int\_standorte\_gesamt) = 0
 Next int\_standorte\_gesamt

 For int\_abteilung = 1 To int\_anzahl\_abteilungen 'durchlaeuft alle Abteilungen
 For int\_team = 1 To int\_anzahl\_teams 'durchlaeuft alle Teams der aktuellen Abteilung
 For int\_standorte\_gesamt = 1 To 45 'vergleicht Standort des aktuellen Teams mit gespeicherten
 If Worksheets(int\_abteilung + 2).Cells(4, (int\_team \* 6) - 4).Value Like str\_standort(int\_standorte\_gesamt) Then
 int\_standort(int\_standorte\_gesamt) = int\_standort(int\_standorte\_gesamt) + 1
 Worksheets(int\_abteilung + 2).Cells(3, (int\_team \* 6) - 4) = "Team\_" & int\_team & "\_" & str\_standort\_kz(int\_standorte\_gesamt)
 End If
 Next int\_standorte\_gesamt
 Next int\_team
 Next int\_abteilung


 For int\_standorte\_gesamt = 1 To 45 'Anzahl vorhandener Standorte wird eingetragen
 tbl\_einstellungen.Cells(int\_standorte\_gesamt + 2, 4) = int\_standort(int\_standorte\_gesamt)
 If int\_standort(int\_standorte\_gesamt) 0 Then
 int\_standorte = int\_standorte + 1
 End If
 Next int\_standorte\_gesamt

 ReDim str\_vorhandene\_standorte(int\_standorte)
 int\_standorte = 0

 For int\_standorte\_gesamt = 1 To 45 'durchlaeuft alle Standorte
 If int\_standort(int\_standorte\_gesamt) 0 Then 'aktueller Standort vorhanden?
 int\_standorte = int\_standorte + 1
 str\_vorhandene\_standorte(int\_standorte) = str\_standort(int\_standorte\_gesamt) '...vorhanden -\> speichern
 tbl\_einstellungen.Cells(int\_standorte + 2, 6) = str\_vorhandene\_standorte(int\_standorte) 'in Liste eintragen
 tbl\_standorte.Cells(4, (int\_standorte \* 5) + 1) = str\_vorhandene\_standorte(int\_standorte) 'in Standort-Sheet eintragen
 End If
 Next int\_standorte\_gesamt

End Sub

Private Sub sub\_berechnen\_ausgabe()

 For int\_standorte\_gesamt = 1 To int\_standorte
 int\_anzahl\_teamleiter = 0
 dbl\_teamleiter\_fte = 0
 int\_anzahl\_mitarbeiter = 0
 dbl\_mitarbeiter\_fte = 0
 int\_mitarbeiter = 1 'fest auf 1 gesetzt da Teamleiter

 'Teamleiterberechnung
 deklaration.sub\_main 'Anzahlen & FTEs der Kennzeichen nullen

 For int\_abteilung = 1 To int\_anzahl\_abteilungen
 For int\_team = 1 To int\_anzahl\_teams
 If Worksheets(int\_abteilung + 2).Cells(4, (int\_team \* 6) - 4) = str\_vorhandene\_standorte(int\_standorte\_gesamt) Then
 fte.sub\_main
 dbl\_teamleiter\_fte = dbl\_teamleiter\_fte + dbl\_einzel\_fte
 End If
 Next int\_team
 Next int\_abteilung
 int\_anzahl\_teamleiter = int\_anzahl\_mitarbeiter

 For int\_zaehler = 1 To 14 'speichert die Kennzeichenanzahlen & -FTEs der Teamleiter
 int\_kz\_teamleiter(int\_zaehler) = int\_kz(int\_zaehler)
 dbl\_kz\_teamleiter(int\_zaehler) = dbl\_kz(int\_zaehler)
 Next int\_zaehler

 'Mitarbeiterberechnung
 int\_anzahl\_mitarbeiter = 0
 deklaration.sub\_main 'Anzahlen & FTEs der Kennzeichen nullen

 For int\_abteilung = 1 To int\_anzahl\_abteilungen
 For int\_team = 1 To int\_anzahl\_teams
 If Worksheets(int\_abteilung + 2).Cells(4, (int\_team \* 6) - 4).Value = str\_vorhandene\_standorte(int\_standorte\_gesamt) Then
 For int\_mitarbeiter = 2 To int\_max\_mitarbeiter 'durchlaeuft alle Mitarbeiter ohne Teamleiter im aktuellen Team
 fte.sub\_main
 dbl\_mitarbeiter\_fte = dbl\_mitarbeiter\_fte + dbl\_einzel\_fte
 Next int\_mitarbeiter
 End If
 Next int\_team
 Next int\_abteilung

 For int\_zaehler = 1 To 14 'speichert die Kennzeichenanzahlen & -FTEs der Teamleiter
 int\_kz\_mitarbeiter(int\_zaehler) = int\_kz(int\_zaehler)
 dbl\_kz\_mitarbeiter(int\_zaehler) = dbl\_kz(int\_zaehler)
 Next int\_zaehler

 tbl\_standorte.Cells(8, (int\_standorte\_gesamt \* 5) + 3) = int\_anzahl\_mitarbeiter + int\_anzahl\_teamleiter
 tbl\_standorte.Cells(8, (int\_standorte\_gesamt \* 5) + 4) = dbl\_mitarbeiter\_fte + dbl\_teamleiter\_fte
 tbl\_standorte.Cells(9, (int\_standorte\_gesamt \* 5) + 3) = int\_anzahl\_teamleiter
 tbl\_standorte.Cells(9, (int\_standorte\_gesamt \* 5) + 4) = dbl\_teamleiter\_fte
 tbl\_standorte.Cells(10, (int\_standorte\_gesamt \* 5) + 3) = int\_anzahl\_mitarbeiter
 tbl\_standorte.Cells(10, (int\_standorte\_gesamt \* 5) + 4) = dbl\_mitarbeiter\_fte

 For int\_zaehler = 1 To 6 'traegt die Kennzeichendaten ein
 tbl\_standorte.Cells(((int\_zaehler + 4) \* 3) + 1, (int\_standorte\_gesamt \* 5) + 3) = int\_kz\_teamleiter(int\_zaehler)
 tbl\_standorte.Cells(((int\_zaehler + 4) \* 3) + 1, (int\_standorte\_gesamt \* 5) + 4) = dbl\_kz\_teamleiter(int\_zaehler)
 tbl\_standorte.Cells(((int\_zaehler + 11) \* 3), (int\_standorte\_gesamt \* 5) + 3) = int\_kz\_mitarbeiter(int\_zaehler)
 tbl\_standorte.Cells(((int\_zaehler + 11) \* 3), (int\_standorte\_gesamt \* 5) + 4) = dbl\_kz\_mitarbeiter(int\_zaehler)
 Next int\_zaehler
 Next int\_standorte\_gesamt

End Sub

Ein Teil des Quellcodes habe ich unten ma aufgeführt… Genau
dieser verursacht mir nämlich noch Probleme. Er wird sofort
beim Start der Excel-Datei mit ausgeführt und schreibt mir
komischerweise in das erste Tabellenblatt.
int_abteilung beschreibt in meinem Fall
Tabellenblätter. Allerdings startet dieses
immer bei 1 und wird
immer um 2 erhöht, sodass er frühestens
beim 3. Blatt anfangen sollte, etwas einzutragen.

Hi Dennize,

du könntest ein Blatt „Pruef“ anlegen, dann schreibst du zuoberst in jede Prozedur alle deiner Module

With Worksheets("Pruef")
 .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1) = "Prozedurname"
End With

In das Dokumentmodul von Blatt 1 dann

Private Sub Worksheet_Change(ByVal Target As Range)
Stop
End Sub

Wenn was in Blatt 1 geschrieben wurde müßtest du im Blatt „pruef“ am Eintrag in A2 erkennen können welche Sub da grad was in Blatt 1 schrieb.

Außer, EnableEvents ist auf False gesetzt, was du in jeder prozedur vor und nach jedem Aufruf von worksheets(x +2) verhindern kannst durch Wechsel von false auf true und zurück.

Ein Tipp der damit nix zu tun hat, immer wenn du Cells(zei,Spa) benutzt deklariere beide als Long, denn Cells wandelt die sowieso in Long um egal ob du sie als byte, integr deklariert hast.
Diese Umwandlungszeit kannst du dir sparen. Logisch merkst du bei Kurzcode nix von der Zeitersparnis.

Tipp2, ich kenne Excelforen, da hättest du manchmal, gerade bei längerem Code, als Antwort bekommen, Code ohne Option Explicit schaue ich mir gar nicht erst an, Punkt.
Also benutze es bitte.

Wenn das mit dem Blatt „Pruef“ nicht weiterhilft, specke mal die Mappe ab, anonymisiere ggfs Daten und lade sie hoch mit FAQ:2861 o.ä.

Welche XL-Version hast du?

Achja, ich schaue mir auch ungern viel Code ohne Option Explicit an:smile:

Gruß
Reinhard