Clever-Excel-Forum

Normale Version: Worksheet_Change(ByVal Target as Range)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe ein kleines Problem.
Ich möchte Worksheet_Change(ByVal Target as Range) verwenden, um einen Filter zu setzen. Im Target steht wonach gefiltert werden soll. 
Target möchte ich als Range an eine Funktion weitergeben, die das erledigt. Allerdings funktioniert das nicht. Target wird nicht als Range Variable erkannt. 
Mein Funktion heißt: 
Function filternPivot(ByVal var as Range) 

Wenn ich es durch 
PivotModul.filternPivot (Worksheets("Pivotmappe").Range("A2"))
Aufrufe funktioniert alles einwandfrei. Wenn ich 
PivotModul.filternPivot (Target)
Mache funktioniert es nicht.

Target muss nicht A2 sein, sondern kann auch B2 etc sein. Deshalb will ich das über Target machen.

Kann mir jmd. helfen?
Moin!
Wie sieht das zugehörige Worksheet_Change(ByVal Target as Range) denn aus?
Schließlich kann man sich nicht so einfach Ereignismakros basteln!
Die Variable Target in diesen ist fest vorgegeben, denn es handelt sich um ein Schlüsselwort (ähnlich wie Me, ThisWorkbook u.ä.).
Du solltest genauer erläutern, gern i.V.m. einer Datei.

Gruß Ralf
Hallo Ralf,

es beinhaltet nur den Funktionsaufruf, also:

'Im Worksheet Pivotmappe
Private Sub Worksheet_Change(ByVal Target As Range)
     PivotModul.filternPivot (Target) 'funktioniert nicht, wenn ich auf Debug gehe wird diese Zeile bemängelt
     PivotModul.filternPivot (Worksheets("Pivotmappe").Range("A2")) 'funktioniert
End Sub

Die Funktion:

'im Modul PivotModul
Function filternPivot(ByRef var As Range)
    Dim i As Integer
    Dim feldbezeichnung As String
    feldbezeichnung = PivotModul.feldwahl (var)

    Worksheets("Pivotmappe").Chart.Objects("PivotDiagramm").Activate
    With ActiveChart.PivotLayout.PivotTable.PivotFields(feldbezeichnung)
       For i To .PivotItems.Count
         If (.PivotItems(i).Value = var.Value) Then
            .PivotItems(.PivotItems(i).Value).Visible = True
         Else
            .PivotItems(.PivotItems(i).Value).Visible = False
         End If
      Next i
   End With
End Function
Hallöchen,

ein Filter erwartet zum Filtern keinen Bereich, sondern einen Wert. Hast Du mal PivotModul.filternPivot (Target.Value) versucht? Target sollte bei der Codierung auch nur eine Zelle umfassen.

Alternativ könntest Du auch den Wert vor dem Filtern in eine Variable packen und diese dann verwenden.
Hallo,

ich habe jetzt die zweite Variante verwendet, so funktioniert es.
Ich verstehe trtozdem nicht, warum es vorher eine Fehlermeldung gab.
Durch die Zeile:

Zitat:If (.PivotItems(i).Value = var.Value) Then

benutze ich ja einen Wert beim Filtern.

Ich habe die Funktion jetzt umgeschrieben

Zitat:Function filternPivot(ByRef var As String, ByRef feldbezeichnung As String)


Danke für eure Hilfe.