Avatar billede zany Nybegynder
04. august 2011 - 11:32 Der er 7 kommentarer og
1 løsning

VBA Autofilter med 2 kriterier

Hej Eksperten

Jeg søger en VBA formel som i et autofilter søger om navnet optræder. Optræder navnet skal arket kun vise data i forhold til kriteriet, pga. senere kopiering. Optræder navnet ikke,  skal der ikke foretages noget " "" "" ?

jeg har forsøgt med følgende :

    Sheets("2011").Select

    ActiveSheet.ListObjects("Tabel1").Range.AutoFilter Field:=6, Criteria1:="=NAVN1"

    ActiveSheet.ListObjects("Tabel1").Range.AutoFilter Field:=6, Criteria1:="="

    Range("A5:R100000").Select
    Selection.Copy

Men her vælger excel at kopiere hele arket uanset søge kriterierne.

Hvordan kunne det være muligt at lave i Excel VBA?
Avatar billede supertekst Ekspert
04. august 2011 - 13:47 #1
Forslag:

Sub test1()
  Sheets("2011").Select

    ActiveSheet.ListObjects("Tabel1").Range.AutoFilter Field:=6, Criteria1:="=NAVN1"
   
    If antalSynligerækker > 0 Then
        Range("A5:R100000").Select
        Selection.Copy
    End If

End Sub
'Men her vælger excel at kopiere hele arket uanset søge kriterierne.
Private Function antalSynligerækker()
Dim rng As Range
On Error GoTo ingenrækker

    Set rng = ActiveSheet.AutoFilter.Range
    antalSynligerækker = rng.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
    Exit Function
   
ingenrækker:
    antalSynligerækker = 0
End Function
Avatar billede zany Nybegynder
04. august 2011 - 14:08 #2
Det er helt fint at excel kopiere det hele ind, uanset om der står noget eller ej.

jeg prøvede at indsætte din kode:
    Sheets("2011").Select
   
   
    ActiveSheet.ListObjects("Tabel1").Range.AutoFilter Field:=6, Criteria1:="=NAVN1"
 
    If antalSynligerækker > 0 Then
        Range("A5:R100000").Select
        Selection.Copy
        End If


Resultatet er at Excel kun gemmer "End If" som en tekststreng og det er det som bliver kopieret.

Hvad gør jeg forkert?
Avatar billede supertekst Ekspert
04. august 2011 - 14:26 #3
Er ovenstående hele koden? Er funktionen med?
Avatar billede supertekst Ekspert
04. august 2011 - 14:42 #4
Der manglede lidt i min kode - derfor:

Rem VERSION 2
Rem Korriger venligste Autofilter-indstillingerne  'NB:

Sub test1()
  Sheets("2011").Select

    ActiveSheet.ListObjects("Tabel1").Range.AutoFilter Field:=1, Criteria1:="=aa"  'NB
   
    If antalSynligerækker > 0 Then
        Range("A5:R100000").Select
        Selection.Copy
    End If
End Sub
Private Function antalSynligerækker()
Dim rng As Range
On Error GoTo ingenrækker

    Set rng = ActiveSheet.ListObjects("Tabel1").AutoFilter.Range
    antalSynligerækker = rng.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
    Exit Function
   
ingenrækker:
    antalSynligerækker = 0
End Function
Avatar billede zany Nybegynder
04. august 2011 - 14:45 #5
funktionen?

Er funktionen denne del: 
Private Function antalSynligerækker()
Dim rng As Range
On Error GoTo ingenrækker

    Set rng = ActiveSheet.AutoFilter.Range
    antalSynligerækker = rng.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
    Exit Function
 
ingenrækker:
    antalSynligerækker = 0
End Function

Virker funktionen også når der er tale om flere forskellige ark afhængigt af "NAVN1", "NAVN2" osv.
Avatar billede supertekst Ekspert
04. august 2011 - 14:52 #6
Funktionen kontrollere hvormange synlige rækker der er når et autofilter sættes. Den returnerer antallet. Hvis 0 udføres kopieringen ikke.
Avatar billede zany Nybegynder
04. august 2011 - 15:40 #7
Tusinde tak.. Det virker nu. Jeg har valgt at bruge følgende total kode:

Sub test1()

'XXXXXX NAVN1 opdatering start XXXXXXX
    Sheets("NN1").Select
    Range("A5:R100000").Select
    Selection.ClearContents
    Range("A5").Select
' Sletter indhold i NN1 ark


  Sheets("2011").Select

    ActiveSheet.ListObjects("Tabel1").Range.AutoFilter Field:=6, Criteria1:="=NAVN1" 
 
    If antalSynligerækker > 0 Then
        Range("A5:R100000").Select
        Selection.Copy
       
            Sheets("NN1").Select
    Range("A5").Select
    ActiveSheet.Paste
    Range("A5").Select
' Den før kopierede data sættes ind i indkøberens ark
    End If
   
        Sheets("2011").Select
    ActiveSheet.ListObjects("Tabel1").Range.AutoFilter Field:=6
' Nulstiller sortering igen

    Range("A5").Select
' Makro er færdig - Placerer sig i A5 i det aktive ark - dvs. 2011 arket
'XXXXXX NAVN1 opdatering start XXXXXXX

'XXXXXX NAVN2 opdatering start XXXXXXX
    Sheets("NN2").Select
    Range("A5:R100000").Select
    Selection.ClearContents
    Range("A5").Select
' Sletter indhold i NN2 ark


  Sheets("2011").Select

    ActiveSheet.ListObjects("Tabel1").Range.AutoFilter Field:=6, Criteria1:="=NAVN2" 
 
    If antalSynligerækker > 0 Then
        Range("A5:R100000").Select
        Selection.Copy
       
            Sheets("NN2").Select
    Range("A5").Select
    ActiveSheet.Paste
    Range("A5").Select
' Den før kopierede data sættes ind i indkøberens ark
    End If
   
        Sheets("2011").Select
    ActiveSheet.ListObjects("Tabel1").Range.AutoFilter Field:=6
' Nulstiller sortering igen

    Range("A5").Select
' Makro er færdig - Placerer sig i A5 i det aktive ark - dvs. 2011 arket
'XXXXXX NAVN2 opdatering start XXXXXXX

'OSV. MED ANDRE NAVNE


Private Function antalSynligerækker()
Dim rng As Range
On Error GoTo ingenrækker

    Set rng = ActiveSheet.ListObjects("Tabel1").AutoFilter.Range
    antalSynligerækker = rng.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
    Exit Function
 
ingenrækker:
    antalSynligerækker = 0
End Function

---------------------------------------------------------

Er det ligegyldigt hvor funktionen er, eller skal den være i slutningen? kan den f.eks. komme først i arket?

skriv gerne dit svar om en "svar mulighed" så jeg kan give dig point for din løsning :)
Avatar billede supertekst Ekspert
04. august 2011 - 16:02 #8
Funktionen kan placeres efter ønske.
Du får et svar..
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester