Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

ListIndex, nur der Reihe nach ???

Betrifft: ListIndex, nur der Reihe nach ??? von: Jockel
Geschrieben am: 15.08.2014 12:17:51

Hallo,

muss noch mal nachfragen wegen dem folgenden Beispiel:
Möchte Datensätze, die aus einer Tabelle in eine Combobox geladen werden, per Klick in verschiedenen Textboxen auf einer Userform laden. Das funktionier soweit, solange ich die Reihenfolge mit dem Listindex schön einhalte (1,2,3 ....)
Nun wollte ich aber zB den Inhalt aus Spalte EK (141) laden in eine Textbox laden.
Sobald ich aber den Listindex 4 überpringe um zu der 141 zu kommen, kommt eine Fehlermeldung.
Darf es bei ListIndex keine Unterbrechungen geben, bzw. wie kann ich die Daten individuell in verschiedener Reihenfolge aus meiner Tabelle laden ?

Private Sub CB_GPNAME_Change()
 With CB_GPNAME
    If .ListIndex = -1 Then
       Angelegt.Value = ""
       Vorlage.Value = ""
       Name.Value = ""
    Else
       Angelegt.Value = .List(.ListIndex, 1)
       Vorlage.Value = .List(.ListIndex, 2)
       Name.Value = .List(.ListIndex, 3)
    End If
 End With
End Sub

Danke
Jockel

  

Betrifft: kommt eine Fehlermeldung: welch? owT von: Rudi Maintaire
Geschrieben am: 15.08.2014 12:41:16




  

Betrifft: ja, folgende .... von: Jockel
Geschrieben am: 15.08.2014 12:58:02



Laufzeitfehler -2147024809 (80070057)
Eigenschaft List konnte nicht aufgerufen werden, ungültiges Argument


  

Betrifft: AW: ja, folgende .... von: Rudi Maintaire
Geschrieben am: 15.08.2014 13:12:18

Hallo,
ist die Cbx denn auch 4-Spaltig?

Gruß
Rudi


  

Betrifft: AW: ja, folgende .... von: Jockel
Geschrieben am: 15.08.2014 13:21:42

Hallo Rudi,
nein, die ist einspaltig, aber das funktioniert.
wie kommst du auf 4 ?

Gruß
Jockel


  

Betrifft: habe gerade folgendes festgestellt von: Jockel
Geschrieben am: 15.08.2014 13:30:42

...
Bei folgendem Beipiel kommt es ab ListIndex 10 zur gleichen Fehlermeldung.
Darf der Listindex nicht über 10 sein ?

Private Sub CB_GPNAME_Change()
 With CB_GPNAME
    If .ListIndex = -1 Then
       TextBox14.Value = ""
       TextBox15.Value = ""
       TextBox16.Value = ""
       TextBox17.Value = ""
       TextBox18.Value = ""
       TextBox19.Value = ""
       TextBox20.Value = ""
       TextBox21.Value = ""
       TextBox22.Value = ""
       TextBox23.Value = ""
    Else
       TextBox14.Value = .List(.ListIndex, 1)
       TextBox15.Value = .List(.ListIndex, 2)
       TextBox16.Value = .List(.ListIndex, 3)
       TextBox17.Value = .List(.ListIndex, 4)
       TextBox18.Value = .List(.ListIndex, 5)
       TextBox19.Value = .List(.ListIndex, 6)
       TextBox20.Value = .List(.ListIndex, 7)
       TextBox21.Value = .List(.ListIndex, 8)
       TextBox22.Value = .List(.ListIndex, 9)
       TextBox23.Value = .List(.ListIndex, 10)
    End If
 End With
End Sub



  

Betrifft: AW: habe gerade folgendes festgestellt von: Rudi Maintaire
Geschrieben am: 15.08.2014 13:41:40

Hallo,
wenn du schreibst .List(.listindex,X) dann muss es eine mehrspaltige, mit mindestens x+1 Spalten sein!!!
.List(x,y) ist ein 2-Dimensionales Array, beginnend bei 0. Kannst du dir wie einen Bereich (cells(Zeile, Spalte) vorstellen.
Außerdem kannst du besser mit der Column-Eigenschaft arbeiten.

statt
.List(.listindex,Spalte)
besser
.Column(spalte)
(erste Spalte=0 etc.)

Gruß
Rudi


  

Betrifft: AW: habe gerade folgendes festgestellt von: Ewald
Geschrieben am: 15.08.2014 13:58:33

Hallo,

könnte es sein das du die Liste mit Additem füllst, da ist bei 10 Spalten Schluß.

Gruß Ewald


  

Betrifft: AW: habe gerade folgendes festgestellt von: Jockel
Geschrieben am: 15.08.2014 14:34:35

Hallo,
habe es mal mit .Column(spalte) versucht, da habe ich aber das gleiche Problem.
Kann es sein, dass schon das einlesen das Problem ist ?

hier mal der ganze Code, komme so nicht weiter:

Also, so wie der Code unten steht, funktioniet er noch. Sobald ich aber beide Routinen um jeweils eine Zeite erweitere, kommt die Fehlermeldung. Ist das einlesen vielleicht auf 10 begrenzt ?




'Combo Füllen

Set WkSh = ThisWorkbook.Sheets(Tabelle1.Name)

With UserForm1.CB_GPNAME
.ColumnCount = 1
.ColumnWidths = ("2;0;0")
For lZeile = 2 To WkSh.Cells(WkSh.Rows.Count, 1).End(xlUp).Row
If WkSh.Range("B" & lZeile) <> "" Then
.AddItem WkSh.Range("B" & lZeile).Value
.List(.ListCount - 1, 1) = WkSh.Range("A" & lZeile).Value
.List(.ListCount - 1, 2) = WkSh.Range("B" & lZeile).Value
.List(.ListCount - 1, 3) = WkSh.Range("C" & lZeile).Value
.List(.ListCount - 1, 4) = WkSh.Range("D" & lZeile).Value
.List(.ListCount - 1, 5) = WkSh.Range("E" & lZeile).Value
.List(.ListCount - 1, 6) = WkSh.Range("F" & lZeile).Value
.List(.ListCount - 1, 7) = WkSh.Range("G" & lZeile).Value
.List(.ListCount - 1, 8) = WkSh.Range("H" & lZeile).Value
.List(.ListCount - 1, 9) = WkSh.Range("I" & lZeile).Value
End If
Next lZeile
End With


'Textboxen füllen

Private Sub CB_GPNAME_Change()
 With CB_GPNAME
    If .ListIndex = -1 Then
       TextBox14.Value = ""
       TextBox15.Value = ""
       TextBox16.Value = ""
       TextBox17.Value = ""
       TextBox18.Value = ""
       TextBox19.Value = ""
       TextBox20.Value = ""
       TextBox21.Value = ""
       TextBox22.Value = ""

    Else
       TextBox14.Value = .List(.ListIndex, 1)
       TextBox15.Value = .List(.ListIndex, 2)
       TextBox16.Value = .List(.ListIndex, 3)
       TextBox17.Value = .List(.ListIndex, 4)
       TextBox18.Value = .List(.ListIndex, 5)
       TextBox19.Value = .List(.ListIndex, 6)
       TextBox20.Value = .List(.ListIndex, 7)
       TextBox21.Value = .List(.ListIndex, 8)
       TextBox22.Value = .List(.ListIndex, 9)

    End If
 End With
End Sub

Ich bin mir langsam auch nicht mehr sicher, ob ich nichr vielleicht hätte anders vorgehen müssen. letztendlich handelt es sich bei mir um ca 25 bis 30 Spalten, die ich aus eine Tabelle in die Textboxen laden will. Ist das nicht vielleicht ein bischen viel für so eine Combobox ?

Gruß
Jockel


  

Betrifft: AW: habe gerade folgendes festgestellt von: Rudi Maintaire
Geschrieben am: 15.08.2014 14:50:47

Hallo,
per AddItem kannst du max. 10 Spalten haben.
Wenn B ohne Lücken gefüllt ist:

  With UserForm1.CB_GPNAME
    .ColumnCount = 1
    .ColumnWidths = ("2;0;0")
  End With
  With wkSh
    'Liste A2:Lx
    'für mehr Spalten Resize(, 12) anpassen
    UserForm1.CB_GPNAME.List = _
      .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)).Offset(, -1).Resize(, 12).Value
  End With

Wenn nicht Liste erst in ein Array einlesen und dann der CBx zuweisen.

Gruß
Rudi


  

Betrifft: Danke, funktioniert owT von: Jockel
Geschrieben am: 15.08.2014 18:16:07