Excel VBA Selection begrenzen?
Hallo zusammen.
Ich komme leider beim meinem Problem nicht alleine weiter.
In meiner Tabelle werden in Spalte 2 und Zeile 4 Zeichen angezeigt, sobald ein Bereich selektiert wird. Die Zeichen sollen sich allerdings nur auf die Range J7:OJ57 beschränken, auch wenn die Selektion über die Range hinausgeht.
Denn jetzt, wenn ich z.B. eine Spalte markiere, schreibt der Code mir alle Zeichen in jede Zeile der Spalte, was fatal ist.
Kann ein Profi kurz helfen? :)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("J6:OJ57")) Is Nothing Then
Dim cell As Range
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
Range("B6:B57").ClearContents
Range("J4:OJ4").ClearContents
For Each cell In selection
With cell
Range(cell(.Row, 2), Cells(.Row, 2)) = ">>"
Range(cell(4, .Column), Cells(4, .Column)) = "V"
End With
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End If
End Sub
4 Antworten
Warum überhaupt mit einer Selection arbeiten ? Wenn du weißt wo deine Daten stehen / hin müssen, dann ggf einen fixen Bereich im Selection Change Event beschreiben.
Habe ich gemacht, aber bei einer Mehrfach Selektion im Blatt funktioniert es dann nicht mehr.
Ich habe es nun so gelöst, dass ich mit Target den Anfang und das Ende der Auswahl markiere und nicht die ganze Selection. Trotzdem Danke für die Hilfe.
Ohne es getestet zu haben, würde ich einfach
If Not Intersect(Target, Range("J6:OJ57")) Is Nothing Then
ändern zu
If Intersect(Target, Range("J6:OJ57")) = Target Then
Dann muss allerdings die Selektion vollständig im Bereich liegen.
Oder du setzt nach deinem Befehl das Target auf die Schnittmenge. Ich empfehle in diesem Fall allerdings, eine neue Variable dafür einzuführen:
Dim rNewTarget As Range
...
If Not Intersect(Target, Range("J6:OJ57")) Is Nothing Then
Set rNewTarget = Intersect(Target, Range("J6:OJ57"))
...
Ansonsten schaue ich nochmal...
PS: Du solltest unbedingt nach deinen Application-Operationen "On Error Resume Next" einführen, damit sichergestellt wird, dass alles wieder aktiviert wird.
Funktioniert leider beides nicht. Der Code zerstört das Blatt und überschreibt sämtliche Zellen mit Zeichen wie bei meinen Fehlversuchen :)
P.s. On Error Resume folgt im Code noch..
Erstmal eine kurze Nachfrage.
Mich irritiert das "Cells".
Welchen Bereich willst Du da genau ändern?
Außerdem:
Du solltest eine Variable auf keinen Fall wie ein CodeWort benennen.
Also "cell" als Variablennamen ist verboten. Nimm lieber "Zelle" o.Ä.
P.S.:Vielleicht bringt ja:
With cell
If Not Intersect(cell, Range("J6:OJ57")) Is Nothing Then '
.........
etwas? Aber wie gesagt: Unbedingt "cell" ändern.
Leider ist mir immer noch nicht klar, was Du mit "cells" erreichen willst, bzw. welchen Bereich (in Worten) Du eigentlich beschreiben willst. Wie sieht Deine Blattschutzlösung aus?
Ok, das hab ich geändert. Deine Codeänderung funktioniert auch nicht. Ich kann das Problem durch einen Blattschutz lösen. Aber beim bearbeiten ohne Schutz besteht dann wieder das Problem wenn man eine Zeile oder Spalte markiert.