Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1836to1840
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dropdown Mehrfachauswahl o. Wiederholung

Dropdown Mehrfachauswahl o. Wiederholung
01.07.2021 10:55:02
gottem11111
Hallo zusammen,
ich habe folgenden Code für die Nutzung von Dropdown Listen mit Mehrfachauswahl aus dem Netz kopiert, für mich angepasst und es funktioniert soweit gut, bis auf die Tatsache, dass Wiederholungen im Moment noch vorkommen (was nicht so sein soll). Kann jemand von euch bitte die/den fehlende/n Zeile/Befehl hinzufügen?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Oldvalue As String
Dim Newvalue As String
On Error GoTo Exitsub
If Target.Column = 20 Then
If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then
GoTo Exitsub
Else: If Target.Value = "" Then GoTo Exitsub Else
Application.EnableEvents = False
Newvalue = Target.Value
Application.Undo
Oldvalue = Target.Value
If Oldvalue = "" Then
Target.Value = Newvalue
Else
Target.Value = Oldvalue & " | " & Newvalue
End If
End If
End If
Application.EnableEvents = True
Exitsub:
Application.EnableEvents = True
End Sub

Eine weitere Frage wäre noch, ob die Funktion und der VBA Code übernommen wird und aktiv ist, wenn die Excel online zum Teilen zur Verfügung gestellt wird (damit mehrere Nutzer gleichzeitig darauf zugreifen können wie beispielsweise in MS Teams)?
Danke für Eure Hilfe :)


		

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dropdown Mehrfachauswahl o. Wiederholung
01.07.2021 11:24:39
Pierre
Hallo,
ich habe so ein ähnliches Makro (aus diesem Forum) in einer Tabelle laufen, gerade mal grob verglichen (für eine genaue Überprüfung fehlen mir leider auch ein wenig die Kenntnisse).
Aber zwischen deinen beiden Schnipseln:

If Oldvalue = "" Then
Target.Value = Newvalue
und

Else
Target.Value = Oldvalue & " | " & Newvalue
habe ich sowas stehen: (Variablen auf deine abgeändert, meine heißen einfach nur anders)

Target.Value = Newvalue
If Oldalue  "" Then
If Newvalue  "" Then
If Right(Oldvalue, Len(Newvalue)) = Newvalue Then
MsgBox "nicht möglich", vbCritical
Application.EnableEvents = True
Target.Value = Oldvalue
Exit Sub
End If
End If
End If
Vielleicht kommst du damit ja klar.
Wenn nicht, dann sorry, aber anpassen kann ich sowas leider auch nicht, dafür bin ich nicht gut genug.
Anzeige
Online-Geteilt laufen keine Makros! (owT)
01.07.2021 12:20:59
EtoPHG

? (owT)
01.07.2021 12:26:55
Pierre
AW: Sorry im Ast verrutscht,...
01.07.2021 13:26:49
EtoPHG
Pierre,
Aber seine (letzte) Frage in Beitrag lautete: ob die Funktion und der VBA Code übernommen wird und aktiv ist, wenn die Excel online zum Teilen zur Verfügung gestellt wird (damit mehrere Nutzer gleichzeitig darauf zugreifen können wie beispielsweise in MS Teams)?
Das kann ich klar verneinen, da Makros in Excel-Online generell unterbunden sind!
Gruess Hansuel
AW: Sorry im Ast verrutscht,...
01.07.2021 13:58:03
Pierre
Achso, alles klar.
Die Frage habe ich gar nicht gelesen.
Gruß Pierre
AW: Sorry im Ast verrutscht,...
06.07.2021 14:40:10
gottem11111
Hm, ok danke für den Hinweis Hansuel.
Dennoch bleibt das Problem der doppelten Eingabe bestehen. Ich habe hierfür leider noch keine Lösung parat (auch Pierre's Tipp hat nichts gebracht).
Weiß jemand zufällig darüber hinaus, ob man das Makro auch zentral in der Arbeitsmappe verankern kann, sodass es für alle Arbeitsblätter gültig ist?
Grüße,
gottem11111
Anzeige
AW: Sorry im Ast verrutscht,...
06.07.2021 14:44:15
gottem11111
einfaches kopieren in "DieseArbeitsmappe" führt nicht zum Erfolg. Wahrscheinlich müsste man das "Private Sub Worksheet_Change(ByVal Target As Range)" ändern, jedoch fehlt mir dazu die Expertise.
komplettes Makro
07.07.2021 13:18:12
Pierre
Hi,
ich schicke dir mal das komplette Makro:

'einfügen in dem Blatt, auf dem die Box ist
Private Sub Worksheet_Change(ByVal Target As Range)
'Es wird aus einer Dropdown-Liste eine Mehrfachauswahl zugelassen
'Zu Beginn steht etwas in der Zelle, dieser Eintrag wird gelöscht und
'durch die Auswahl aus der Liste ersetzt.
'Eine doppelte Auswahl ist nicht möglich.
Worksheets("Tabelle1").Unprotect Password:="test"          'Passwort anpassen!
Dim rngDV As Range
Dim wert_old As String
Dim wertnew As String
Application.ScreenUpdating = False                  'Bildschirmaktualisierung ausschalten
Application.EnableEvents = True                     'Ereignisse einschalten (BeforePrint, BeforeSave, BeforeClose, usw.)
If Not Application.Intersect(Target, Range("D3")) Is Nothing Then       'Zelle anpassen
Set rngDV = Target.SpecialCells(xlCellTypeAllValidation)
If rngDV Is Nothing Then GoTo Errorhandling
If Not Application.Intersect(Target, rngDV) Is Nothing Then
Application.EnableEvents = False                    'Ereignisse ausschalten (BeforePrint, BeforeSave, BeforeClose, usw.)
wertnew = Target.Value
Application.Undo
wertold = Target.Value
Target.Value = wertnew
If wertold  "" Then
If wertnew  "" Then
If Right(wertold, Len(wertnew)) = wertnew Then
MsgBox "nicht möglich", vbCritical
Application.EnableEvents = True                     'Ereignisse einschalten (BeforePrint, BeforeSave, BeforeClose, usw.)
Target.Value = wertold
Exit Sub
End If
If wertold  wertnew Then Target.Value = wertold & "; " & wertnew      'Werte durch Semikolon trennen, evtl. anpassen
End If
End If
End If
Application.EnableEvents = True                     'Ereignisse einschalten (BeforePrint, BeforeSave, BeforeClose, usw.)
End If
Application.EnableEvents = True                     'Ereignisse einschalten (BeforePrint, BeforeSave, BeforeClose, usw.)
Application.ScreenUpdating = True                   'Bildschirmaktualisierung einschalten
Worksheets("Tabelle1").Protect Password:="test"            'Passwort anpassen!
End Sub
Vielleicht hilft dir das besser.
Wenn du es auf jedem Tabellenblatt machen willst, dann musst du die oberste Zeile (worksheet_change) z. B. ändern zu

Private Sub Workbook_Activate
Dann beim "Dimensionierungsblock" noch zusätzlich:
Dim ws as Worksheet
Und um den eigentlichen Code herum eine For each-Schleife (For each ws in ThisWorkbook ... Makro ... Next ws).
Das allerdings ungetestet!
Gruß
Anzeige

224 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige