Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1856to1860
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

Code Umschreiben und Fehlermeldung

Code Umschreiben und Fehlermeldung
01.12.2021 08:11:03
Hannes
Hallo zusammen,
ich habe folgenden Code zusammengeschustert, der genau macht, was ich will:
Const TargetColumn As Long = 3 ' Ziele in Spalte 3.
Const bolSorted As Boolean = True ' Legt fest, ob die Werte noch sortiert werden.
Dim blockedEvent As Boolean
Dim TargetOldText As String
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
'Update 20200430
Static xRow
Static xColumn
If xColumn "" Then
With Columns(xColumn).Interior
.ColorIndex = xlNone
End With
With Rows(xRow).Interior
.ColorIndex = xlNone
End With
End If
pRow = Selection.Row
pColumn = Selection.Column
xRow = pRow
xColumn = pColumn
With Columns(pColumn).Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
With Rows(pRow).Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
On Error Resume Next
If Target.Column = TargetColumn Then
TargetOldText = Target.Value
End If
[TargetZeile] = Target.Row
[TargetSpalte] = Target.Column
[TargetValue] = Target.Value
End Sub

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 = TargetColumn 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 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) 
(ausgeählte Zeile und Spalte markieren und Drop Down Mehrfachauswahlerlauben)
Nun haben sich 2 Prbleme ergeben:
1. Wie kann ich die Mehrfachauswahl der Drop downs auf weitere Spalten beziehen? Sprich
Const TargetColumn As Long = 3 entsprechend umschreiben
2. Sobald ich neue Drop downs einfüge erhalte ich Laufzeitfehler 13, Typen unverträglich.
und markiert wird die fett gedruckte Zeile: strTarget = Trim(Target.Value)

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code Umschreiben und Fehlermeldung
02.12.2021 11:44:31
ChrisL
Hi Hannes
Zu 1:
In dem Fall würde ich auf eine Konstante verzichten und pragmatisch den Code direkt anpassen z.B.

If Target.Column = 3 Or Target.Column = 5 Then
Zu 2:
Ich denke das Problem entsteht, wenn mehrere Zellen gleichzeitig geändert werden (z.B. mittels Copy/Paste).
Ich sehe keine Möglichkeit dies zu ändern. Zwar kannst du im Change-Event auch die Zellen eines bearbeiteten Bereichs durchlauf (For Each Zelle in Target.Cells). Aber der Code (zwischen-)speichert ja auch den TargetOldText und da kannst du nicht so leicht ganze Bereiche speichern bzw. diese mit den Änderungen abgleichen.
cu
Chris
Anzeige
AW: Code Umschreiben und Fehlermeldung
02.12.2021 13:38:41
Hannes
Hi Chris,
vielen dank für deine Hilfe. Wo muss genau muss
If Target.Column = 3 Or Target.Column = 5 Then
dann hin?
Wie kann ich den Code auf mein gesamtes Abreitsblatt umschreiben?
Ich muss sagen meine VBA kenntnisse sind sehr bescheiden.
AW: Code Umschreiben und Fehlermeldung
02.12.2021 14:08:38
ChrisL
Hi
Es geht um die Formulierung der folgenden Zeile:

If Target.Column = TargetColumn Then
Vorhin wolltest du auf weitere Spalten ausweiten, jetzt auf das ganze Arbeitsblatt. Für letzteres kannst du die Bedingung ganz löschen.

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 = TargetColumn 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
cu
Chris
Anzeige
AW: Code Umschreiben und Fehlermeldung
03.12.2021 07:32:51
Hannes
Hi,
Ja nach rauslöschen klappt es soweit, dass ich das auf alle Zellen anwenden kann. Allerdings kopiert wer mir dann jedes mal den ausgewählten inhalt aus der Zelle zuvor mit in die neue Zelle.
Beispiel:
Ich wähle in A1 Apfel, Birne
wenn ich in B1 Jetzt nur Obst auswähle erhalte ich in B1 als Eintrag: Apfel, Birne, Obst
Ziel soll es sein in B1 nur Obst zu erhalten, bzw. bei weiterer Auswahl in B1 auch weitere Einträge.
Nochmals vielen Dank für deine Hilfe.
AW: Code Umschreiben und Fehlermeldung
03.12.2021 08:52:08
ChrisL
Hi Hannes
Ohne Beispieldatei lässt sich dein Fruchtsalat leider nicht nachvollziehen. Keine Ahnung was dein Code korrekterweise machen sollte und wie die Ausgangslage aussieht.
cu
Chris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige