Hej alla. Den här funktionen returnerar det val som användaren har gjort för aktivt kalkylblads autofilter, kolumn nr vlColumn: Jag tror att detta kommer att fungera perfekt. Hej, Worksheet_Calculate fungerade inte. Har du gjort som Åsa föreslog?? Hej! Jodå, koden körs. Titta på koden som Åsa skrev Ok, börjar förstå nu, dock ett problem. ----Jag provade att påverka autofiltret och inget händer. Det vet jag inte, det jag kom på häromdagen var att jag inte hade tagit bort felhanteringen och att jag därför inte såg att koden inte exekverades, när jag tog bort den så förstod jag varför ingenting hände, är det samma för dig också ?? Äntligen, nu har jag löst problemet ;-)Vilket criterea i autofilter
Jag vill via macro/VBA läsa av vilket val en användare gjort på ett autofilter.
Vi använder 1,2 eller 3 och jag vill byta text i en cell beroende på vilket val som gjorts.
Har sökt info om detta men inte hittat någonstans.
Mvh
MattiasSv: Vilket criterea i autofilter
<code>
Function GetAutoFilterCriteria(ByVal vlColumn As Long) As String
Dim wsh As Worksheet
Dim flt As Filter
On Error GoTo GetAutoFilterCriteria_Err
Set wsh = ActiveSheet
If wsh.AutoFilterMode = True Then
Set flt = wsh.AutoFilter.Filters(vlColumn)
If flt.On = True Then
Select Case flt.Operator
Case xlAnd
GetAutoFilterCriteria = flt.Criteria1 & " OCH " & flt.Criteria2
Case xlOr
GetAutoFilterCriteria = flt.Criteria1 & " ELLER " & flt.Criteria2
Case Else
GetAutoFilterCriteria = flt.Criteria1
End Select
End If
End If
Set flt = Nothing
Set wsh = Nothing
GetAutoFilterCriteria_Err:
End Function
</code>
Om aktivt blad inte är ett kalkylblad eller om vlColumn är högre än antal kolumner så returneras en tom sträng. Det samma gäller om autofilter inte är påslaget eller om användaren har valt att visa alla.Sv:Vilket criterea i autofilter
Frågan nu är bara hur jag kallar upp detta.
Var ska jag lägga koden och hur får jag upp resultatet.
Provade med
<codevb>msgbox getAutoFilterCriteria</code>
i selection change med får bara felmeddelande.
//MattiasSv: Vilket criterea i autofilter
om du lägger in någon formel som påverkas när du ändrar autofiltret så kan du använda händelsen Worksheet_Calculate.
Här är ett exempel där en messagebox visar vilket filter som används i B-kolumnen:
<code>
Private Sub Worksheet_Calculate()
Dim sFilter As String
sFilter = GetAutoFilterCriteria(2)
If sFilter <> "" Then MsgBox sFilter Else MsgBox "Inget filter"
End Sub
</code>Sv:Vilket criterea i autofilter
Jag provade att påverka autofiltret och inget händer.
Skriver jag däremot "=1+1" i en cell så anropas koden.
Finns det någon annan bra "worksheet_" att använda, typ någon redraw eller dyligt.
//Mattias
Edit: Worksheet_change fungerade inte heller.Sv: Vilket criterea i autofilter
Jag testade att lägga in formeln
DELSUMMA(109;A:A) i en cell och det
funkar.
Det finns kanske andra som fungerar lika braSv: Vilket criterea i autofilter
Nu vet jag inte hur din kod ser ut, men testa detta:
<code>
public function MyAutoFilterCriteria()
application.volatile = true
'här kallar du på koden som kollar efter vilka autofilterkriteria som används
end function
</code>
I en cell någonstans på bladet skriver du:
=MyAutoFilterCriteria()
Detta "borde" köra din kod varje gång något på bladet ändras (vet inte om det fungerar med autofilter-ändringar, har ingen möjlighet att testa.)
Det kan vara att en funktion som används i en cell måste returnera något, isåfall får du lägga till det.
Lycka till!Sv: Vilket criterea i autofilter
Så länge jag bara lägger in en msgbox är allting lungt, men försöker jag lägga på kod för att läsa autofitret skiter den även i msgboxen. EX:
Msgbox "Hej" Fungerar men....
Msgbox "Hej" & filter.criteria1 då struntar koden i hela msgbox ?????????
//MattiasSv:Vilket criterea i autofilter
<code>
sFilter = GetAutoFilterCriteria(2)
If sFilter <> "" Then MsgBox sFilter Else MsgBox "Inget filter"
</code>
I variabeln sFilter lagras det funktionen returnerar
Om variabeln innehåller något skrivs det ut.
Om du istället vill skriva till cell A1 skriver du
<code>
sFilter = GetAutoFilterCriteria(2)
If sFilter = "" Then sFilter = "Inget filter"
Cells(1, 1) = sFilter
</code>Sv: Vilket criterea i autofilter
Set flt = wsh.AutoFilter.Filters(vlColumn) får fel...
Run time error 9
subscript out of range
Mer hjälp och tack alla så långt
//MattiasSv:Vilket criterea i autofilter
----Skriver jag däremot "=1+1" i en cell så anropas koden.
Du skrev tidigare att koden anropades när du
skrev =1+1 i en cell
Fick du felmeddelandet då också
Om inte: Vad har du förändrat i koden efter det
tillfället
Jag har inte lyckats återskapa ditt fel
För mig fungerar det fint
Du kanske skall visa oss hela din kod
så att det lättare går att hjälpa digSv: Vilket criterea i autofilter
Jag har ingen övrig kod, utan bara ett excel ark med uppgifter.
Jag har bara plankat koden åsa skrev och lagt in =getautofiltercriteria() i en cell i dokumentet.
Mitt autofilter ligger bara i 1 kolumn, N4 för att vara exakt. I den kolumnen har jag bara siffrorna 0-3 (och tomma celler förstås). Vad jag vill åstakomma är en rubrik som ändras textmässigt när jag filtrerar på någon av siffrorna. Detta för att siffra 0 motsvara påbörjade uppdrag, 1 motsvarar vilande uppdrag osv.
Vi skriver sedan ut detta papper och hänger upp på väggen och då tycker jag att det skulle vara schysst med en rubrik som talar om vilken kategori som avses.
//MattiasSv:Vilket criterea i autofilter
Private Sub Worksheet_Calculate()
Dim AutoFilter2 As String
With Worksheets("Blad1")
If .AutoFilterMode Then
With .AutoFilter.Filters(1)
If .On Then c1 = .Criteria1
End With
End If
If c1 = "=0" Then
AutoFilter2 = "Pågående uppdrag"
End If
If c1 = "=1" Then
AutoFilter2 = "Köande uppdrag"
End If
If c1 = "=2" Then
AutoFilter2 = "Vilande uppdrag"
End If
If c1 = "=3" Then
AutoFilter2 = "Avslutade uppdrag"
End If
.Range("I3") = AutoFilter2
End With
End Sub
Tack för all hjälp !!
//Mattias