Microsoft Excel

Herbers Excel/VBA-Archiv

Worksheet_Change(ByVal target As Range)


Betrifft: Worksheet_Change(ByVal target As Range) von: Fabian
Geschrieben am: 19.08.2016 17:44:27

Hallo Zusammen,

kurz vorm Wochenende werde ich hier wahnsinnig!
Ich bin kein VBA-Profi /ehr Rookie - ABER ich geb mir mühe :D

ALso mein Problem:

Ich möchte Code ausführen wenn sich der Zelleninhalt einer Zelle ändert. Ich weiß dazu gibt es eine Menge Lösungsansätze.

ABER leider wird das Makro nur ausgeführt wenn ich in die Zelle klicke und mit der Entertaste bestätige.

Das Makro wird nicht ausgeführt wenn sich die Zelle ausschließlich durch die Formel ändert.

Ich weiss es gibt eine möglichkeit mit einer If Abfrage, also

If Range (XY) = "BLA" then ..... aber das ist aufgrund der Problemstellung nicht möglich.

Hier mal der Code (denke aber das wird nciht wirklcih weiter helfen):

Private Sub Worksheet_Change(ByVal target As Range)

    Set target = Application.Intersect(target, Sheets("START").Range("G9").Value)

Sheets("Kalender").Select

 Range("L2").Select
    Selection.Copy
ActiveSheet.Range("$A$2:$G$263").AutoFilter Field:=3, Criteria1:=Range("L2").Value

End Sub

Ich danke euch für tipps, anregungen und verabschiede mich ins Wochenende.

Bis dahin

Beste Grüße

  

Betrifft: AW: Worksheet_Change(ByVal target As Range) von: Hajo_Zi
Geschrieben am: 19.08.2016 17:47:57

bei Formel muss man das Ereignis
Private Sub Worksheet_Calculate()
benutzen was aufwendig ist.
Auf meiner Seite Bilder gibt es Beispiele dazu.

GrußformelHomepage


  

Betrifft: AW: Worksheet_Change(ByVal target As Range) von: fcs
Geschrieben am: 19.08.2016 19:39:14

Hallo Fabian,

mit dem Calculate-Ereignis könnte man es auf folgende Weise lösen. Dabei wird der Autofilter über Werte in berechneten Formeln gesetzt. In meinem Beispiel kann für 2 Spalten der Filter gesetzt werden.

'Code / Makro unter dem Tabellenblatt mit den Zellen in dennen die Filter-Werte berechnet  _
werden.
Option Explicit

Private varWert(1 To 2)
Private Sub Worksheet_Calculate()
    Dim ZelleFormel(1 To 2) As Range
    Dim intI As Integer
    Dim wksFilter As Worksheet
    Set ZelleFormel(1) = Me.Range("L2")
    Set ZelleFormel(2) = Me.Range("L4")
    Application.EnableEvents = False
    Set wksFilter = Sheets("Kalender")
    For intI = LBound(varWert) To UBound(varWert)
        If ZelleFormel(intI).Value <> varWert(intI) Then
            varWert(intI) = ZelleFormel(intI).Value
            Select Case intI
            Case 1 'Zelle L2
                With wksFilter
                    .Select
'                    .ShowAllData
                    If varWert(intI) = "(alle)" Then
                        .Range("$A$2:$G$263").AutoFilter Field:=3
                    Else
                        .Range("$A$2:$G$263").AutoFilter Field:=3, Criteria1:=varWert(intI)
                    End If
                End With
            Case 2 'Zelle L4
                With wksFilter
                    .Select
                    If varWert(intI) = "(alle)" Then
                        .Range("$A$2:$G$263").AutoFilter Field:=2
                    Else
                        .Range("$A$2:$G$263").AutoFilter Field:=2, Criteria1:=varWert(intI)
                    End If
                End With
            End Select
        End If
    Next
    Application.EnableEvents = True
End Sub




  

Betrifft: AW: Worksheet_Change(ByVal target As Range) von: Fabian
Geschrieben am: 22.08.2016 10:04:39

Guten Morgen,

vielen dank für die schnellen und hilfreichen Antworten.

Der von fcs erstellte Code funktioniert super.

Ich wünsche eine schöne Woche!