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.

dropdown vba für mehrfachauswahl, eine zelle exkludieren
#1
Hallo meine lieben :)

ich habe für ein ziemlich komplexes excel verschiedene dropdownfelder erstellt, mit dem man mehrere möglichkeiten auswählen kann und auch, dass auswahlen gelöscht werden, wenn man sich nochmal anklickt.
dafür hab ich eine range festgelegt (in meinem fall c200:g500)

jetzt zu meinem problem: ich hab in zelle c11 ein dropdown mit suchfunktion (aus einer anderen datei, per sverweis werden gewisse daten in gewisse zellen übertragen), durch die mehrfachauswahlmöglichkeit lässt er mir aber den suchbegriff stehen und die ganzen sverweise funktionieren klarerweise nicht mehr - wie kann ich diese zelle im code für die mehrfachauswahl exkludieren?

bin ziemlicher vba-noob und hab mir den code aus div. videos usw. zusammengestoppelt.. gibts eine funktion "excludeCell("c11") oder sowas?

das hab ich bisher:

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
Dim lUsed As Long

If Target.Count > 1 Then GoTo exitHandler

On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler

If rngDV Is Nothing Then GoTo exitHandler

If Intersect(Target, rngDV) Is Nothing Then
  'do nothing
Else
  Application.EnableEvents = False
  newVal = Target.Value
  Application.Undo
  oldVal = Target.Value
  Target.Value = newVal
  If Target.Column = 3 Then
    If oldVal = "" Then
      'do nothing
      Else
      If newVal = "" Then
      'do nothing
      Else
        lUsed = InStr(1, oldVal, newVal)
        If lUsed > 0 Then
            If Right(oldVal, Len(newVal)) = newVal Then
                Target.Value = Left(oldVal, Len(oldVal) - Len(newVal) - 2)
            Else
                Target.Value = Replace(oldVal, newVal & ", ", "")
            End If
        Else
            Target.Value = oldVal & ", " & newVal
        End If
       
      End If
    End If
  End If
End If

exitHandler:
  Application.EnableEvents = True
End Sub
Antworten Top
#2
Hallo,

anhand des Quelltextes wird niemand deine Datei zum Testen nachbauen (wollen). Noch ein Tipp: Texte in radikaler Kleinschreibung lassen sich nur schlecht lesen. Bitte verzichte auf diesen Unfug.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Hallo phaona,

da gibt es range("A1")=clear oder cells(1,1)=clearcontents.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
[-] Folgende(r) 1 Nutzer sagt Danke an Glausius für diesen Beitrag:
  • Phaona
Antworten Top
#4
Hallo,

um die Zelle C11 des Arbeitsblattes, zu dem dieser VBA-Code gehört, von der speziellen "Application.Undo"-Behandlung auszuschließen, brauchst du nur nach der Code-Zeile
If Target.Count > 1 Then GoTo exitHandler
eine weitere Code-Zeile
If Target.Address = "$C$11" then GoTo exitHandler
einzufügen.

Damit umgehst du für die Zelle C11 (=Target) folgende Ereignisbehandlung, 
in der eine Zellwertänderung (durch Werteingabe oder DropDown-Auswahl) stattfand:

Wenn folgende 7 Bedingungen alle gleichzeitig erfüllt sind:
1) Target ist der Bereich, in dem eine Wertänderung stattfand
2) Target enthält nur 1 Zelle
3) rngDV ist der Bereich, für den eine Zellvalidierung definiert ist
4) Target ist in rngDV enthalten
5) Target ist in Spalte C enthalten
6) Der Wert von Target vor der Wertänderung (=oldVal) ist nicht leer (d.h. <>"")
7) Der Wert von Target nach der Wertänderung (=newVal) ist ebenfalls nicht leer (zB. ="N")
dann gibt es 4 verschiedene Möglichkeiten, die vom Makro behandelt werden:
1) falls oldVal="xN" und newVal="N" dann wird  Taget.Value auf "x" geändert
2) falls oldVal="xNty" und newVal="N" dann wird Target.Value nicht geändert (bleibt also "xNty")
3) falls oldval="xN, y" und newVal="N" dann wird Target.Value auf "xy" geändert
4) falls oldval="x" und newVal="N" dann wird Target.Value auf "x, N" geändert.
(wobei jeweils "x","N","t","y" für unterscheidbare Zeichenketten stehen und ferner "t" ungleich ", " sein muss).
Mit lieben Grüßen
Anton.

Windows 10 64bit
Office365 32bit
[-] Folgende(r) 1 Nutzer sagt Danke an EA1950 für diesen Beitrag:
  • Phaona
Antworten Top
#5
hallo anton!

danke für deine ausführliche antwort!
das oben beschriebene problem hab ich so gelöst (hab der zelle c11 einen namen gegeben): if not intersect (target, me.range("Verein")) is nothing then exit sub

jetzt hat sich aber noch ein anderes problem durch die mehrfachauswahl ergeben  Dodgy und zwar hab ich in dem excel auch zellen, in denen ich einfach was reinschreiben möcht (also kein dropdown) und ua. auch zahlen mit kommastellen (maße, geographische koordinaten usw.).. wenn ich jetzt aber ein komma tipp glaubt er scheinbar, dass es eine mehrfachauswahl ist und schmeißt mir die formatierung über bord

kann ich den code irgendwie NUR auf zellen anwenden, in denen ein dropdown ist?

danke & LG
Antworten Top
#6
hallo nochmal :)

habs gerade geschafft  21
hab festgestellt, dass es eigentlich nur zahlen sind - also hab ich diese zeile dazugepackt:
if isnumeric (target) then goto exithandler 
es klappt einwandfrei! das war somit die allererste zeile code, die ich selbst geschrieben hab und nicht irgendwo rauskopiert hab  19  18
Antworten Top


Gehe zu:


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