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

Mehrdeutiger Name Worksheet_SelectionChange

Mehrdeutiger Name Worksheet_SelectionChange
20.07.2017 13:45:12
Dimi
Hallo,
Ich bin relativ gut in Excel aber in VBA bin ich nur ein "Code Kopierer"
Ich habe folgendes im Tabellen Code:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$D$1" Then Application.Run "Sortieren"
If Target.Address = "$D$1" Then MsgBox "Sortiert"
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Cells.Interior.ColorIndex = xlNone
Target.Interior.ColorIndex = 6
End Sub

Und dann halt noch das Makro im Modul.
Bei Klick auf D1 soll mein "Sortier-Makro" ausgeführt werden. Aber zusätzlich hätte ich gerne das die aktive Zelle farblich unterlegt wird. Einzeln funken die beiden Codes super. Aber zusammen kommt folgende Fehlermeldung:
Fehler beim Kompilieren: Mehrdeutiger Name Worksheet_SelectionChange
Ich kann mir denken was falsch ist, habe aber zu wenig Fachwissen den Fehler zu korrigieren. Kann mir einer weiterhelfen ?
LG Dimi

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrdeutiger Name Worksheet_SelectionChange
20.07.2017 13:48:11
Michael
Hallo!
Ereignisse kann es immer nur einmal geben - daher einfach kombinieren:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlNone
With Target
.Interior.ColorIndex = 6
If .Address = "$D$1" Then Application.Run "Sortieren"
If .Address = "$D$1" Then MsgBox "Sortiert"
End With
End Sub
LG
Michael
Achso, da war ja noch was doppelt...
20.07.2017 13:49:56
Michael
...besser so
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlNone
Target.Interior.ColorIndex = 6
If Target.Address = "$D$1" Then
Application.Run "Sortieren"
MsgBox "Sortiert"
End If
End Sub
Du prüfst ja zweimal auf Target.Address = "$D$1" - ist natürlich nicht 2x erforderlich.
LG
Michael
Anzeige
AW: Mehrdeutiger Name Worksheet_SelectionChange
20.07.2017 13:55:29
guenni
1) ein selection_change Ereignis erzeugt man nicht selbst; man nimmt die die in VBA bereit stehen. sonst weiß man nicht was passiert
2) bevor man mit call ein Untermakro aufruft, schaltet man application.enableevents aus, und vor Beendigung des Events wieder ein
AW: Mehrdeutiger Name Worksheet_SelectionChange
20.07.2017 14:19:56
Dimi
Der Code von Michael funktioniert super. genau das was ich möchte. Danke dafür !!
Allerdings entfernt der Code alle Füllfarben von vorher gefärbten Zellen.
Er färbt zwar immer die aktive Gelb, aber alle anderen Zellen verlieren ihre Farbe. :(
AW: Mehrdeutiger Name Worksheet_SelectionChange
20.07.2017 14:26:42
Michael
Hallo!
Er färbt zwar immer die aktive Gelb, aber alle anderen Zellen verlieren ihre Farbe.
Ja, ist klar - allerdings war das in Deinem Code immer schon so, ich habe das nur von Dir übernommen.
Die Frage ist: Was hättest Du gerne? Die jeweils aktive Zelle wird gefärbt, und dann? Bleibt sie gefärbt oder soll sie wieder entfärbt werden bei erneutem Zellwechsel?...
LG
Michael
Anzeige
AW: Mehrdeutiger Name Worksheet_SelectionChange
20.07.2017 14:32:21
Dimi
Also das ist eine relativ unübersichtliche Liste.
Ich möchte das Färben quasi als Hilfslinie benutzen, dass man schneller sieht welche Zelle gerade aktiviert ist.
Also soll die Zelle sich sobald ich eine andere anwähle wieder auf die Ursprungsfarbe zurücksetzen.(Also nicht farblos werden, falls die Zelle davor z.B. Rot war)
Geht das überhaupt?
AW: Mehrdeutiger Name Worksheet_SelectionChange
20.07.2017 14:42:49
Michael
Ah ja. Dann versuch's mal so (statt dem vorigen Code):
Dim PrevCelAdr As Range
Dim PrevColIdx
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not PrevCelAdr Is Nothing Then
PrevCelAdr.Interior.ColorIndex = PrevColIdx
End If
Set PrevCelAdr = Range(Target.Address)
PrevColIdx = Target.Interior.ColorIndex
Target.Interior.ColorIndex = 6
If Target.Address = "$D$1" Then
Application.Run "Sortieren"
MsgBox "Sortiert"
End If
End Sub
LG
Michael
Anzeige
Oder besser...
20.07.2017 14:53:09
Michael
...so:
Dim PrevCelAdr As Range
Dim PrevColIdx
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target.Cells(1)
If Not PrevCelAdr Is Nothing Then
PrevCelAdr.Interior.ColorIndex = PrevColIdx
End If
Set PrevCelAdr = Range(.Cells(1).Address)
PrevColIdx = .Interior.ColorIndex
.Interior.ColorIndex = 6
If Not Intersect(Range("D1"), Target) Is Nothing Then
Application.Run "Sortieren"
End If
End With
End Sub
Das verhindert Probleme, wenn nicht nur eine Zelle ausgewählt wird. Im Übrigen würde ich den Teil
MsgBox "Sortiert"
aus dem SelectionChange rausnehmen und ans Ende der zugehörigen "Sortieren"-Sub setzen.
LG
Michael
Anzeige
AW: Mehrdeutiger Name Worksheet_SelectionChange
20.07.2017 14:57:49
Dimi
Perfekt Perfekt Perfekt !!
Danke Michael es macht genau das was es soll. Und ich habe keine Idee warum aber egal :)
Danke yummi für die Info klingt logisch :)
Jetzt kann ich später zufrieden in den Feierabend
Danke für die Rückmeldung, aber...
20.07.2017 15:00:25
Michael
Dimi,
...nimm lieber meine Version unter dem Beitrag "Oder besser..." - die ist noch etwas robuster.
LG
Michael
AW: Danke für die Rückmeldung, aber...
20.07.2017 15:17:04
Dimi
habe ich gemacht. Danke dir
AW: Mehrdeutiger Name Worksheet_SelectionChange
20.07.2017 14:29:24
yummi
Hallo Dimi,
das steht ja auch im Code so drin :-)
Cells.Interior.Colorindex = xlNone
alle Cellen des Tabellenblatts die Farbe auf xlNone also keine farbe setzen. Wenn Du das nciht willst, dann musst Du die zeile rausnehmen, allerdings werden dann nach und nach alle zellen gelb, da Du die markierten nicht mehr entfärbst. Ich dneke mal, das wurde so gemacht, weil das merken wo ich vorher war nicht ohne zusätzliche Hilfe möglich ist.
Gruß
yummi
Anzeige
AW: Nachfragen
20.07.2017 20:29:41
Gerd
Hallo,
worin besteht der Unterschied zwischen Range(Target.Address) und Target?
Weshalb wird nicht ActiveCell zur Abgrenzung bei Mehrfachmarkierung genommen?
Gruß Gerd
Wenn die Frage(n) an mich gerichtet waren...
21.07.2017 08:31:20
Michael
Gerd,
...würde ich sagen:
worin besteht der Unterschied zwischen Range(Target.Address) und Target?
Die Target.Address weise ich (in meinem Code) deshalb einer Range zu, weil dies für die nächste Zell-Auswahl dann die "vorhergehende" Zelle darstellt, und diese somit wieder "entfärbt" werden kann. Prinzipiell sind die beiden natürlich gleich.
Weshalb wird nicht ActiveCell zur Abgrenzung bei Mehrfachmarkierung genommen?
Weil ActiveCell in Kombination mit Worksheet_SelectionChange nicht funktioniert (zumindest in diesem Fall) - hab ich für meinen Code getestet, Ergebnis unbefriedigend - da, wie mir scheint, während dem Ereignis die ActiveCell noch nicht bestimmt ist.
LG
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige