ich m�chte beim verlassen bestimmer Zellen, hier Spalte A und E ein
Makro ausf�hren bzw. zwei verschiedene, je Spalte:
Verlassen von $A$X Makro1
Verlassen von $E$X Makro2
Worksheet_SelectionChange(ByVal Target As Range) wird ja auch beim
aktivieren einer Zelle ausgef�hrt, da h�nge ich fest.
--
MfG
> ich m锟絚hte beim verlassen bestimmer Zellen, hier Spalte A und E ein
> Makro ausf锟絟ren bzw. zwei verschiedene, je Spalte:
...
> Worksheet_SelectionChange(ByVal Target As Range) wird ja auch beim
> aktivieren einer Zelle ausgef锟絟rt, da h锟絥ge ich fest.
Du musst Dir nur am Ende von SelectionChange merken welches Target da
锟絙ergeben wurde, sprich die letzte Zelle war (LastCell). Und beim
锟絝fnen der Mappe merkst Du Dir ActiveCell in LastCell.
Andreas.
Private LastCell As Range
Private Sub Workbook_Open()
Set LastCell = ActiveCell
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Range)
'Tabelle gew锟絟lt?
If TypeOf Sh Is Worksheet Then
'Ist es die gew锟絥schte?
If Sh.Name <> "Tabelle1" Then Exit Sub
'Safety first!
If Not LastCell Is Nothing Then
'Welche Spalte?
Select Case LastCell.Column
Case 1, 5
'Spalte A oder E verlassen
MsgBox LastCell.Address
End Select
End If
'Mach irgendwas
Set LastCell = Target
End If
End Sub
""Helmut G�tschow"" schrieb:
verwende das Change-Ereignis, hier ein Beispiel:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Dim rngCell As Range
Set rngBereich = Range("A:A,E:E")
' Verlasse Prozedur, wenn Bereich nicht �bereinstimmt
If Intersect(Target, rngBereich) Is Nothing Then Exit Sub
' Alle ge�nderten Zellen durchlaufen
For Each rngCell In Target.Cells
MsgBox rngCell.Address
Next rngCell
End Sub
Mit freundlichen Gr�ssen
Melanie Breden
--
- Microsoft MVP f�r Excel -
www.melanie-breden.de
Ribbon-Programmierung f�r Office 2007 http://tinyurl.com/59awla
Hallo Andreas!
> Du musst Dir nur am Ende von SelectionChange merken welches Target
> da �bergeben wurde, sprich die letzte Zelle war (LastCell). Und
> beim �ffnen der Mappe merkst Du Dir ActiveCell in LastCell.
Besten Dank, das war der entscheidene Hinweis.
--
MfG
Hallo Melanie!
> verwende das Change-Ereignis, hier ein Beispiel:
Besten Dank, funktioniert. Es gef�llt mir sogar besser, weil Makros
nur bei einer �nderung der festgelegten Zelle ausgef�hrt werden und
das wollte ich eigentlich.
Noch eine Frage zur Schleife:
For Each rngCell In Target.Cells
MsgBox rngCell.Address
Next rngCell
Die kann ich doch sparen, oder? Ich habe es jetzt so f�r mich
abge�ndert:
If Intersect(Target, rngBereich) Is Nothing Then Exit Sub
If Target.Column = 1 Then
Makro_1
ElseIf Target.Column = 5 Then
Makro_2
Endif
Und es funktioniert wie ich wollte, ist das ok. Oder habe ich etwas
�bersehen.
--
MfG
""Helmut G�tschow"" schrieb:
> Noch eine Frage zur Schleife:
>
> For Each rngCell In Target.Cells
> MsgBox rngCell.Address
> Next rngCell
>
> Die kann ich doch sparen, oder? Ich habe es jetzt so f�r mich
> abge�ndert:
>
> If Intersect(Target, rngBereich) Is Nothing Then Exit Sub
> If Target.Column = 1 Then
> Makro_1
> ElseIf Target.Column = 5 Then
> Makro_2
> Endif
mit der Pr�fung auf Target.Column wird nur die erste Zelle im ge�nderten Bereich angesprochen.
Die restlichen Zellen k�nnen auch au�erhalb der gepr�ften Spalte sein.
Target referenziert auf den gesamten ge�nderten Bereich.
Wenn dieser aus mehreren Zellen besteht, kann eine �nderung von Target
zu Fehlern f�hren.
Man kann die Prozedur auch noch verbessern, indem man bei �nderung mehrerer
Zellen einen Verweis auf die Zellen setzt, die im tats�chlichen Bereich liegen:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Dim rngCell As Range
Set rngBereich = Range("A:A,E:E")
If Intersect(Target, rngBereich) Is Nothing Then Exit Sub
Set rngBereich = Intersect(Target, rngBereich)
' Alle ge�nderten Zellen durchlaufen
For Each rngCell In Target.Cells
Select Case rngCell.Column
Case 1
Application.EnableEvents = False
rngCell.Value = 4
Application.EnableEvents = True
Case 5
Application.EnableEvents = False
rngCell.Value = 6
Application.EnableEvents = True
End Select
Next rngCell
End Sub
�ndern zum testen mal einige Werte mit VBA:
Range("A1:E1").Value = 1
und lass deine und meine Prozedur jeweils dr�berlaufen.
' Deine Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Set rngBereich = Range("A:A,E:E")
If Target.Column = 1 Then
Application.EnableEvents = False
Target.Value = 4
Application.EnableEvents = True
ElseIf Target.Column = 5 Then
Application.EnableEvents = False
Target.Value = 6
Application.EnableEvents = True
End If
End Sub
Mit deiner Routine werden alle Zellen ge�ndert, mit meiner nur die im
gew�nschten Bereich und auch je nach Spalte.
Hallo Melanie!
> mit der Pr�fung auf Target.Column wird nur die erste Zelle im
> ge�nderten Bereich angesprochen. Die restlichen Zellen k�nnen auch
> au�erhalb der gepr�ften Spalte sein.
Danke f�r die ausf�hrliche Erkl�rung. Ich sehe aber, nach oben hin ist
alles offen;-)
--
MfG