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, 18:44 (Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2017, 18: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
07.07.2017, 23:06 (Dieser Beitrag wurde zuletzt bearbeitet: 07.07.2017, 23:07 von Kuwer.)
Hallo Michael,
(07.07.2017, 21: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, 21:11 (Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2017, 21: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!