2016-10-11 3 views
1

Ich bin neu in VBA und versuche, selbst für einige Arbeitszwecke zu lernen. Ich habe versucht, ein Makro zu erstellen, das eine Spalte in meinem Arbeitsblatt findet und es dann nach einem bestimmten Wort filtert. Normalerweise finde ich Codes in Google und bearbeiten sie einfach, aber ich habe Probleme mit diesem ..VBA Excel - Spalte finden und filtern

Was konnte ich finden:

Sub sorting() 

Dim col As String, cfind As Range 

Worksheets(1).Activate 

col = "Type" 

Set cfind = Cells.Find(what:=col, lookat:=xlWhole) 

ActiveSheet.Cells.Sort key1:=cfind, Header:=xlYes 

End Sub 

Jetzt habe ich versucht, die „Art“ Teil zu Autofilter zu ändern. Aber es funktioniert überhaupt nicht.

.Range("A1:D1").AutoFilter Field:="col", Criteria1:="Virtual" 

Könnten Sie bitte helfen? danke! Coco

Antwort

1

in Autofilter Verfahren wird der Field Parameter ist „Die ganze Zahl des Feldes versetzt, auf dem der Filter basieren soll (von links in der Liste, die am weitesten links liegenden Feld Feld eins ist).“

bearbeitet den Code, nachdem einige Präzisierungen des OP zu verbessern:

Option Explicit

Sub autofiltering() 
    Dim col As String, cfind As Range 

    col = "Type" 
    With Worksheets("AF") '<-- reference your relevant worksheet (change "AF" to your actual worksheet name) 
     With .Range("A1", .Cells(1, .Columns.Count).End(xlToLeft)) '<-- reference its row 1 cells from column 1 rightwards to last not empty one 
      Set cfind = .Find(what:=col, LookIn:=xlValues, lookat:=xlWhole) '<-- look for the wanted column header 
      If Not cfind Is Nothing Then '<-- if the header has been found 
       .AutoFilter Field:=cfind.Column, Criteria1:="Virtual" '<-- filter all columns of the referenced row cells 

       ' do your things 
      End If 
     End With 
     .AutoFilterMode = False '<-- show all rows back and remove autofilter buttons 
    End With 
+0

dank einem Bündel! es hat funktioniert :) – Coco

+0

Sie sind willkommen. Wenn man außerdem annimmt, dass die Spaltenüberschriften in Zeile 1 sind, kann man den Aufruf 'Find()' in der ersten Zeile nur beschränken 'Setzen Sie cfind = .Rows (1) .Find (was: = col, LookIn: = xlValues, lookat: = xlWhole) ' – user3598756

+0

oh gute Idee! werde tun :) – Coco