Registriert seit: 29.09.2016
Version(en): 2007/2010/ 365
25.04.2017, 16:44
(Dieser Beitrag wurde zuletzt bearbeitet: 25.04.2017, 16: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, 15:31
(Dieser Beitrag wurde zuletzt bearbeitet: 26.04.2017, 15: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.
|