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

Erweiterung des Makros

Erweiterung des Makros
29.09.2021 04:22:12
Sven
Guten Morgen,
Bei der Erstellung hat ein nicht mehr verfügbarer Kollege geholfen. Ich versuche noch, mich mit VBA anzufreunden, aber es geht nicht.
Folgendes Makro soll in Spalte 17 und Spalte 18 ausgeführt werden:
Option Explicit
Const TargetColumn As Long = 17 ' Ziele in Spalte 17 (Q).
Const bolSorted As Boolean = False ' 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 = 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, Chr(10) & strTarget, "")
strResult = Replace(strResult, strTarget & ", ", "")
strResult = Replace(strResult, strTarget, "")
Else
strResult = TargetOldText & Chr(10) & Target.Value              'Chr bedeutet die Auflistung untereinander
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 With
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, Chr(10) & strTarget, "")
strResult = Replace(strResult, strTarget & ", ", "")
strResult = Replace(strResult, strTarget, "")
Else
strResult = TargetOldText & Chr(10) & Target.Value              'Chr bedeutet die Auflistung untereinander
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) 
Spalte 18 soll neu eingefügt werden und die Sortierung bzw. mehrfache Auswahl soll in beiden Spalten funktionieren.

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Erweiterung des Makros
29.09.2021 07:01:32
MCO
Moin!
Wenn ich das richtig verstehe, wird hier der Wert festgelegt, der die Ziel-Spalte darstellt

Const TargetColumn As Long = 17 ' Ziele in Spalte 17 (Q).
Das ist aber eine Constante.
Was passiert denn, wenn du im Makro folgendes änderst

If Target.Column = TargetColumn  or Target.Column = TargetColumn +1 Then
Gruß, MCO
AW: Erweiterung des Makros
01.10.2021 06:17:13
Sven
Guten Morgen,
ich kam heute morgen zum Testen und habe es versucht, aber leider ohne Erfolg.
Kann ich die Konstante auf beide Spalten anwenden? (Bloßes Kopieren in "Option Explicit" hat nicht funktioniert)
Anzeige
AW: Erweiterung des Makros
01.10.2021 15:39:19
Piet
Hallo
ich weiss nicht was du mit Option Explicit kopiert hast und Warum? Der Befehl sagt nur das jede Variable mit DIM festgelegt sein muss, mehr nicht!
Sprich doch im Makro einfach und unmissverständlichen Klartext. Gib die gewünschten Spalten einfach als direkte Zahl an. Dann sollte es klappen.
If Target.Column = 17 Or Target.Column = 18 Then
mfg Piet
AW: Erweiterung des Makros
01.10.2021 15:44:43
Piet
Nachtrag
prüfe bitte mal ob der Befehl mit Target MEHR als einmal im Code vorkommt. Dann musst du alle ZBefehls eilen ändern.
mfg Piet
AW: Erweiterung des Makros
01.10.2021 16:57:42
Sven
Danke für die Tipps, aber leider komme ich noch nicht weiter.
Hier ist die Tabelle mit funktionierendem Makro im Bereich Begründung.
https://www.herber.de/bbs/user/148395.xlsm
Mehrere Gründe können ausgewählt werden und werden untereinander eingefügt.
Dies soll auch in der Spalte ANLASS erfolgen.
Wenn ich die Erweiterung von Piet (hoffentlich richtig) einfüge, dann passiert bei der Auswahl des DropDown- Eintrages was komisches:
Er übernimmt EInträge aus anderen bereichen und fügt sie zusammen ein...
Hier ist diese Version der Tabelle: https://www.herber.de/bbs/user/148396.xlsm
Nun ist es hoffentlch verständlicher, was ich meine...
Anzeige
AW: Erweiterung des Makros
01.10.2021 17:41:19
Yal
Hallo Sven,
Du muss die Definitionsbereich der Anlass noch einmal unter die Lupe nehmen:
_ gehe auf "Formeln", "Namensmanager"
_ dort findest Du den benannten Bereich "MTS", der zurzeit sich auf Begründung!$H$4:$H$6 bezieht
_ korrigiere diesen Bereich
Dann in alle Erfassungszelle in Spalte S
_ gehe auf "Daten", "Datenüberprüfung"
_ setzte "Zulassen" auf "Liste"
_ in der Quelle "=MTS"
Dann mit folgendem Code funktioniert die Sortierung (die bisher nichts getan hat):

Const TargetColumn As Long = 18          ' Ziele in Spalte 18 (R    ).
Const bolSorted As Boolean = False       ' Legt fest, ob die Werte noch sortiert werden.
Dim TargetOldText As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'wenn eine Zelle selectiert wird, die vorhandene Wert merken
TargetOldText = Target.Range("A1").Value 'nur die erste Zelle
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
Application.EnableEvents = False
If Target.Column = TargetColumn Or Target.Column = (TargetColumn + 1) Then
If Target.Cells.Count > 1 Then Exit Sub ' Keine Verarbeitung, wenn Change auf mehrere Zelle wirkt
strTarget = Trim$(Target.Value)
If Not TargetOldText = "" And Not Target.Value = "" Then
If InStr(1, TargetOldText, Target.Value) > 0 Then
strResult = Replace(TargetOldText, Chr(10) & strTarget, "")
strResult = Replace(strResult, strTarget & ", ", "")
strResult = Replace(strResult, strTarget, "")
Else
strResult = TargetOldText & Chr(10) & Target.Value 'Chr(10) (=vbLf) bedeutet Line feed, also nöächste Zeile
strResult = Join(Selectionsort(Split(strResult, vbLf)), vbLf)
End If
Target.Value = Trim(strResult)
Else
Target.Value = Target.Value 'ersetzt eventuelle Formeln durch Wert
End If
End If
TargetOldText = Trim(Target.Value) 'Falls keine SelectionChange
Application.EnableEvents = True
End Sub
Private Function Selectionsort(ByRef data As Variant)
Dim OG&, i&, j&, k&, h
OG = UBound(data)
For i = 0 To OG - 1
h = data(i)
k = i
For j = i + 1 To OG
If data(j) 
VG
Yal
Anzeige
AW: Erweiterung des Makros
03.10.2021 00:10:55
Sven
Die Spalte "Gründe" soll mehrere Einträge zulassen, die aus der entsprechenden Liste gewählt werden, was mit dem Makro funktioniert.
Die Spalte "MTS" soll EBENFALLS mehrere Einträge zulassen. Hier ist mein Problem, ich weiß nicht, wie ich das Makro umschreiben muss...
@ Yal: Ich danke die Hilfe.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige