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.

Mehrere DropDown mit Mehrfachauswahl in einer Tabelle
#1
Liebes Forum,

nach Vorlage:

http://www.clever-excel-forum.de/Thread-...achauswahl
und:
https://www.youtube.com/watch?v=EM8z5oAF5t8

habe ich eine Excel Tabelle mit drei DropDown Menüs erstellt. Jetzt würde ich gerne die Mehrfachauswahl für jedes Menü Programmieren, habe aber keine Erfahrung in VBA. Über die Forumssuche und Google habe ich leider nichts gefunden was mir weiterhilft.


Zusätzlich soll in der Spalte G4:G58 und H4:H58 das gleiche Programm funktionieren. Ich habe verstanden dass es mehrere Lösungsansätze gibt, vielleicht könnt Ihr mir auf die Sprünge helfen?

Die Programmvorlage sieht bis jetzt so aus:


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'** Mehrfachauswahl über DropDown-Liste (Gültigkeitsprüfung)
'** Einfügen im Code-Container des betreffenden Arbeitsblattes

'** Dimensionierung der Variablen
Dim rngDV As Range
Dim wert_old As String
Dim wertnew As String

'** Errorhandling
On Error GoTo Errorhandling

'** Mehrfachauswahl im definierten Bereich (Bsp. L4:L58) durchführen
If Not Application.Intersect(Target, Range("L4:L58")) Is Nothing Then

'**Range definieren
Set rngDV = Target.SpecialCells(xlCellTypeAllValidation)
If rngDV Is Nothing Then GoTo Errorhandling

'** Prüfen, ob eine gültige Zelle ausgewählt wurde und Werte eintragen
If Not Application.Intersect(Target, rngDV) Is Nothing Then
   Application.EnableEvents = False
   wertnew = Target.Value
   Application.Undo
   wert_old = Target.Value
   Target.Value = wertnew
   If wert_old <> "" Then
     If wertnew <> "" Then
       If Right(wert_old, Len(wertnew)) = wertnew Then
         Target.Value = Left(wert_old, Len(wert_old) - Len(wertnew) - 2)
       Else
         Target.Value = wert_old & ", " & wertnew
       End If
     End If
   End If
End If

End If

Errorhandling:
Application.EnableEvents = True
End Sub
Antworten Top
#2
Hallo!
Und was hat der Code jetzt mit Deiner Datei zu tun (denn der ist ja eher speziell)?
Die solltest Du mal hochladen.
Außerdem sollte daraus hervorgehen, was Du genau vorhast.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3

.zip   Test.zip (Größe: 276,32 KB / Downloads: 0)
(22.12.2015, 11:31)RPP63 schrieb: Hallo!
Und was hat der Code jetzt mit Deiner Datei zu tun (denn der ist ja eher speziell)?
Die solltest Du mal hochladen.
Außerdem sollte daraus hervorgehen, was Du genau vorhast.

Gruß Ralf
Hallo Ralf,

Danke für deine schnelle Antwort. Es geht um eine Befragung mit verschiedenen Kriterien. Für die Auswahl 3 habe ich die Programmierung so eingefügt bekommen, das mehrere Möglichkeiten ausgewählt werden können. Das würde ich gerne für Auswahl 1 und 2 auch so haben. 

Gruß

Marius
Antworten Top
#4
Guten Morgen,

So schnell kann es gehen, ich habe gleich zwei Lösungen für mein Problem:
.....

Code:
If Not Application.Intersect(Target, Range("G4:L58")) Is Nothing Then
.....

zum einen kann man den Bereich in dem das Programm läuft einfach erweitern, dafür müssen die Spalten aber neben einander liegen. (vgl. vorher)
....
Code:
If Not Application.Intersect(Target, Range("L4:L58")) Is Nothing Then
....

wenn die Spalten nicht nebeneinander liegen kann man den Arbeitsbereich für das Programm auch auftrennen:
...
Code:
If Not Application.Intersect(Target, Range("G4:I58,J4:J58,M4:M58")) Is Nothing Then
...

Vielleicht kann ja noch jemand was mit der Info anfangen!

guten Rutsch ins neue Jahr,

Gruß

Marius
Antworten Top
#5
Hi Marius,

(30.12.2015, 09:07)Unimog88 schrieb: So schnell kann es gehen, ich habe gleich zwei Lösungen für mein Problem:
[...]
Vielleicht kann ja noch jemand was mit der Info anfangen!

Danke für die Rückmeldung!
Ich glaube, bei diesen Zeilen mit "Intersect" kann das "Application." weggelassen werden, dann wird es etwas kürzer. :)

Es geht auch noch, mehrere Bereiche mit "Union" usw. zusammenzufassen!
Code:
  Dim rngUnion As Range

Set rngUnion = Application.Union(Range("G4:I58", "J4:J58", "M4:M58"))
If Not Intersect(rngUnion, Target) Is Nothing Then
Dann ist der Code aber wieder etwas länger. ;)

oder
Code:
Set rngUnion = Application.Union(Range("G4:I58"), Range("J4:J58"), Range("M4:M58"))
[-] Folgende(r) 1 Nutzer sagt Danke an Rabe für diesen Beitrag:
  • Unimog88
Antworten Top
#6
Hallo Ralf,

jetzt geht es ja schlag auf schlag, so eine Forumsarbeit finde ich gut!

Vielen Dank dafür
Gruß
Marius
Antworten Top


Gehe zu:


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