Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1332to1336
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

Excel VBA Daten werden erst im 2. Lauf übernommen

Excel VBA Daten werden erst im 2. Lauf übernommen
25.09.2013 16:35:30
Willi
Hallo an alle.
Erstmal, hier ist meine Datei mit anonymisierten Daten.
https://www.herber.de/bbs/user/87415.xlsm
Wenn sich jemand die Userform MA_Projekte_Wertemenge anschauen könnte, das wäre sehr nett.
In der Userform werden dynamisch Checkboxen erstellt, je nachdem wie viele Einträge es zu einer bestimmten Kategorie in der Tabelle "Static" gibt.
Die checkboxen sind schon vorneweg markiert, falls es einen solchen Eintrag für den entsprechenden User in der Tabelle Projektmitarbeiter-Info gibt.
Beim klick auf "fertig" sollen jetzt die neu gesetzten Checkboxen in die Tabelle übertragen werden bzw. Einträge gelöscht, falls die Checkbox deaktiviert wird.
Seltsamerweise funktioniert dies, jedoch erst beim zweiten Durchlauf, bzw. einen Durchlauf zu spät (beim dritten Durchlauf finden die Aktualisierungen statt, die eigentlich im zweiten entsprechend der markierten Checkboxen hätten ablaufen sollen)
Im Debugmodus habe ich festgestllt, dass die Values für die Checkboxen dann nicht richtig übergeben werden, also
MA_Projekte_Wertemenge.Controls("CheckBox" & l).Value = True
obwohl =false zu erwarten wäre.
hier der Code für die Subs userform_initialize bzw. fertig_click:
Option Explicit
Dim i As Long 'Zähler für anzahl versch. Werte
Dim j As Long 'zum Entfernen von Checkboxen
Dim k As Long 'Zähler für Checkboxmarkierung
Dim l As Long 'Zähler für Datenaktualisierung
Sub userform_initialize()
Dim Werte As msforms.CheckBox
MA_Projekte_Wertemenge.ScrollBars = fmScrollBarsNone
MA_Projekte_Wertemenge.Kategorie = MA_Projekte_Details.Dropdown_Infotyp 'übernimmt Wert aus vorheriger userform
zeile = 2
i = 0
Do
If Worksheets("static").Cells(zeile, 1) = MA_Projekte_Wertemenge.Kategorie Then
i = i + 1
Set Werte = MA_Projekte_Wertemenge.Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
'Setze Checkbox an korrekte Position
With Werte
.Left = 10
.Top = 50 + 15 * i
.Caption = Worksheets("static").Cells(zeile, 2).Value
.Width = 300
'Checkboxmarkierung je nach Eintrag in "DC Mitarbeiter-Projektinfo"
k = 1
Do
If Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 1) = AuswahlMitarbeiterID _
And Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 2) = MA_Projektauswahl _
And Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 3) = InfotypKategorie _
And Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 4) = Werte.Caption Then
Werte.Value = True
End If
k = k + 1
Loop Until Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 1) = ""
End With
End If
zeile = zeile + 1
Loop Until Worksheets("static").Cells(zeile, 1) = ""
If i * 15 > 500 Then
MA_Projekte_Wertemenge.Height = 500
MA_Projekte_Wertemenge.ScrollBars = fmScrollBarsVertical
MA_Projekte_Wertemenge.ScrollHeight = 85 + i * 15
Else
MA_Projekte_Wertemenge.Height = 100 + i * 15
End If
End Sub
Private Sub fertig_Click()
Dim Wert_vorhanden As Boolean
Dim m As Long 'Zeile, in der Wert schon vorhanden ist
'überprüft alle Checkboxen und aktualisiert Tabelle
For l = 1 To i
If MA_Projekte_Wertemenge.Controls("CheckBox" & l).Value = True Then
'überprüft, ob Wert schon vorher vorhanden
k = 0
Wert_vorhanden = False
Do
k = k + 1
If Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 1) = AuswahlMitarbeiterID _
And Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 2) = MA_Projektauswahl _
And Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 3) = InfotypKategorie _
And Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 4) = Me.Controls(" _
CheckBox" & l).Caption Then
Wert_vorhanden = True
End If
Loop Until Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 1) = ""
'Schreibe Wert in Tabelle, falls noch nicht vorhanden
If Wert_vorhanden = False Then
Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 1) = AuswahlMitarbeiterID
Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 2) = MA_Projektauswahl
Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 3) = InfotypKategorie
Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 4) = Me.Controls("CheckBox" &  _
l).Caption
End If
Else
'Überprüft, ob Wert schon vorher vorhanden
k = 0
Wert_vorhanden = False
Do
k = k + 1
If Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 1) = AuswahlMitarbeiterID _
And Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 2) = MA_Projektauswahl _
And Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 3) = InfotypKategorie _
And Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 4) = Me.Controls(" _
CheckBox" & l).Caption Then
Wert_vorhanden = True
m = k
End If
Loop Until Worksheets("DC Mitarbeiter-Projektinfo").Cells(k, 1) = ""
If Wert_vorhanden = True Then
'löscht Zeile, falls Wert schon vorhanden
Worksheets("DC Mitarbeiter-Projektinfo").Rows(m).Delete
End If
End If
Next
'entfernt die Checkboxen
For j = 1 To i
Controls.Remove ("Checkbox" & j)
Next
MA_Projekte_Wertemenge.Hide
MA_Projekte_Details.Show
End Sub

Wer den Fehler rekonstruieren will, einfach wie folgt vorgehen:
1. auf mitarbeiter-informationen klicken
2. beliebigen "Mitarbeiter" auswähle, z.b. "1,1"
3. Mitarbeiter-Informationen bearbeiten klicken
4. Mitarbeiter-Projektinformationen bearbeiten klicken
5. In Dropdown Projektname beliebigen Eintrag (z.b. 1) auswählen
6. weiter klicken
7. beliebigen Informationstyp klicken
8. weiter klicken
9. bspw. die ersten beiden Checkboxen aktivieren
10. fertig klicken (In der Tabelle Mitarbeiter-Projektinfo tut sich nichts, obwohl es sollte)
11. nochmals weiter klicken
12. nochmals "fertig" klicken (jetzt werden die Einträge in der Tabelle erstellt, die eigentlich schon vorher hätte auftauchen müssen, unabhängig von der tatsächlichen Checkboxauswahl)
Hier im Forum zerhaut es vermutlich die Formatierung, aber wenn es sich jemand anschaut, oder auch über meine hochgeladene Datei den FEhler findet, dem bin ich sehr dankbar.
Viele Grüße

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA Daten werden erst im 2. Lauf übernommen
26.09.2013 15:18:23
ChrisL
Hi Willi
Ganz genau konnte ich das Problem nicht eruieren, aber ich habe den Eindruck, dass irgendwie nicht sauber initialisiert wird.
Ich habe es jetzt mal wie folgt versucht d.h. das UF vorher mit Unload bearbeitet, so dass es bei Show wieder neu geladen wird. Hatte den Eindruck es hilft.
Private Sub weiter_Click()
MA_Projekte_Details.Hide
Unload MA_Projekte_Wertemenge
MA_Projekte_Wertemenge.Show
End Sub

Ansonsten würde ich dir empfehlen, die Datei mal ordentlich abzuspecken. So könnte dir sicherlich effizienter geholfen werden.
Gruss
Chris

Anzeige
AW: Excel VBA Daten werden erst im 2. Lauf übernommen
26.09.2013 16:38:18
Willi
Danke Chris!
Konnte das Problem heute mittag schon anders lösen, indem ich den Code effizienter geschrieben habe.
Aber gut zu wissen, dass es diesen Unload-Befehl gibt, werde ich sicher noch öfter brauchen :)
Da es mein erstes VBA-Projekt ist, bitte ich den kompliziert geschriebenen Code zu entschuldigen und danke dir ganz besonders, dass du es dir dennoch angesehen hast.
Viele Grüße,
Willi

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige