Microsoft Excel

Herbers Excel/VBA-Archiv

Prüfung in Combobox


Betrifft: Prüfung in Combobox
von: Peter
Geschrieben am: 30.11.2018 09:55:59

Hallo ihr Excelspezialisten,

ich habe im Archiv einen Code gefunden, welcher einwandfrei funktioniert bis auf eine Kleinigkeit. Die Lösung hierfür finde ich leider nicht.

Deshalb bitte ich euch mir hierbei zu helfen.

Private Sub ComboBox2_Change()
  Dim arrList(), rngC As Range, j As Integer, n As Integer
  ReDim arrList(1 To WorksheetFunction.CountIf(Columns(3), ComboBox2.Value), 1 To 3)
  
  For Each rngC In Range(Cells(3, 1), Cells(Rows.Count, 1).End(xlUp))

    If rngC.Offset(, 2) = ComboBox2.Value Then

      n = n + 1
      For j = 0 To 2
        arrList(n, j + 1) = rngC.Offset(, j)
      Next
    End If
  Next
  
  With ListBox1
    .ColumnCount = 5
    .ColumnWidths = "4cm;4cm;4cm;4cm;4cm"
    .List = arrList
  End With

End Sub
Das Problem: Wenn der Wert der Combobox nicht vorhanden ist, dann soll eine Meldung in Label10.Caption="Wert nicht vorhanden" erscheinen und ExitSub erfolgen.

Besten Dank für eure Hilfe.

Gruss
Peter

  

Betrifft: AW: Prüfung in Combobox
von: ede
Geschrieben am: 30.11.2018 10:02:38

Hallo Peter,
dann bau das im else Zweig ein:

...
    If rngC.Offset(, 2) = ComboBox2.Value Then

      n = n + 1
      For j = 0 To 2
        arrList(n, j + 1) = rngC.Offset(, j)
      Next
    else
      Label10.Caption="Wert nicht vorhanden"
    End If
...

gruss
ede


  

Betrifft: AW: Prüfung in Combobox
von: Peter
Geschrieben am: 30.11.2018 10:11:41

Hallo Ede,
besten Dank für Deine Hilfe, aber leider ohne Erfolg.

Der Fehler taucht bereits bei der Zeile "ReDim arrList(1 To WorksheetFunction.CountIf(Columns(3), ComboBox2.Value), 1 To 3)" auf.

Fehlermeldung Index ausserhalb gültigen Bereichs.

Da muss irgendetwas rein wie if ListboxIndex nicht dann

Gruss
Peter


  

Betrifft: AW: Prüfung in Combobox
von: ede
Geschrieben am: 30.11.2018 10:13:50

Hallo noch mal,
ich hab dich (glaub ich) falsch verstanden, versuch mal sorum:


Private Sub ComboBox2_Change()
   Dim arrList(), rngC As Range, j As Integer, n As Integer
   ReDim arrList(1 To WorksheetFunction.CountIf(Columns(3), ComboBox2.Value), 1 To 3)
   n = 0
   For Each rngC In Range(Cells(3, 1), Cells(Rows.Count, 1).End(xlUp))
    If rngC.Offset(, 2) = ComboBox2.Value Then
       n = n + 1
       For j = 0 To 2
         arrList(n, j + 1) = rngC.Offset(, j)
       Next
     End If
   Next
   if n = 0 then
      Label10.Caption = "Wert " & ComboBox2.Value & " nicht vorhanden"
      exit sub
   end if   
   With ListBox1
     .ColumnCount = 5
     .ColumnWidths = "4cm;4cm;4cm;4cm;4cm"
     .List = arrList
   End With
  End Sub



  

Betrifft: AW: Prüfung in Combobox
von: Peter
Geschrieben am: 30.11.2018 10:16:21

Hallo ede,

leider nicht gleicher Fehler.

Gruss
Peter


  

Betrifft: AW: Prüfung in Combobox
von: ede
Geschrieben am: 30.11.2018 10:33:53

Hallo,
ein Beispiel, was in der Combobox stehen könnte, wäre nicht schlecht.

dann prüf vor dem ReDim arrList, ob in ComboBox2.Value ein gültiger Wert ist.

gruss
ede


  

Betrifft: AW: Prüfung in Combobox
von: Peter
Geschrieben am: 30.11.2018 10:39:28

hallo Ede,

es ist völlig egal was da drin steht.

In der Spalte C stehen diverse Namen: z. B. Hund und Katze

In der Combobox stehen Hund Katze und Maus.

Wenn nun nach jetzigem Code Hund oder Katze ausgewählt werden, wird Listbox entsprechend dem Wert ausgefüllt. Wird jedoch in Combobox Maus ausgewählt, erfolgt die Fehlermeldung.

Ich hoffe Du kannst mit diesen Angaben etwas anfangen.

Ich komme nicht auf die Lösung.

Besten Dank

Gruss
Peter


  

Betrifft: AW: Prüfung in Combobox
von: ede
Geschrieben am: 30.11.2018 10:44:50

Hallo nochmal,
das Problem ist, das dann die Funktion "WorksheetFunction.CountIf(Columns(3), ComboBox2.Value), " den Wert NULL zurückliefert und damit kommt REDIM nicht klar.

if WorksheetFunction.CountIf(Columns(3), ComboBox2.Value) = 0 then
   Label10.Caption = "Wert " & ComboBox2.Value & " nicht vorhanden"
   exit sub
else
   ReDim arrList(1 To WorksheetFunction.CountIf(Columns(3), ComboBox2.Value), 1 To 3)
end if



  

Betrifft: AW: Prüfung in Combobox erledigt
von: Peter
Geschrieben am: 30.11.2018 10:48:55

Hallo Ede,

das ist die Lösung. Nochmals besten Dank für Deine Hilfe.

Gruss
Peter


  

Betrifft: AW: Werte aus Listbox in Tabelle
von: Peter
Geschrieben am: 30.11.2018 12:09:08

Hallo Ede,

mittels dem von Dir geänderten Code werden die ausgewählten Daten in die Listbox übertragen.

Nun wähle ich auf der Listbox (multiselect) Daten aus. Diese werden in eine andere Tabelle2 übertragen.

Nun benötige ich aber noch einen Code, mit welchem ich in die Spalte E bei den gewählten Zeilen ein X in die Zelle einfüge.

Mit nachstehendem Code wird jedoch der gewählte Bereich nicht berücksichtigt.

Private Sub CommandButton5_Click()
With Me.ListBox1
   For j = 1 To .ListCount - 1
      If .Selected(j) Then
         Cells(j + 1, 3) = "X"
         .List(j, 2) = "X"
      Else
         Cells(j + 1, 3) = Empty
         .List(j, 2) = Empty
      End If
   Next j
End With
End Sub
Kannst Du mir bitte helfen, dass ich das x bei jeden gewählten Zeile gesetzt bekomme.

Besten Dank

Gruss
Peter


  

Betrifft: AW: Werte aus Listbox in Tabelle
von: Piet
Geschrieben am: 04.12.2018 19:05:00

Hallo Peter

die Lösung ist in deinem Code klar eresichtlich, wahrscheinlich erkennst du sie bloss nicht. -
Cells(j + 1, 3) = "X" heisst, in Zeile (ab zwei) der Spalte "C" = 3.Spalte wird ein X eingetragen
Für Spalte E muss Cells geaendert werden auf: - Cells(j + 1, 5) = "X". Dann sollte es klappen.

Befindet sich diese Zelle in einem anderen Blatt must du die Tabelle mit angeben: - Worksheets("xxx").Cells(j + 1, 5) = "X"

Vielleicht hilft dir der Tipp den Code selbst zu aendern. Könnte dann wie unten aussehen.

mfg Piet

Private Sub CommandButton5_Click()
With Me.ListBox1
   For j = 1 To .ListCount - 1
      If .Selected(j) Then
         Cells(j + 1, 3) = "X"
         .List(j, 2) = "X"
         Worksheets("xxx").Cells(j + 1, 5) = "X"
      Else
         Cells(j + 1, 3) = Empty
         .List(j, 2) = Empty
         Worksheets("xxx").Cells(j + 1, 5) = Empty
      End If
   Next j
End With
End Sub



  

Betrifft: AW: Werte aus Listbox in Tabelle erledigt
von: Peter
Geschrieben am: 05.12.2018 07:33:57

Hallo Piet,

besten Dank. Habe den Code bereits geändert. Funktioniert einwandfrei.

Gruss
Peter