Registriert seit: 29.09.2016
Version(en): 2007/2010/ 365
25.04.2017, 15:44
(Dieser Beitrag wurde zuletzt bearbeitet: 25.04.2017, 15:45 von DietmarD.)
Hallo zusammen,
ich habe in einem Tabellenblatt ab Zeile C41:C51 ein Drop-down-Menü, das ich über die Datengültigkeit befülle. In D41: D51 habe ich ein Drop-down-Menü, das in Abhängigkeit zum Ersten steht und zu guter Letzt in F41:F51 wiederum eins, was in Abhängigkeit zum Zweiten steht, was ich über Tabellen und indirekt gelöst habe und einwandfrei funktioniert.
Das Problem ist, das man dieses Drop-down-Menüs aus der Gültigkeit nicht individuell einstellen kann, was heißt, in der Breite und in der Anzahl der Einträge ist das ganze sehr beschränkt und lässt sich meines erachten wenn überhaupt nur schlecht und kompliziert einstellen.
So nun würde ich gerne auf Listenfelder ausweichen, da dort die Möglichkeiten der Einstellung gegeben sind.
Es soll also im ersten Schritt, sobald ich in eine der Zellen C41:C51 klicke, die erste Listbox1 neben der zu befüllenden Zelle erscheinen und nach Auswahl eines Wertes wieder schließen. Im zweiten Schritt muss sich die Zweite und im dritten Schritt sollen sich die Listboxen 2 und 3 dann wiederum in Abhängigkeit befüllen und neben den Zellen zum Anklick, Zuverfügung stehen.
Ein Code, den ich im Netz gegoogelt habe funktioniert, bis auf das er nicht schließt, wenn ein Wert gewählt und eingetragen wurde.
Code: Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Column
Case 3
Select Case Target.Row
Case 41 To 51
With ListBox1
' .List = Range(Cells(7, 13), Cells(Rows.Count, 13).End(xlUp)).Value
.Top = Target.Top
.Left = Target.Offset(, 1).Left
.LinkedCell = Target.Address
.Visible = True
End With
End Select
Case Else
ListBox1.Visible = False
End Select
End Sub
Vielen Dank für Eure Hilfe
Gruß
Dietmar
Damit das Mögliche entsteht, muß immer wieder das Unmögliche versucht werden.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Dietmar,
ich würde statt Listbox Combobx nehmen.
Beide würden mit dem gleichen Code arbeiten.
Um nach Auswahl auszublenden, würde ich die Zelle daneben auswählen mit folgendem Code zusätzlich an gleicher Stelle, wie Dein Code:
Code: Option Explicit
Dim boVar As Boolean
Private Sub ComboBox1_Change()
If boVar = False Then Range(ListBox1.LinkedCell).Offset(, 1).Select
End Sub
Gruß Atilla
Registriert seit: 29.09.2016
Version(en): 2007/2010/ 365
Hallo Atilla,
ich danke dir für deine Antwort, es funktioniert allerdings nicht wie gewünscht, wenn z.b. schon ein Wert in einer Zelle steht, kann ich ihn wohl überschreiben aber die Combo geht nicht zu.
Was muss ich ändern?
Gruß
Dietmar
Damit das Mögliche entsteht, muß immer wieder das Unmögliche versucht werden.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Dietmar,
sorry, in Deinem bisherigen Code musste auch noch etwas ergänzt werden:
hier alles zusammen für Deine Listbox:
Code: Dim boVar As Boolean
Private Sub ListBox1_Click()
If boVar = False Then Range(ListBox1.LinkedCell).Offset(, 1).Select
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Column
Case 3
Select Case Target.Row
Case 41 To 51
boVar = True
With ListBox1
.Top = Target.Top
.Left = Target.Offset(, 1).Left
.LinkedCell = Target.Address
.Visible = True
End With
End Select
boVar = False
Case Else
ListBox1.Visible = False
End Select
End Sub
Und so für bei einr Combobox
Code: Dim boVar As Boolean
Private Sub ComboBox1_Click()
If boVar = False Then Range(ComboBox1.LinkedCell).Offset(, 1).Select
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Column
Case 3
Select Case Target.Row
Case 41 To 51
boVar = True
With ComboBox1
.Top = Target.Top
.Left = Target.Offset(, 1).Left
.LinkedCell = Target.Address
.Visible = True
.DropDown
End With
End Select
boVar = False
Case Else
ComboBox1.Visible = False
End Select
End Sub
Ich habe das so eingestellt, das das Dropdown der Combo automatisch aufgeht.
Gruß Atilla
Registriert seit: 29.09.2016
Version(en): 2007/2010/ 365
26.04.2017, 14:31
(Dieser Beitrag wurde zuletzt bearbeitet: 26.04.2017, 14:35 von DietmarD.)
Hallo Atilla,
vielen Dank für deine Mühe, das funktioniert jetzt tadellos und ist Genial.
Nun brauche ich 3 Listboxen die Erste für den Bereich C41: C51 funktioniert bereiits :100:
die Zweite für den Bereich D41: D51 und die Dritte für den Bereich F41: F51.
Den ersten Teil des Codes, würde ich jetzt kopieren und für jede Listbox bzw. Combo anpassen
Code: Private Sub ListBox2_Click()
If boVar = False Then Range(ListBox2.LinkedCell).Offset(, 1).Select
End Sub
Private Sub ListBox3_Click()
If boVar = False Then Range(ListBox3.LinkedCell).Offset(, 1).Select
End Sub
aber wie mache ich das mit dem zweiten Teil, ich kann ja diesen Teil nicht dreimal kopieren
Code: Private Sub Worksheet_SelectionChange(ByVal Target As Range)
sonden muss diese beiden Teile dort einbauen
Code: Select Case Target.Column
Case 4 'für Spalte D
Select Case Target.Row
Case 41 To 51
boVar = True
With ListBox2
.Top = Target.Top
.Left = Target.Offset(, 1).Left
.LinkedCell = Target.Address
.Visible = True
End With
End Select
boVar = False
Case Else
ListBox2.Visible = False
Select Case Target.Column
Case 5 'für Spalte F
Select Case Target.Row
Case 41 To 51
boVar = True
With ListBox3
.Top = Target.Top
.Left = Target.Offset(, 1).Left
.LinkedCell = Target.Address
.Visible = True
End With
End Select
boVar = False
Case Else
ListBox3.Visible = False
Danke für die Hilfe
Gruß
Dietmar
Damit das Mögliche entsteht, muß immer wieder das Unmögliche versucht werden.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Dietmar,
hab jetzt kein Muße, deshalb so:
Code: Dim boVar As Boolean
Private Sub ListBox1_Click()
If boVar = False Then Range(ListBox1.LinkedCell).Offset(, 1).Select
End Sub
Private Sub ListBox2_Click()
If boVar = False Then Range(ListBox2.LinkedCell).Offset(, 1).Select
End Sub
Private Sub ListBox3_Click()
If boVar = False Then Range(ListBox3.LinkedCell).Offset(, 1).Select
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim x As Long
If Not Intersect(Target, Range("C41:D51,F41:F51")) Is Nothing Then
boVar = True
x = IIf(Target.Column = 6, 3, 2)
With ActiveSheet.OLEObjects("ListBox" & Target.Column - x)
.Top = Target.Top
.Left = Target.Offset(, 1).Left
.LinkedCell = Target.Address
.Visible = True
End With
boVar = False
Select Case Target.Column
Case 3
ListBox2.Visible = False
ListBox3.Visible = False
Case 4
ListBox1.Visible = False
ListBox3.Visible = False
Case 6
ListBox1.Visible = False
ListBox2.Visible = False
End Select
Else
ListBox1.Visible = False
ListBox2.Visible = False
ListBox3.Visible = False
End If
End Sub
Vielleicht kann das noch etwas zusammengefasst werden, aber im Moment sehe ich das nicht.
Gruß Atilla
Registriert seit: 29.09.2016
Version(en): 2007/2010/ 365
Hallo Atilla,
vielen Dank für deine Mühe, das klappt nun wunderbar und ist genial.
So die Erste Hürde ist genommen. Nun stehe ich vor der nächsten Problem , ich muss die Listboxen füllen.
Die Erste L BOX wollte ich über die Eigenschaft ListFillRange füllen und habe einen Namen angelegt STO der den Bereich Stoerungsliste B1:J1 beinhaltet, es wird mir allerdings nur der erste Eintrag angezeigt.
Mein zweiter Versuch dies über diesen Code zutun ListBox1.List = Stoerungsliste.Range("B1:J1").Value bringt mir das gleiche Ergebnis nur der erste Eintrag wird angezeigt.
Die zweite Sache ich muss dann noch die Zweite L Box in Abhängigkeit zur Ersten bringen und die Dritte in Abhängigkeit zur Zweiten das hatte ich ja mit der Gültigkeit über =Indirekt() gelöst.
Kannst du mir da noch mal auf die Sprünge helfen?
Gruß
Dietmar
Damit das Mögliche entsteht, muß immer wieder das Unmögliche versucht werden.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Dietmar,
wie eine horizontale Zelladresserierung an die Lisfillrange übergeben werden kann weiß ich nicht
Per VBa muss man Transponieren.
Beispiel
ListBox1.List = Application.Transpose(Stoerungsliste.Range("B1:J1").Value)
Gruß Atilla
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
ich habe den Thread jetzt nicht komplett gelesen, aber willst Du wirklich die Spalten als Zeilen darstellen? Eine Listbox kann ja z.B. einen Tabellenausschnitt darstellen und wenn Du die Spalten B bis J sehen willst, dann nimmst Du auch den ColumnCount der Listbox auf 9 und Du siehst alle 9 Einträge. Wenn nun eine Zeile dazu kommt, dann hast Du damit auch gleich alle 9 Einträge der Zeile.
Ansonsten kannst Du die Zeile in Deinem Blatt transponieren und darauf zugreifen. Ggf. auch per Formel.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 29.09.2016
Version(en): 2007/2010/ 365
Hallo Andre,
ehrlich gesagt denke ich an den gleichen Aufbau, den ich momentan noch habe, über die Gültigkeit!
Hier wird ja das erste Gültigkeits Drop Down auch zeilentechnisch dargestellt, im Zweiten sowie im dritten, werden dann die dazu angelegten Tabellen über =Indirekt() dargestellt.
Nun dachte ich, ich muss dies über die Listboxen genau so machen.
Wenn es nicht so ist, wie sollte mein Tabellenaufbau dann für meine Listboxeinstellung am besten aussehen?
Das Transportieren über diesen Code "ListBox1.List = Application.Transpose(Stoerungsliste.Range("B1:J1").Value)"
habe ich bisher auch noch umsetzen können, da er auf Fehler läuft.
Vielen Dank für eure Antworten.
Gruß
Dietmar
Damit das Mögliche entsteht, muß immer wieder das Unmögliche versucht werden.
|