13.02.2017, 12:45
Hallo zusammen,
hoffe, Ihr könnt mir helfen.
Habe eine Excel Tabelle mit mehreren Dropdownlisten (in verschiedenen Spalten) mit einer Mehrfachauswahl, erstellt.
Das funktioniert in der ersten Spalte auch einwandfrei. Wenn ich aber nun in der nächsten Spalte eine Mehrfachauswahl erstelle, dann wird der Inhalt der vorherigen Auswahl mit übernommen, obwohl die Datenübprüfung auf verschiedene Listen zugreift
Als Beispiel: in dieser Tabelle muss man zu erst Wochentage auswählen (Montag, Dienstag, Mittwoch.....) und später Kalenderwochen (1. KW, 2. KW, 3. KW.....) und anschließend Namen (Müller, Meier, Schneider...). Wenn ich jetzt in der ersten Spalte "Montag" auswähle und dann die Kalenderwochen "2. KW" auswählen möchte, übernimmt er erst mal den Wert "Montag" aus der vorigen Spalte
So habe ich dann in der Kalenderwochenspalte stehen: "Montag, 2. KW"
Wie kann ich nun Excel sagen, dass er in einer neuen Spalte nicht den Wert, der vorher in einer anderen Spalte eingegeben wurde, mit übernehmen soll?
Habe nur VBA-Grundkenntnisse und kann leider keinen Fehler finden.
Da ich hier auf Arbeit bin, kann ich keine Dateien anhängen, daher nachfolgend meinen VBA Code
Const bolSorted As Boolean = True ' Legt fest, ob die Werte noch sortiert werden.
Dim blockedEvent As Boolean
Dim TargetOldText As String
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strResult As String
Dim strTarget As String
Dim arrSorted As Variant
Dim i As Long
If Target.Column = 6 Or Target.Column = 15 Or Target.Column = 18 Or Target.Column = 20 Then
strTarget = Trim$(Target.Value)
If Not blockedEvent Then
blockedEvent = True
If Not TargetOldText = "" And Not Target.Value = "" Then
If InStr(1, TargetOldText, Target.Value) > 0 Then
strResult = Replace(TargetOldText, ", " & strTarget, "")
strResult = Replace(strResult, strTarget & ", ", "")
strResult = Replace(strResult, strTarget, "")
Else
strResult = TargetOldText & ", " & Target.Value
End If
If bolSorted Then
arrSorted = Split(strResult, ", ")
strResult = ""
Call Selectionsort(arrSorted)
For i = 0 To UBound(arrSorted)
strResult = strResult & arrSorted(i) & ", "
Next i
If Len(strResult) > 1 Then _
strResult = Left$(strResult, Len(strResult) - 2)
End If
Target.Value = strResult
Else
Target.Value = Target.Value
End If
TargetOldText = Target.Value
Else
blockedEvent = False
End If
Else
TargetOldText = ""
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Target.Column = TargetColumn Then
TargetOldText = Target.Value
End If
End Sub
Private Sub Selectionsort(ByRef data As Variant)
Dim OG&, i&, j&, k&, h As Variant
OG = UBound(data)
For i = 0 To OG - 1
h = data(i)
k = i
For j = i + 1 To OG
If data(j) < h Then
h = data(j)
k = j
End If
Next j
data(k) = data(i)
data(i) = h
Next i
End Sub
Wenn Ihr eine Lösung habt, bitte als Antwort hier den korrigierten VBA Code posten, da ich hier im Büro keine Dateien herunterladen kann - lieben Dank im Voraus für Eure Hilfe :)
Viele Grüße
dwarfprincess
hoffe, Ihr könnt mir helfen.
Habe eine Excel Tabelle mit mehreren Dropdownlisten (in verschiedenen Spalten) mit einer Mehrfachauswahl, erstellt.
Das funktioniert in der ersten Spalte auch einwandfrei. Wenn ich aber nun in der nächsten Spalte eine Mehrfachauswahl erstelle, dann wird der Inhalt der vorherigen Auswahl mit übernommen, obwohl die Datenübprüfung auf verschiedene Listen zugreift
Als Beispiel: in dieser Tabelle muss man zu erst Wochentage auswählen (Montag, Dienstag, Mittwoch.....) und später Kalenderwochen (1. KW, 2. KW, 3. KW.....) und anschließend Namen (Müller, Meier, Schneider...). Wenn ich jetzt in der ersten Spalte "Montag" auswähle und dann die Kalenderwochen "2. KW" auswählen möchte, übernimmt er erst mal den Wert "Montag" aus der vorigen Spalte
So habe ich dann in der Kalenderwochenspalte stehen: "Montag, 2. KW"
Wie kann ich nun Excel sagen, dass er in einer neuen Spalte nicht den Wert, der vorher in einer anderen Spalte eingegeben wurde, mit übernehmen soll?
Habe nur VBA-Grundkenntnisse und kann leider keinen Fehler finden.
Da ich hier auf Arbeit bin, kann ich keine Dateien anhängen, daher nachfolgend meinen VBA Code
Const bolSorted As Boolean = True ' Legt fest, ob die Werte noch sortiert werden.
Dim blockedEvent As Boolean
Dim TargetOldText As String
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strResult As String
Dim strTarget As String
Dim arrSorted As Variant
Dim i As Long
If Target.Column = 6 Or Target.Column = 15 Or Target.Column = 18 Or Target.Column = 20 Then
strTarget = Trim$(Target.Value)
If Not blockedEvent Then
blockedEvent = True
If Not TargetOldText = "" And Not Target.Value = "" Then
If InStr(1, TargetOldText, Target.Value) > 0 Then
strResult = Replace(TargetOldText, ", " & strTarget, "")
strResult = Replace(strResult, strTarget & ", ", "")
strResult = Replace(strResult, strTarget, "")
Else
strResult = TargetOldText & ", " & Target.Value
End If
If bolSorted Then
arrSorted = Split(strResult, ", ")
strResult = ""
Call Selectionsort(arrSorted)
For i = 0 To UBound(arrSorted)
strResult = strResult & arrSorted(i) & ", "
Next i
If Len(strResult) > 1 Then _
strResult = Left$(strResult, Len(strResult) - 2)
End If
Target.Value = strResult
Else
Target.Value = Target.Value
End If
TargetOldText = Target.Value
Else
blockedEvent = False
End If
Else
TargetOldText = ""
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Target.Column = TargetColumn Then
TargetOldText = Target.Value
End If
End Sub
Private Sub Selectionsort(ByRef data As Variant)
Dim OG&, i&, j&, k&, h As Variant
OG = UBound(data)
For i = 0 To OG - 1
h = data(i)
k = i
For j = i + 1 To OG
If data(j) < h Then
h = data(j)
k = j
End If
Next j
data(k) = data(i)
data(i) = h
Next i
End Sub
Wenn Ihr eine Lösung habt, bitte als Antwort hier den korrigierten VBA Code posten, da ich hier im Büro keine Dateien herunterladen kann - lieben Dank im Voraus für Eure Hilfe :)
Viele Grüße
dwarfprincess