18. september 2004 - 15:34Der er
23 kommentarer og 1 løsning
Autofilter aktivt - men for hvilken kolonne ?
Jeg forsøger at finde en løsning i et ark ved at prøve mig frem med diverse filtre. Så kom jeg i tanke om hvor irriteret jeg altid har været ved ikke at kunne se i hvilke kolonner jeg har ændret filter.
Jeg ku godt bruge en metode til fx. at farve cellen (dropdown) gul når filteret var forskelligt fra 'Alle'.
Hvordan fanger man en ændring i valg af filter? Jeg kan umiddelbart kun få en reaktion når jeg specifikt ændrer i en celleværdi.
Måske er det svært at få til at fungere sikkert. Gerne kommentarer hvis nogen har erfaring med det. Jeg har ikke kunnet finde en indbygget løsning, men måske den er der?
Indsæt nedenstående ved højreklik på fanebladet og vælg Vis programkode. Den øverste celle i den valgte kolonne får farven gul.
Private Sub Worksheet_Calculate() Dim flt As Filter Dim intCol As Integer For Each flt In ActiveSheet.AutoFilter.Filters intCol = intCol + 1 If flt.On Then Cells(1, intCol).Interior.ColorIndex = 6 Else Cells(1, intCol).Interior.ColorIndex = xlColorIndexNone End If Next flt End Sub
Det fungerer fint her. Det virker IKKE, hvis det bliver sat ind i et generelt modul. Det skal indsættes som jeg beskrev (ellers virker det ikke her, men du kan selvfølgelig prøve dig frem).
Altså - det ark jeg har siddet og arbejdet med stammer fra Xml. Det må tilsyneladende blive betragtet anderledes mht Calculate for jeg har lige prøvet med en simpel opstilling i andet ark, og det virker sør'me.
Det er bare alletiders. Tak for hjælpen sjap!
Hvis du ved hvorfor xml behandles anderledes, så må du gerne beskrive det. Måske der er andre ting man bør være opmærksom på.
Det gør der sikkert, men dette er en undtagelse, så jeg venter og ser om der dukker noget op inden jeg (måske) får brug for det. Det vigtigste er at vide det tilsyneladende er anderledes!
Forøvrigt, når man skal aktivere Ws_Calculate skal det jo ske i selve arket. Ved du om man kan få det til at virke fra en menu (person.xls) hvis man (kan) skrive koden ind på arket fra en anden makro?
Ja - men _Calculate driller fortsat. Det ser ud til, at en SUM() SKAL have fat i en af de kolonner jeg skal arbejde med. Placerer jeg den længere væk, aktiveres _Calculate ikke. Ved du noget om hvordan _Calculate arbejder?
Jeg kan smide koden ind i et aktivt ark med denne sub. Så skal jeg ha prøvet med en Menu senere.
Sub AddWorkbookEventProc() Dim StartLine As Long
With ActiveWorkbook.VBProject.VBComponents("Ark1").CodeModule StartLine = .CreateEventProc("Calculate", "Worksheet") + 1
.InsertLines StartLine, _ "Dim flt As Filter" & vbCrLf & _ "Dim intCol As Integer" & vbCrLf & _ " For Each flt In ActiveSheet.AutoFilter.Filters" & vbCrLf & _ " intCol = intCol + 1" & vbCrLf & _ " If flt.On Then" & vbCrLf & _ " Cells(1, intCol).Interior.ColorIndex = 6" & vbCrLf & _ " Else" & vbCrLf & _ " Cells(1, intCol).Interior.ColorIndex = xlColorIndexNone" & vbCrLf & _ " End If" & vbCrLf & _ " Next flt" End With
Jeg vil gerne undgå at ha en SUM() til at ligge og rode i de tal der skal arbejdes med, og ku jeg helt undgå den ville det være fint. Hvis det fungerer uden SUM() eller tilsvarende hos dig, ku det tyde på at jeg kan ændre en indstilling somewhere!
Det forstår jeg ikke. Så vidt jeg ved, så sker hændelsen Calculate når en celle på arket (gen)beregnes (hvor hændelse Change sker når værdien i en celle ændres - dog IKKE hvis det er som resultat af en beregning).
Jeg kan få det til at virke, ved at skrive =B2 lang ude til højre i regnearket. B2 kan være en vilkårlig celle af dem, der indgår i filtreringen. Hvis cellen ikke indgår i filtreringen, skal cellen ikke beregnes, og så sker hændelsen Calculate ikke.
Det vigtigste er at det virker. Men det er selvfølgelig lidt irriterende, at man ikke kan klare sig uden hjælpemidler - men sådan er det altså en gang imellem i Excel :0)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.