Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

MultiPage mit ListBoxen VBA
#1
Hallo Leute!

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

WER KANN MIR DORT WEITER HELFEN?
mfg
Michael
:98:

WIN 10  Office 2019
Antworten Top
#2
Hallo Michael,

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.

Gruß Uwe
Antworten Top
#3
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
                             
                             'If oUf.CheckBox10 = True Then GoTo Eintrag
                               

Eintrag:                            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, 0) = Cells(lngZeileB, 2)
                                          .List(.ListCount - 1, 1) = Cells(lngZeileB, 7) '
                                          .List(.ListCount - 1, 2) = Cells(lngZeileB, 5)
                                 End If
                                       
                                  End If
                           End If
                           
                       
                               
               Next lngZeileB
               z1 = erg + 1
               z2 = 0
               End If
               
       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 Angel

"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
mfg
Michael
:98:

WIN 10  Office 2019
Antworten Top
#4
Hallo!

Hier die Beispiel Datei

Beim Aufrufen wird die Uf Multi geladen.
Bei Click auf Neues Formular wird in mdl_Multipage der Code ausgeführt!

Ich hoffe das Hilft bei meiner Frage


Angehängte Dateien
.xlsm   MultiPage1.xlsm (Größe: 352,64 KB / Downloads: 31)
mfg
Michael
:98:

WIN 10  Office 2019
Antworten Top
#5
Hallo!

Neu Frage

Wie kann man mehrere ListBoxen in einer Userform über eine i Schleife ansprechen?
Ist das überhaupt möglich?
mfg
Michael
:98:

WIN 10  Office 2019
Antworten Top
#6
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.

Ich habe mal eine Demomappe erstellt.

.xlsm   Userform mit Register.xlsm (Größe: 25,79 KB / Downloads: 24)

Das ist der gesamte relevante Code dazu:
Option Explicit

Private Sub TabStrip1_Change()
 ListBox1.RowSource = "Test!" & Choose(TabStrip1.Value + 1, "B10:B14", "B16:B22", "B24", "B26:B27", "B29:B30", "B32:B34", "B36:B42")
 ListBox1.ControlSource = "Auswahl!" & Choose(TabStrip1.Value + 1, "C2", "C4", "C6", "C8", "C10", "C12", "C14")
End Sub

Private Sub UserForm_Initialize()
 TabStrip1_Change
End Sub

Gruß Uwe
Antworten Top
#7
Hallo Uwe!

Danke für deine mühe, werde es einbauen und Testen!
mfg
Michael
:98:

WIN 10  Office 2019
Antworten Top
#8
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

Eintrag:                            If z2 = 0 Then
                                           .AddItem Cells(z1, 2)
                                           .List(.ListCount - 1, 0) = Cells(lngZeileB, 2) '
                                           .List(.ListCount - 1, 1) = Cells(lngZeileB, 7) '
                                           .List(.ListCount - 1, 2) = Cells(lngZeileB, 5) '
                                       z2 = z2 + 1
                                    Else
                                          .AddItem Cells(lngZeileB, 2)
                                          .List(.ListCount - 1, 0) = Cells(lngZeileB, 2)
                                          .List(.ListCount - 1, 1) = Cells(lngZeileB, 7) '
                                          .List(.ListCount - 1, 2) = Cells(lngZeileB, 5)
                                 End If
                                       
                                  End If
                           End If
                               
               Next lngZeileB
               z1 = erg + 1
               z2 = 0
               End If
       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
                           
lEintrag:                         If z2 = 0 Then
                                           .AddItem Cells(z1, 2)
                                           .List(.ListCount - 1, 0) = Cells(lngZeileB, 2)
                                           .List(.ListCount - 1, 1) = Cells(lngZeileB, 7)
                                           .List(.ListCount - 1, 2) = Cells(lngZeileB, 5) '
                                       z2 = z2 + 1
                                    Else
                                          .AddItem Cells(lngZeileB, 2)
                                          .List(.ListCount - 1, 0) = Cells(lngZeileB, 2)
                                          .List(.ListCount - 1, 1) = Cells(lngZeileB, 7) '
                                          .List(.ListCount - 1, 2) = Cells(lngZeileB, 5)
                                 End If
                             End If
                        End If
                               
              Next lngZeileB
       End If
End With
End Sub
Ist das möglich und wie muß dein Code Umgeschrieben werden?
Multiselect wäre auch ganz schön wenn das geht.

Mach mir schon als einen Kopf drüber, bekomme es einfach nicht hin.
Brauche von jedem Hilfestellung.

PS Habe vergessen MultiPage herrauszunehmen


Angehängte Dateien
.xlsm   Kopie von Userform mit Register.xlsm (Größe: 32,32 KB / Downloads: 9)
mfg
Michael
:98:

WIN 10  Office 2019
Antworten Top
#9
Hallo Michael,

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. Wink

Ich halte mich hier erst einmal zurück.  Blush

Gruß Uwe
Antworten Top
#10
Hallo!

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!


Angehängte Dateien
.xlsm   TextBox1.xlsm (Größe: 430,13 KB / Downloads: 20)
mfg
Michael
:98:

WIN 10  Office 2019
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste