Thema Datum  Von Nutzer Rating
Antwort
01.07.2009 10:19:53 Célline
NotSolved
01.07.2009 13:03:22 Holger
NotSolved
Rot Aw:Aw:Virtuelle tabellen automatisch gelöscht
02.07.2009 10:38:30 Holger
NotSolved
02.07.2009 07:58:20 Céline
NotSolved
02.07.2009 11:11:03 Céline
NotSolved
04.07.2009 11:28:46 Holger
NotSolved

Ansicht des Beitrags:
Von:
Holger
Datum:
02.07.2009 10:38:30
Views:
1322
Rating: Antwort:
  Ja
Thema:
Aw:Aw:Virtuelle tabellen automatisch gelöscht
Hallo Célline,
noch einmal: wenn du
For a = 0 To 30
For b = 0 To 17
nom1(b, a) = Tabelle1.Cells(b + 2, a + 2)
nom2(b, a) = Tabelle2.Cells(b + 2, a + 2)
...
Next b
Next a
ausführst, nachdem du die neuen Daten eingelesen, aber noch nicht in den Tabellen 1 - 6 gespeichert hast, stehen in den nom-Arrays die bisher in diesen Tabellen gespeicherten alten Werte.
Ich gehe dabei davon aus, dass die Tabelle mit deinem Kalender anders, also nicht Tabelle 1 bis Tabelle 6 heißt, denn ansonsten werden die Zellen natürlich mit den For-Next-Schleifen am Schluss (Tabelle1.Cells(b + 2, a + 2) = nom1(b, a), ...) überschrieben. Ich sehe sonst eigentlich keinen Grund, warum die Cells(Zeile,Tag) überschrieben oder gelöscht werden, es sei denn, dass du dies mit einem nicht übermittelten Code durchführst.
Wenn du alten Werte brauchst, lies die Tabellen 1 - 6 zu Beginn deines Makros in die nom-Arrays ein oder prüfe, ob in den nom-Elementen etwas steht, z.B.:
For a = 0 To 30
For b = 0 To 17
if nom1(b, a)="" then nom1(b, a) = Tabelle1.Cells(b + 2, a + 2)
if nom2(b, a)="" then nom2(b, a) = Tabelle2.Cells(b + 2, a + 2)
...
Next b
Next a

Gruß
Holger





Holger schrieb am 01.07.2009 13:03:22:

Hallo Célline,
dein Deutsch ist besser als das, was so mancher anderer Nutzer des Forums von sich gibt.
Ich gehe davon aus, dass du die Arrays nom1 bis nom6 als virtuelle Tabellen bezeichnest. Diese sind nur zur Laufzeit deines Makros mit Daten gefüllt, es sei denn, du hast sie mit Static deklariert. Dein Beispiel habe ich allerdings nicht vollständig analysiert, aber wenn ich dein Programm in den letzten beiden Blöcken richtig verstehen, schreibt du zuerst die bereits in Tabelle1 bis 6 gespeichert Daten in deine Arrays, um danach den Inhalt der Arrays wieder in die Tabellen zu schreiben. Beim ersten Schritt gehen natürlich alle aktuellen Inhalte der Arrays nom1 -6 verloren, weil sie mit den alten Daten in den Tabellen 1-6 überschrieben werden. Wenn du vorher keine Eintragungen in diesen Tabellen 1-6 gemacht hast, sind die Zellen sogar leer und danach deine Arrays auch.
Du solltest also den vorletzten Block mit den "nom1(b, a) = Tabelle1.Cells(b + 2, a + 2)" weglessen.
Damit kannst du nur deine in den Tabellen 1-6 gespeicherten Werte wieder in deine Arrays z.B. bei einem neuen Programmstart zurückschreiben, falls so etwas gefordert ist.
Gruß
Holger


Célline schrieb am 01.07.2009 10:19:53:

Guten morgen zusammen,

Als erste entschuldige ich mich für die Deutschfehler, ich bin französin.
Ich habe ein kleines Problem mit meinem vba code.
Ich habe eine Buchungsliste gemacht, in meiner excel datei habe ich einen Kalender mit jeweils jeden Tag für die Spalten und in den Zeilen sind die Zeiten, von 8h bis 16h30.
In dieser Tabelle werden sich mitarbeiter in den verschiedenen Tagen und Zeiten eintragen.
Ich habe auch immer eine maximale anzahl an Mitarbeiter die sich in der selben Zeit eintragen können.
Dies variert, immer zwischen max 2 bis max 6 mitarbeiter.
Deshalb habe ich 6 virtuelle Tabellen erstellt, wo ich jeweils die Informationen der mitarbeiter abspeicher kann.
Ich mach mal ein stück code rein, dann ist es leichter zu verstehen (hoffe ich)


Select Case Right(Cells(Zeile + 24, Tag), 1) '<---Es handelt sich hier um die maximale anzahl, dass gibt der Teamleiter ein.

Case Is < 2
nom1(Zeile - 8, Tag - 2) = "" 'die zeile und der tag wird ausgerechnet. der mitarbeiter gibt in einen Userform ein von-bis-datum-name er arbeiten will
nom2(Zeile - 8, Tag - 2) = "belegt" 'mein Kalender fängt bei Zeile 8 an, deswegen mache ich bei meinen virtuellen Tablle die bei 0 anfangen -8
nom3(Zeile - 8, Tag - 2) = "belegt"
nom4(Zeile - 8, Tag - 2) = "belegt"
nom5(Zeile - 8, Tag - 2) = "belegt"
nom6(Zeile - 8, Tag - 2) = "belegt"

Case Is < 3

nom1(Zeile - 8, Tag - 2) = ""
nom2(Zeile - 8, Tag - 2) = ""
nom3(Zeile - 8, Tag - 2) = "belegt"
nom4(Zeile - 8, Tag - 2) = "belegt"
nom5(Zeile - 8, Tag - 2) = "belegt"
nom6(Zeile - 8, Tag - 2) = "belegt"


Case Is < 4

nom1(Zeile - 8, Tag - 2) = ""
nom2(Zeile - 8, Tag - 2) = ""
nom3(Zeile - 8, Tag - 2) = ""
nom4(Zeile - 8, Tag - 2) = "belegt"
nom5(Zeile - 8, Tag - 2) = "belegt"
nom6(Zeile - 8, Tag - 2) = "belegt"

Case Is < 5

nom1(Zeile - 8, Tag - 2) = ""
nom2(Zeile - 8, Tag - 2) = ""
nom3(Zeile - 8, Tag - 2) = ""
nom4(Zeile - 8, Tag - 2) = ""
nom5(Zeile - 8, Tag - 2) = "belegt"
nom6(Zeile - 8, Tag - 2) = "belegt"


Case Is < 6
nom1(Zeile - 8, Tag - 2) = ""
nom2(Zeile - 8, Tag - 2) = ""
nom3(Zeile - 8, Tag - 2) = ""
nom4(Zeile - 8, Tag - 2) = ""
nom5(Zeile - 8, Tag - 2) = ""
nom6(Zeile - 8, Tag - 2) = "belegt"

Case Is = 6


nom1(Zeile - 8, Tag - 2) = ""
nom2(Zeile - 8, Tag - 2) = ""
nom3(Zeile - 8, Tag - 2) = ""
nom4(Zeile - 8, Tag - 2) = ""
nom5(Zeile - 8, Tag - 2) = ""
nom6(Zeile - 8, Tag - 2) = ""


End Select


If nom6(Zeile - 8, Tag - 2) = "" Then
nom6(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
Else
If nom5(Zeile - 8, Tag - 2) = "" Then
Cells(Zeile, Tag) = Cells(Zeile, Tag).Value & "/" & TextBox4.Value
nom5(Zeile - 8, Tag - 2) = TextBox4.Value
Else
If nom4(Zeile - 8, Tag - 2) = "" Then
Cells(Zeile, Tag) = Cells(Zeile, Tag).Value & "/" & TextBox4.Value
nom4(Zeile - 8, Tag - 2) = TextBox4.Value
Else
If nom3(Zeile - 8, Tag - 2) = "" Then
Cells(Zeile, Tag) = Cells(Zeile, Tag).Value & "/" & TextBox4.Value
nom3(Zeile - 8, Tag - 2) = TextBox4.Value
Else
If nom2(Zeile - 8, Tag - 2) = "" Then
Cells(Zeile, Tag) = Cells(Zeile, Tag).Value & "/" & TextBox4.Value
nom2(Zeile - 8, Tag - 2) = TextBox4.Value
Else
If nom1(Zeile - 8, Tag - 2) = "" Then
Cells(Zeile, Tag) = Cells(Zeile, Tag).Value & "/" & TextBox4.Value
nom1(Zeile - 8, Tag - 2) = TextBox4.Value
Else

MsgBox ("Es sind schon zuviele eingetragen maximum : " & Right(Cells(Zeile + 24, Tag), 1) & " Personen um : " & z(i) & "Uhr")
End If
End If
End If
End If
End If
End If
Mein Problem ist dass die daten leider nicht in den virtuellen Tabellen bleiben, und man sieht dann nicht ob sich schon jemand anderes eingetragen hat.
Deshalb habe ich die 6 tabellen in 6 Tabellenblätter in excel gespeichert.
von dem code kommt :

For a = 0 To 30
For b = 0 To 17

nom1(b, a) = Tabelle1.Cells(b + 2, a + 2)
nom2(b, a) = Tabelle2.Cells(b + 2, a + 2)
nom3(b, a) = Tabelle3.Cells(b + 2, a + 2)
nom4(b, a) = Tabelle4.Cells(b + 2, a + 2)
nom5(b, a) = Tabelle5.Cells(b + 2, a + 2)
nom6(b, a) = Tabelle6.Cells(b + 2, a + 2)
Next b
Next a



Und am schluss

For a = 0 To 30
For b = 0 To 17
Tabelle1.Cells(b + 2, a + 2) = nom1(b, a)
Tabelle2.Cells(b + 2, a + 2) = nom2(b, a)
Tabelle3.Cells(b + 2, a + 2) = nom3(b, a)
Tabelle4.Cells(b + 2, a + 2) = nom4(b, a)
Tabelle5.Cells(b + 2, a + 2) = nom5(b, a)
Tabelle6.Cells(b + 2, a + 2) = nom6(b, a)
Next b
Next a

Aber wenn ich dass im einzelschritt durchlaufen lasse habe ich ein problem, es löscht alles wieder aus meinem Kalender raus wenn ich die Tabellenblätter wieder fülle..
Kann mir da jemand helfen? Hat jemand eine andere lösung.?

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
01.07.2009 10:19:53 Célline
NotSolved
01.07.2009 13:03:22 Holger
NotSolved
Rot Aw:Aw:Virtuelle tabellen automatisch gelöscht
02.07.2009 10:38:30 Holger
NotSolved
02.07.2009 07:58:20 Céline
NotSolved
02.07.2009 11:11:03 Céline
NotSolved
04.07.2009 11:28:46 Holger
NotSolved