Ich versuche, eine Filteroption über eine Vielzahl von Excel-Spalten zu programmieren. Ich habe versucht, dies über Inputboxes und If / Then-Sequenz wie unten zu tun, aber aus irgendeinem Grund läuft es bis zur endgültigen Else-Anweisung "existiert nicht". Es scheint, dass es meine Eingabe nicht erkennt.

  Sub MultipleColumnsFilter()

  Range("N:N,U:U").ClearContents

  Application.ScreenUpdating = False

  Dim myValue1 As String
  Dim myValue2 As String


  myValue1 = InputBox("Enter desired Column")
  myValue2 = InputBox("Enter Keyword in selected column")


If myValue1 = c Then

With Worksheets("pump").Range("C:C")
    .AutoFilter
     '** Use temporary column 1
    .AutoFilter Field:=1, Criteria1:=myValue2
End With
Application.ScreenUpdating = True

ElseIf myValue1 = d Then

 With Worksheets("pump").Range("D:D")
    .AutoFilter
     '** Use temporary column 1
    .AutoFilter Field:=1, Criteria1:=myValue2
End With
Application.ScreenUpdating = True

ElseIf myValue1 = E Then
 With Worksheets("pump").Range("E:E")
    .AutoFilter
     '** Use temporary column 1
    .AutoFilter Field:=1, Criteria1:=myValue2
End With
Application.ScreenUpdating = True


ElseIf myValue1 = I Then
 With Worksheets("pump").Range("I:I")
    .AutoFilter
     '** Use temporary column 1
    .AutoFilter Field:=1, Criteria1:=myValue2
End With
Application.ScreenUpdating = True

Else

MsgBox (" does not exist ")

End If

Natürlich wäre es noch besser, die If-else-Struktur loszulassen und eine Art Range-Funktion mit mehreren Spalten für den gewünschten Filterbereich durchzugehen, aber als ich es versuchte, funktionierte es auch nicht. Irgendwelche Hinweise ?

Bearbeiten: Außerdem möchte ich die Funktionalität erweitern und die gleiche Struktur zum Filtern von Elementen verwenden, abhängig von einigen Schlüsselwörtern (myValue2). Wie könnte das funktionieren? Ich habe den Filterteil wie folgt geändert

 .AutoFilter Field:=1, Criteria1:="<>myValue2"

Dies scheint jedoch nicht zu funktionieren, sondern läuft nur fehlerfrei durch das Skript, aber auch ohne Auswirkungen auf die Zellen. Irgendwelche Ideen ?

0
user36510 29 Dez. 2015 im 15:26

2 Antworten

Beste Antwort

Ich bin mir nicht sicher, ob dies das einzige Problem ist, aber

If myValue1 = c Then

C wird als nicht deklarierte Variable betrachtet, daher ist c = "", also bedeutet diese Zeile tatsächlich:

If myValue1 = "" Then

Dies gilt auch für alle Ihre elseif-Anweisungen.

Verwenden Sie einfach Anführungszeichen:

If myValue1 = "c" Then

Denken Sie daran, dass bei VBA beim Zeichenfolgenvergleich standardmäßig zwischen Groß- und Kleinschreibung unterschieden wird. Sie müssen also entweder hinzufügen:

Option Compare Text

Oben auf Ihrem Modul, über Ihrem ersten Sub, oder Sie können dieses Format verwenden:

If UCase(myValue1) = "C" Then
1
vacip 29 Dez. 2015 im 12:34

Hier ist eine universellere Lösung zum Filtern einer unbekannten Spalte nach einer unbekannten Textzeichenfolge.

Dim myValue1 As String, myValue2 As String, myColumn As Long

myValue1 = InputBox("Enter desired Column")
myValue2 = InputBox("Enter Keyword in selected column")

If IsNumeric(myValue1) Then
    myColumn = Range("R1C" & myValue1).Column
Else
    myColumn = Range(myValue1 & 1).Column
End If

With Worksheets("pump")
    If .AutoFilterMode Then .AutoFilterMode = False
    With .Columns(myColumn)
        .AutoFilter Field:=1, Criteria1:=myValue2
    End With
End With
Application.ScreenUpdating = True

Der Benutzer kann entweder den numerischen Spaltenindex oder die alphabetische Spaltenbezeichnung eingeben, und der Code bestimmt die richtige Spalte, nach der gefiltert werden soll.

1
user4039065user4039065 29 Dez. 2015 im 12:38