PDA

Vollständige Version anzeigen : Aktualisierung Userform


T0601
21.07.2014, 13:44
Guten Tag allerseits.

Wie kann ich eine Userform aktualisieren?

Ich lese auf einer Userform in eine Listbox Daten aus einer Tabelle ein. Hier kann ich mit MultiSelect einzelne Kunden auswählen.

Diese werden dann in einer ListBox in einer neuen Userform eingelesen. Klappt auch. Aber ich muss wenn ich etwas ändere jedesmal die Datei schließen und wieder öffnen.

Kann ich das aktualisieren lassen, ohne zu schließen?

MWOnline
21.07.2014, 13:46
Hallöchen,

das kommt auf Deinen Quellcode an. Lade eine Beispieldatei hoch dann finden wir sicherlich ganz schnell die Lösung ;)

Aber normalerweise kannst Du die ListBox aktualisieren wann immer Du möchtest... Einfach die Befüllungsprozedur aufrufen wann Du es aktualisieren möchtest, entweder per Knopf oder per Ereignis...

Beste Grüße
Marc

T0601
21.07.2014, 14:14
Hier die Datei.

Es handelt sich um die Userform Teilnehmer_Ausbildungsbörse.

Hier wird in der Multipage Teilnahmezeiten alles richtig angezeigt.
Aber nicht in der Multipage Teilnehmer. Hier muss ich immer erst die Datei schließen, um Sie zu aktualisieren.

admin ohne Passwort

T0601
22.07.2014, 06:54
Keiner eine Idee?

MWOnline
22.07.2014, 07:02
Hallöchen,

ich habe versucht Daten einzugeben, allerdings bekomme ich immer Fehlermeldungen ;) Auf den Oberflächen fehlen Plausibilitätsprüfungen für die User die keine Ahnung haben :D

Bei mir wird die RowSource Eigenschaft beim Reiterwechsel korrekt aufgerufen für die ListBox2...

Wenn ich raten soll: Du könntest die RowSource vorher leer machen und dann neu setzen, was zu einem Refresh führt:


Private Sub RefreshListBox2()
Dim sRowSource As String
With ListBox2
sRowSource = .RowSource
.RowSource = vbNullString 'Leer machen
.RowSource = sRowSource 'Neu setzen führt zum Refresh!
End With
End Sub

Diese Routine einfach aufrufen beim Change Ereignis.

Wann genau tritt bei Dir das Problem auf? Beschreibe bitte einmal kurz die komplette Schrittfolge, wie man den Fehler produzieren kann... denn ohne Plausis die Oberflächen testen ist anstrengend :D

Beste Grüße
Marc

T0601
22.07.2014, 07:34
Also ich wähle "Schule hinzufügen" aus.

Dann setze ich meine Haken und klicke auf "Auswahl übernehmen". Gehe ich jetzt auf "zurück" und wähle "Teilnahmezeit festlegen".

Dann öffnet sich die die Userform Teilnehmer_Ausbildungsbörse. Hier ist ja die Multipage.

Auf der Page 1 "Teilnehmer" fehlt mir dann meine festgelegte Auswahl. Hier sollen ja die Teilnehmer angezeigt werden, die ich mit Haken bestätigt habe, damit ich Uhrzeit und Teilnehmerzahl festgelegt werden können.

Auf Page 2 "Teilnahmezeiten" ist dann eine Übersicht der Teilnehmer mit Uhrzeit etc.

Page 2 klappt auch. Aber Page 1 nicht.

T0601
22.07.2014, 07:41
So ich habe den Code mal angepasst:

Private Sub Userform_Initialize()

With ListBox1
.ColumnCount = 11
.ColumnWidths = "2cm;7,5cm;0cm;0cm;2cm;2cm;0cm;0cm;0cm;0cm;0cm"
.ColumnHeads = True
ListBox1.RowSource = "Teilnahme!A2:K70"
End With
End Sub

Jetzt zeigt er mir die Auswahl in der Userform Teilnehmer_Ausbildungsbörse sauber an. Aber wie gesagt, er aktualisiert nur, wenn ich die Datei schließe und wieder öffne.

MWOnline
22.07.2014, 07:54
Hallöchen,

verwende die obige Prozedur im MultiPage_Change Ereignis für beide ListBoxen oder z.B. nach einem Speichervorgang. Dann wird automatisch aktualisiert!

Beste Grüße
Marc

xlph
22.07.2014, 08:13
Hallo,

ersetze das...

Private Sub MultiPage1_Change()
With ListBox2
.ColumnCount = 13
.ColumnWidths = "2cm;7,5cm;0cm;0cm;0cm;4cm;3cm;3cm;3cm;2,5cm;2,1cm;2,1cm;4cm"
.ColumnHeads = True
ListBox2.RowSource = "Teilnahme!A2:M70"
End With
End Sub

Private Sub Worksheet_Calculate()

With ListBox1
.ColumnCount = 11
.ColumnWidths = "2cm;7,5cm;0cm;0cm;2cm;2cm;0cm;0cm;0cm;0cm;0cm"
.ColumnHeads = True
ListBox1.RowSource = "Teilnahme!A2:K70"
End With
End Sub


durch das...

Private Sub MultiPage1_Change()
Select Case MultiPage1.Value
Case 0
With ListBox1
.ColumnCount = 11
.ColumnWidths = "2cm;7,5cm;0cm;0cm;2cm;2cm;0cm;0cm;0cm;0cm;0cm"
.ColumnHeads = True
.RowSource = "Teilnahme!A2:K70"
End With

Case 1
With ListBox2
.ColumnCount = 13
.ColumnWidths = "2cm;7,5cm;0cm;0cm;0cm;4cm;3cm;3cm;3cm;2,5cm;2,1cm;2,1cm;4cm"
.ColumnHeads = True
.RowSource = "Teilnahme!A2:M70"
End With

End Select
End Sub

Private Sub UserForm_Initialize()
Call MultiPage1_Change
End Sub

T0601
22.07.2014, 10:08
Klappt zwar nicht ganz, da er beim Öffnen der Userform nicht die aktuelle Auswahl anzeigt, sondern erst wenn ich zwischen Page 1 und 2 einmal hin und her geswitched habe.

Aber sollte so klappen. Wenn jemand noch eine Idee mit Refresh oder Calculate hat, wäre ich hier sehr dankbar.

T0601
22.07.2014, 10:16
Vielleicht noch ne Kleinigkeit.

Im Bereich "Schuldaten ändern" zeigt er mir nur bis zur 1. ComboBox die Daten aus der Tabelle "Stammdaten" an.

Wie passe ich denn diesen Code an, damit auch in den ComboBoxen die Daten aus der Tabelle "Stammdaten" übernommen werden:

Private Sub UserForm_Initialize()
Dim i As Integer, rng As Range
With Worksheets("Stammdaten")
Set rng = .Columns(1).Find(what:=Datensatz_ändern.TextBox1, lookat:=xlWhole)
For i = 1 To 11
Me.Controls("TextBox" & CStr(i)) = .Cells(rng.Row, i)
Next i
End With
TextBox1.Enabled = False
End Sub

T0601
23.07.2014, 13:00
Also die Textboxen werden jetzt übernommen.

Guckst Du hier:

Private Sub UserForm_Initialize()
Dim i As Integer, rng As Range
With Worksheets("Stammdaten")
Set rng = .Columns(1).Find(what:=Datensatz_ändern.TextBox1, lookat:=xlWhole)
For i = 1 To 32
Select Case i
Case 1 To 11, 13 To 14, 16 To 17, 19 To 22, 24 To 27, 29 To 32
Me.Controls("TextBox" & CStr(i)) = .Cells(rng.Row, i)
End Select
Next i
Set rng = .Columns(1).Find(what:=Datensatz_ändern.TextBox1, lookat:=xlWhole)
For i = 1 To 32
Select Case i
Case 12
'Me.Controls("Combobox.text" & CStr(i)) = .Cells(rng.Row, i)
End Select
Next i

End With
TextBox1.Enabled = False
End Sub

Aber die Comboboxen zwischendrin werden nicht befüllt.

Comboboxen sind in der Reihenfolge an Nummer: 12, 15, 18, 23 und 28.

Wie kann ich das lösen?