Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1412to1416
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

Spannendes SelectionChange Event

Spannendes SelectionChange Event
13.03.2015 12:00:03
rx1600
Hallo VBA Experten,
ich habe eine persönliche Herausforderung mit dem SelectionChange Event.
Ich möchte, dass Excel eine Zelle mit einem "#" überschreibt / editiert, wenn eine beliebige Zelle in einer Zeile selektiert ist. Dies soll für mehrere Zeilen geschehen. Wenn also eine beliebige Zelle zwischen, bspw., den Zeilen 30 und 60 markiert ist, dann ändere jeweils die Zelle in Spalte A, die in der Zeile liegt in der die Zelle markiert ist: ändere A30 wenn Zelle A30:Z30 selektiert. Gleichzeitig soll alles andere in Spalte A sofort gelöscht werden. Damit bleibt nur A30 mit einem #, der Rest ist leer. Nach meinem Verständnis sind das zwei Prozesse, die hier angelegt werden müssten. Mein Vorschlag bisher war:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("B30").Address Then _
Range("A30").Value = "#"
End Sub
Aber das ist ja offenkundig recht unelegant nur für eine einzelne Zelle und sie löscht auch nicht den Rest der Inhalte aus Spalte A. Wie sollte Eurer Meinung nach der Code gestrikt sein? Vielen Dank.
Grüße,
Oliver

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

Betreff
Datum
Anwender
Anzeige
AW: Spannendes SelectionChange Event
13.03.2015 12:19:04
Michael
Hallo Oliver!
Versuch mal so; den betreffenden Bereich, in dem ausgewählte Zellen das Makro auslösen, kannst Du in der Variablen anpassen, aktuell für A30:Z60:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim bereich As Range
Set bereich = Tabelle1.Range("A30:Z60")
If Not Intersect(bereich, Target) Is Nothing Then
Worksheets("Tabelle1").Range("A:A").ClearContents
Worksheets("Tabelle1").Cells(Target.Row, 1).Value = "#"
End If
End Sub
Passt?
LG
Michael

AW: Spannendes SelectionChange Event
13.03.2015 12:26:13
rx1600
Hallo Michael,
danke für die schnelle Antwort. Der Code sieht gut aus, was ich so mit meinem einfachen Verständnis beurteilen kann. Es hat noch nicht geklappt, weil ich Tabelle1 noch ummünzen muss. Ich schätze das soll mein Spreadsheet sein. Das hieße "Summary". Wenn ich "Tabelle1" drei Mal umändere in "Summary", z.B. Set bereich = Summary.Range gibt er mir eine Fehlermeldung. Was sollte ich ändern? Ich nutze Excel 2010 auf Englisch.
Viele Grüße,
Oliver

Anzeige
Wollte das gerade nachreichen...
13.03.2015 12:30:16
Michael
Hi Oliver!
So ist es kürzer und Du musst (außer dem Bereich der Zellen, die das Makro auslösen) nichts ändern oder ergänzen:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Range("A30:Z60"), Target) Is Nothing Then
Range("A:A").ClearContents
Cells(Target.Row, 1).Value = "#"
End If
End Sub
Da das Makro sowieso in den Code-Teil des betroffenen Tabellenblattes muss, sind meine Umwege über Worksheet... nicht erforderlich.
Klappt?!
LG
Michael

AW: Wollte das gerade nachreichen...
13.03.2015 12:42:47
rx1600
Super! Klasse, funktioniert ja super gut und der Code sieht auch elegant kurz aus! Besten Dank!

Anzeige
Danke für die Rückmeldung...
13.03.2015 12:53:15
Michael
Oliver!
Die Anmerkungen von Franz treffen natürlich auch auf meinen Code zu, dessen musst Du Dir bewusst sein.
LG
Michael

AW: Spannendes SelectionChange Event
13.03.2015 12:28:39
fcs
Hallo Oliver,
man kann es über das SelectionChange-Event machen. Aber da sind dann doch sehr schnell unerwünschte Änderungen möglich. Ich würde das BeforeRightClick-Ereignis verwenden, dann hast du mehr Kontrolle über die Aktion.
Gruß
Franz
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim Zeile1 As Long, Zeile2 As Long
Zeile1 = Target.Row
Zeile2 = Zeile1 + Target.Rows.Count - 1
Select Case Zeile1
Case Is >= 2 'erste Zeile ab der Makro wirksam sein soll
Range(Cells(Zeile1, 1), Cells(Zeile2, 1)).ClearContents
Cells(Zeile1, 1) = "#"
Cancel = True
Case Else
'do nothing
End Select
End Sub
'nicht so prickelnd - versehentliche Änderungen leicht möglich
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Zeile1 As Long, Zeile2 As Long
Zeile1 = Target.Row
Zeile2 = Zeile1 + Target.Rows.Count - 1
Select Case Zeile1
Case Is >= 2 'erste Zeile ab der Makro wirksam sein soll
Range(Cells(Zeile1, 1), Cells(Zeile2, 1)).ClearContents
Cells(Zeile1, 1) = "#"
Case Else
'do nothing
End Select
End Sub

Anzeige
AW: Spannendes SelectionChange Event
13.03.2015 12:44:06
rx1600
Hallo Franz,
vielen Dank für den Code. Habe es auch damit probiert. Hier ein Code von einem der Kollegen hier:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Range("A30:Z60"), Target) Is Nothing Then
Range("A:A").ClearContents
Cells(Target.Row, 1).Value = "#"
End If
End Sub

Sieht auch gut aus. Vielen Dank und beste Grüße

41 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige