Hi Corina,
sry für gestern, hatte da leider keine Zeit den Code zu tippen (bin dort der Gast40018, also derjenige der dir auch bei deinen anderen Anliegen half).
Im Grunde war es so gemeint:
Option Explicit
Public Sub Test()
Dim ws As Excel.Worksheet
Dim rngAutoFilter As Excel.Range
Set ws = ...
Set rngAutoFilter = ws.Range("$A$5:$W$500")
Call ModifyFilter(rngAutoFilter, 3, "External")
Call ModifyFilter(rngAutoFilter, 3, "Internal")
Call ModifyFilter(rngAutoFilter, 5, "Financial")
Call ModifyFilter(rngAutoFilter, 5, "Infrastructure")
End Sub
Public Sub ModifyFilter(Range As Excel.Range, Optional Field, Optional Value)
Dim vnt As Variant
If IsMissing(Field) Or IsEmpty(Field) Or IsNull(Field) Then
' remove/disable autofilter
Call Range.AutoFilter
ElseIf IsMissing(Value) Or IsEmpty(Value) Or IsNull(Value) Then
' reset field filter
Call Range.AutoFilter(Field)
Else
' modify field filter
On Error Resume Next
With Range.Worksheet.AutoFilter.Filters(Field)
vnt = .Criteria1
If .Operator = xlOr Then vnt = Array(vnt, .Criteria2)
End With
On Error GoTo 0
If Not IsEmpty(vnt) Then
If IsArray(vnt) Then
ReDim Preserve vnt(LBound(vnt) To UBound(vnt) + 1)
vnt(UBound(vnt)) = Value
Else
vnt = Array(vnt, Value)
End If
Else
vnt = Array(Value)
End If
Call Range.AutoFilter(Field, vnt, xlFilterValues)
End If
End Sub
Die Datei hab ich inzwischen bei mir schon gelöscht. Hab nur noch so grob im Kopf wie es aussah. Das Organigramm (oder wie man es auch nennen möchte) besteht ja im wesentlichen aus drei Stängen. Diese waren auf einem extra Tabellenblatt hinterlegt. Entweder ermittelt man im im Quellcode anhand der Daten in diesem Tabellenblatt Zugehörigkeit des Shape (welches ist wem untergeordnet - da war ja dann die Geschichte mit den Verbindungen) oder du hinterlegst das fest im Code (wie in deinem Beispiel bereits verdeutlicht). Ich bin mir aber auch nicht 100% sicher ob das überhaupt notwendig ist.
Du musst aber definitiv dafür sorgen das du mit dem richtigen Shape hantierst.
Set shp = ActiveSheet.Shapes(Application.Caller)
'...
For Each shp In ActiveSheet.Shapes
'...
Das Shape shp in der ersten Zeile hat keinerlei Nutzen, da es mit der jedem Schleifendurchgang ein neues repräsentiert. Wenn ich mich recht entsinne hast du aber jeden dieser Shapes das Makro RoundedRectangle_Click zugeordnet, also geht es in dieser Prozedur immer nur geziehlt um ein einziges Shape (dem Application.Caller) - richtig? Das würde dann die Bedeutung des Select-Case etwas in Frage stellen. Ich kann auch das myText auch nicht einordnen... welche Bedeutung hat das, wo wird es festgelegt/geändert?
Gruß
|