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?
Annonceindlæg fra GlobalConnect
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
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?
04. august 2011 - 14:26
#3
Er ovenstående hele koden? Er funktionen med?
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
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.
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.
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 :)
04. august 2011 - 16:02
#8
Funktionen kan placeres efter ønske. Du får et svar..
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.