Ich habe eine UF mit MultiPage erstellt in jeder Page (7 stück) ist eine ListBox die mit werten befüllt werden.
Code:
With Multi.ListBox1 .ColumnCount = 5 ' Anzahl der anzuzeigenden Spalten .ColumnWidths = "11cm;0,1cm;0,1cm;1,2cm;1,5cm" 'Größe der Spaltenbreite .RowSource = "I10:Q15" ' & loLetzteZeile ' anzuzeigender Bereich End With With Multi.ListBox2 .ColumnCount = 5 ' Anzahl der anzuzeigenden Spalten .ColumnWidths = "11cm;0,1cm;0,1cm;1,2cm;1,5cm;0cm;0cm;0cm;2,5cm " 'Größe der Spaltenbreite .RowSource = "I17:Q25" ' & loLetzteZeile ' anzuzeigender Bereich End With With Multi.ListBox3 .ColumnCount = 5 ' Anzahl der anzuzeigenden Spalten .ColumnWidths = "11cm;0,1cm;0,1cm;1,2cm;1,5cm;0cm;0cm;0cm;2,5cm " 'Größe der Spaltenbreite .RowSource = "I26:Q26" ' & loLetzteZeile ' anzuzeigender Bereich End With With Multi.ListBox4 .ColumnCount = 5 ' Anzahl der anzuzeigenden Spalten .ColumnWidths = "11cm;0,1cm;0,1cm;1,2cm;1,5cm;0cm;0cm;0cm;2,5cm " 'Größe der Spaltenbreite .RowSource = "I31:Q32" ' & loLetzteZeile ' anzuzeigender Bereich End With With Multi.ListBox5 .ColumnCount = 5 ' Anzahl der anzuzeigenden Spalten .ColumnWidths = "11cm;0,1cm;0,1cm;1,2cm;1,5cm;0cm;0cm;0cm;2,5cm " 'Größe der Spaltenbreite .RowSource = "I33:Q34" ' anzuzeigender Bereich End With With Multi.ListBox6 .ColumnCount = 5 ' Anzahl der anzuzeigenden Spalten .ColumnWidths = "11cm;0,1cm;0,1cm;1,2cm;1,5cm;0cm;0cm;0cm;2,5cm " 'Größe der Spaltenbreite .RowSource = "I35:Q37" ' anzuzeigender Bereich End With With Multi.ListBox7 .ColumnCount = 5 ' Anzahl der anzuzeigenden Spalten .ColumnWidths = "11cm;0,1cm;0,1cm;1,2cm;1,5cm;0cm;0cm;0cm;2,5cm " 'Größe der Spaltenbreite .RowSource = "I39:Q50" ' anzuzeigender Bereich End With
Versuche seit Tagen diesen Code mit einer Schleife beim einlesen abzuändern(um alles zu Kürzen)!
Meine Fragen an euch ist
Geht das überhaupt mit einer Schleife und die 2. frage ist: wie kann mann die selected dann auslesen? Ich weiß mann sollte eine Datei einstellen. Aber wie es immer ist Brauche ich erstmal von euch EXPERTEN nur Tipp's, Hinweise und Trick's
eine Schleife bringt nicht viel, da die Spalten und Datenquellen ja unterschiedlich sind und keinem einheitlichen Muster folgen. Musst Du das während der Anzeige der UF ständig ändern? Sonst könntest Du ja diese Eigenschaften ja fest im Eigenschaftenfenster eintragen und bräuchtest keinen Code dafür.
06.07.2017, 19:44 (Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2017, 19:47 von michel34497.)
Hallo Uwe!
Also es ist so,vorher habe ich alles in eine ListBox eingelsen mit diesen Code
Code:
Sub suchenSpA3() Dim lngLetzteA As Long 'Spalte A Dim lngLetzteB As Long 'Spalte B Dim lngLetzteE As Long 'Spalte E Dim lngLetzteG As Long 'Spalte G Dim lngZeileA As Long 'Zeile A Dim lngZeileB As Long 'Zeile B Dim lngZeileE As Long 'Zeile E Dim lngZeileG As Long 'Zeile G
With oUf.ListBox1 'Anzeige .Clear 'Listbox2 löschen .ColumnCount = 4 'Anzahl Spalten in Listbox2 .ColumnWidths = "4,5cm;14cm;2,3cm;2cm " 'Größe der Spaltenbreite .AddItem ActiveSheet.Range("D2").Value 'Maschiene eintragen
'Lezte beschrieben Zelle finden lngLetzteA = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count) lngLetzteB = IIf(IsEmpty(Cells(Rows.Count, 2)), Cells(Rows.Count, 2).End(xlUp).Row, Rows.Count) lngLetzteE = IIf(IsEmpty(Cells(Rows.Count, 5)), Cells(Rows.Count, 5).End(xlUp).Row, Rows.Count) lngLetzteG = IIf(IsEmpty(Cells(Rows.Count, 7)), Cells(Rows.Count, 7).End(xlUp).Row, Rows.Count) ' Schleife über Spalte A For lngZeileA = 10 To lngLetzteA 'ab Zeile 10 suchen If Cells(lngZeileA, 1) <> "" Then 'ZellenBereich ermitteln If z1 = 0 Then z1 = lngZeileA Else erg = lngZeileA - 1 'erg ist ergebniss End If If erg > 0 Then 'ist das ergebniss größer 0
For lngZeileB = z1 To erg 'Schleife über Spalte B
If Cells(lngZeileB, 2) <> "" Then lngZeileG = lngZeileB
If Cells(lngZeileG, 4) <= "" Then Cells(lngZeileG, 4).Activate
End If 'hier müste das weiterschalten in die nächste listbox stehen Next lngZeileA 'Der Letzte gefundener eintrag in Spalte A muß auch noch überprüft werden lngZeileA = lngZeileA - 1 If lngLetzteA < lngLetzteB Then
For lngZeileB = lngLetzteA To lngLetzteB
If Cells(lngZeileB, 2) <> "" Then lngZeileG = lngZeileB
If Cells(lngZeileG, 4) <= "" Then Cells(lngZeileG, 4).Activate If oUf.CheckBox10 = True Then GoTo lEintrag
lEintrag: If z2 = 0 Then .AddItem Cells(z1, 1) .List(.ListCount - 1, 1) = Cells(lngZeileB, 2) .List(.ListCount - 1, 2) = Cells(lngZeileB, 7) .List(.ListCount - 1, 3) = Cells(lngZeileB, 5) ' z2 = z2 + 1 Else .AddItem Cells(lngZeileB, 1) .List(.ListCount - 1, 1) = Cells(lngZeileB, 2) .List(.ListCount - 1, 2) = Cells(lngZeileB, 7) ' .List(.ListCount - 1, 3) = Cells(lngZeileB, 5) End If End If End If
Next lngZeileB End If End With End Sub
(Dieser Code muß noch ein bissel umgebaut werden) Jetz soll aber der User über MultiPage auswählen was er machen möchte (ist von einen so gefordert) deswegen auch MultiPage und in jeder Page eine ListBox Ich brauche eigentlich nur
"Eine Weiterschaltung zur nächsten ListBox!" Ich möchte mit listbox1 anfangen und wenn der Code an einer gewissen stelle fertig ist zur nächsten listbox gehen und dort die werte eintragen. Dies steht auch im Code und da sollte eventuell die Weiterschlatung zur nächsten ListBox erfolgen.
Code:
End If 'hier müste das weiterschalten in die nächste listbox stehen Next lngZeileA
Zur Zeit ist der Name der Listboxen in der Multipage1 Listbox1 -Listbox7 Da habe ich meine Probleme Vieleicht übersehe ich auch was, ich habe bis jetzt noch nicht mit MultiPage gearbeitet.
Ich hoffe DU oder ein anderer kann mir dort weiterhelfen.
Wenn dieses funtzt dann bekomme ich auch das mit dem selected hin Werde nacher noch versuchen eine Bsp. einzustellen
Wer aber vorher schon vorschläge hat, Ich bitte darum
08.07.2017, 00:06 (Dieser Beitrag wurde zuletzt bearbeitet: 08.07.2017, 00:07 von Kuwer.)
Hallo Michael,
(07.07.2017, 22:39)michel34497 schrieb: Wie kann man mehrere ListBoxen in einer Userform über eine i Schleife ansprechen?
Du brauchst nicht mehrere Listboxen und auch keine Schleife. Für das, was Du machen möchtest, bietet sich das Register (TabStrip) mit einer ListBox an.
10.07.2017, 22:11 (Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2017, 22:22 von michel34497.)
Hallo Uwe! Ich möchte gerne die ListBox mit diesen code befüllen damit es flexibler wird.
Code:
Sub suchenSpA3() Dim lngLetzteA As Long 'Spalte A Dim lngLetzteB As Long 'Spalte B Dim lngLetzteG As Long 'Spalte G Dim lngZeileA As Long 'Zeile A Dim lngZeileB As Long 'Zeile B Dim lngZeileG As Long 'Zeile G Dim i As Integer
i = 1 'Aktuelle Page ausgeben lassen MsgBox "Die aktuelle Page lautet:" & MultiPage1.Value + 1
'If MultiPage1.SelectedItem.Caption 'Es wird immer das Aktive TabellenBlatt genommen With Multi.ctl 'Anzeige .Clear 'Listbox2 löschen .ColumnCount = 3 'Anzahl Spalten in Listbox2 .ColumnWidths = "11cm;2cm;1,3cm " 'Größe der Spaltenbreite '.AddItem ActiveSheet.Range("D2").Value 'Maschiene eintragen
'Lezte beschrieben Zelle finden lngLetzteA = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count) lngLetzteB = IIf(IsEmpty(Cells(Rows.Count, 2)), Cells(Rows.Count, 2).End(xlUp).Row, Rows.Count) lngLetzteE = IIf(IsEmpty(Cells(Rows.Count, 5)), Cells(Rows.Count, 5).End(xlUp).Row, Rows.Count) lngLetzteG = IIf(IsEmpty(Cells(Rows.Count, 7)), Cells(Rows.Count, 7).End(xlUp).Row, Rows.Count) ' Schleife über Spalte A For lngZeileA = 10 To lngLetzteA 'ab Zeile 10 suchen If Cells(lngZeileA, 1) <> "" Then NamederCelle = Cells(lngZeileA, 1) 'Für MultiPage1 'If NamederCelle = MultiPage1.SelectedItem.Caption Then MsgBox "Hallo" 'ZellenBereich ermitteln If z1 = 0 Then z1 = lngZeileA Else erg = lngZeileA - 1 'erg ist ergebniss End If If erg > 0 Then 'ist das ergebniss größer 0
For lngZeileB = z1 To erg 'Schleife über Spalte B
If Cells(lngZeileB, 2) <> "" Then lngZeileG = lngZeileB
If Cells(lngZeileG, 4) <= "" Then Cells(lngZeileG, 4).Activate
Du kannst diesen Code immer wieder posten, aber ich werde mich nicht damit befassen. Hilfreicher wäre es, wenn Du die Rahmenbedingungen und Absichten schilderst und auch auf Vorschläge/Rückfragen (siehe meinen ersten Post) reagierst.
Die Rahmenbediengungen sind: Ich habe mehere UF's eine davon ist eine "Wartung Erstellen". In dieser Uf wird ein neues TabellenBlatt erstellt nach einträgen in den TextBoxen, aber das sieht mann wer die Datei hat. Wenn das TabellenBlatt erstellt wurde soll eine neue Uf (Anzeige(Formular Multi)CommandButton9)))angezeigt werden. In dieser soll über MultiPage oder Tabstrip eine Auswahl getroffen werden, was in den AktuellenTabllenBlatt gelöscht werden soll. Die Auswahl soll in: Bei Mulipage in den ListBoxen Page0 = ListBox1 Page1 = ListBox2 usw. Bei Tabstrip in der ListBox ??? beides soll über Multi selected Ausgewählt werden können Alles was selectiert wird soll dann in den aktuellen TabellenBlatt gelöscht wird.
Die Herausforderung ist dabei das ich die ListBox(en) über den Code den ich schon gepostet habe befüllen möchte und das ganze auch in Multiselected funtzen soll. Die selectierten Zeilen sollen dann über einen CommandButton gelöscht werden.
Der Code zum einlesen, den ich schon gepostet habe macht folgendes: Er sucht in der Spalte "A" ab der zeile 10 die nächste beschriebene Zelle (in Zelle 10 steht ein Name) Alles was Dazwischen ist soll dann in die Page der ListBox eingetragen werden (Die nächste Page hat eine neue ListBox). Was in die ListBox eingetragen wird, sind dann die Wert aus der Spalte "B" Also Ich ich weiß bei MultiPage: Wie die Page heißt und kann das mit dem Code Vergleichen was in der Zelle steht. Ist es gleich soll dann auch nur dann eingelesen werde.
Ich weiß aber nicht wie ich die ListBox in den Page's ansprechen kann!
Bei Tabstrip habe ich keinen schimmer wie ich das umsetzen könnte
Ich hoffe es ist verständlich, wenn nicht weiter fragen!