Hallo Céline,
ich habe eben erst deine Antwort entdeckt. Meistens steht deer neueste Beitrag am Ende der Auflistung, so dass ich deine Antwort übersah.
Ich vermute, dein Problem ist, dass nach einer Kopie der Werte aus den Tabellen mögliche bisherige Einträge in den Arrays durch die Anweisungen hinter Select Case gelöscht werden.
Ich habe dein Makro etwas umgestellt und gestrafft. Gegenüber 6 Arrays nom1-6 erspart ein dreidimensionales Array nom(i,a,b) Schreibarbeit, so dass ich dieses eingeführt habe.
Ich würde die Daten nicht in Tabellen1-6, sondern in einer Datei, z.B. "Kalenderdatei", speichern.
Ferner prüfe ich, ob das Makro an einem Tag schon verwendet wurde. Dazu speichere ich auch das Datum in der Datei. Nur wenn es noch nicht verwendet wurde, wird die Initialisierung des Kalenders gestartet.
Müsstest du dabei nicht alle Zeitzeilen deiner Tabelle durchlaufen? Dann kannst du "'" vor "for b=..." und "next b" entfernen.
Ablauf:
1. Einlesen der bisherigen Daten, sofern es solche gibt
2. An einem neuen Tag Initialisieren aller Zeitzeilen des Kalenders, sonst Beibehalten der alten Daten
3. Rückschreiben der nom-Werte für den Tag in die Kalendertabelle
4. Übernahme des Eintrags eines Mitarbeiters
5. Speichern der Werte
Ich konnte meinen Vorschlag nicht testen. Daher kann es sein, dass ich etwas übersehen habe oder dass ich auch dein Ziel nicht vollständig ableiten konnte.
'1.
Kalenderdatei = "C:\...\Kalenderdaten.dat" 'Pfad ergänzen!
Set Fso = CreateObject("Scripting.FileSystemObject") 'Zugriff auf das Dateiensystem
If Fso.FileExists(Kalenderdatei) Then 'wenn es die Datei schon gibt, werden die Daten eingelesen
Set Fso = Nothing
f = FreeFile
Open Kalenderdatei For Input As #f
Input #f, Datum
For i = 1 To 6
For a = 0 To 30
For b = 0 To 17
Input #f, nom(i, b, a)
Next b
Next a
Next i
Close #f
End If
'2.
If Datum kleiner größer Date Then 'Zeichen einsetzen
'for b=0 to 17'? Initialisierung aller Zeitzeilen des Tages
b = zeile - 8 'falls du Zeile schon vorher festgelegt hast, will ich den Wert nicht für den Laufindex ändern
For i = 1 To Val(Right(Cells(zeile + 24, Tag), 1))
nom(i, b, Tag - 2) = ""
Next i
For i = Val(Right(Cells(zeile + 24, Tag), 1)) + 1 To 6
nom(i, b, Tag - 2) = "belegt" 'mein Kalender fängt bei Zeile 8 an, deswegen mache ich bei meinen virtuellen Tablle die bei 0 anfangen -8
Next i
'next b'?
Datum = Date
End If
'3.
For i=1 to 6
For b = 8 To 25
if nom(i, b - 8, Tag - 2) kleiner größer "belegt" then Cells(b, Tag) = Cells(b, Tag)+" / "nom(i, b - 8, Tag - 2)
Next b
next i
'4.
For i = 6 To 1 Step -1
If nom(i, zeile - 8, Tag - 2) = "" Then
nom(i, zeile - 8, Tag - 2) = TextBox4.Value 'textbox4 ist der name des mitarbeiters
Cells(zeile, Tag) = Cells(zeile, Tag).Value & "/" & TextBox4.Value 'Hier trägt es in die richtige Zeit un tag ein
Exit For
End If
Next i
If i = 0 Then MsgBox ("Es sind schon zuviele eingetragen maximum : " & Right(Cells(zeile + 24, Tag), 1) & " Personen um : " & z(i) & "Uhr")
'5.
f = FreeFile
Open Kalenderdatei For Output As #f
Write #f, Datum
For i = 1 To 6
For a = 0 To 30
For b = 0 To 17
Write #f, nom(i, b, a)
Next b
Next a
Next i
Close #f
Gruß
Holger
Céline schrieb am 02.07.2009 11:11:03:
So habe mal mehrere sachen probiert.. wie Du gesagt hast, habe ich dass mit den If gemacht .. soweit gut...
mit den tabelle klappt es, es trägt schön ein.
Doch im Kalender wird gar nichts eingetragen.. ich versteh es nciht mehr bin zum dumm für vba glaube ich^^
Wenn ich den Teil am schluss des codes weglasse :
Es trägt Die Namen schön im Kalender ein, (Ist ein extra tabellenblatt ("Januar"). Aber ich kann leider soviele mitarbeiter eintragen wie ich will.. die 6 Tabellen werden da nicht mehr benuzt...
Danke für deine Mühe.. :-)+
Grüße |