ich brauche etwas Hilfe bei einer VBA-Programmierung fürs Sortieren per Userform. Mein momentaner Code sieht wie folgt aus: (Der Code ist noch nicht optimiert, versuche ihn erst zum laufen zu bringen)
Private Sub cmdSortierungAnwenden_Click()
Dim i, lngSpalte1, lngSpalte2, lngSpalte3, lngSpalte4, lngSpalte5, lngLetzteZeile, _
lngLetzteSpalte, AnzahlKriterien As Long
Dim strSortierkriterien As String
Dim strSortierArt1, strSortierArt2, strSortierArt3, strSortierArt4, strSortierArt5 As _
XlSortOrder
AnzahlKriterien = 0
Call SortierenZurücksetzen
With Sheets("Trafo")
lngLetzteZeile = .Cells(1048576, 1).End(xlUp).Row
lngLetzteSpalte = .Cells(1, 16384).End(xlToLeft).Column
.AutoFilter.sort.SortFields.Clear
End With
'Anzahl Kriterien ermitteln und XlSortOrder festlegen
With Befehle_Sortierung
If .cboSortierSpalte1 vbNullString And .cboSortierArt1 vbNullString Then
AnzahlKriterien = 1
lngSpalte1 = Sheets("Trafo").Range("1:1").Find(What:=.cboSortierSpalte1).Column
If .cboSortierArt1 = "aufsteigend" Then strSortierArt1 = "xlAscending" Else _
strSortierArt1 = "xlDescending"
Else
If .cboSortierSpalte1 vbNullString Xor .cboSortierArt1 vbNullString Then GoTo _
Fehlermeldung
End If
If AnzahlKriterien = 1 And Not .cboSortierSpalte2 = vbNullString And Not . _
cboSortierArt2 = vbNullString Then
AnzahlKriterien = 2
lngSpalte2 = Sheets("Trafo").Range("1:1").Find(What:=.cboSortierSpalte2).Column
If .cboSortierArt2 = "aufsteigend" Then strSortierArt2 = "xlAscending" Else _
strSortierArt2 = "xlDescending"
Else
If .cboSortierSpalte2 vbNullString Xor .cboSortierArt2 vbNullString Then GoTo _
Fehlermeldung
End If
If AnzahlKriterien = 2 And .cboSortierSpalte3 vbNullString And .cboSortierArt3 _
vbNullString Then
AnzahlKriterien = 3
lngSpalte3 = Sheets("Trafo").Range("1:1").Find(What:=.cboSortierSpalte3).Column
If .cboSortierArt3 = "aufsteigend" Then strSortierArt3 = "xlAscending" Else _
strSortierArt3 = "xlDescending"
Else
If .cboSortierSpalte3 vbNullString Xor .cboSortierArt3 vbNullString Then GoTo _
Fehlermeldung
End If
If AnzahlKriterien = 3 And .cboSortierSpalte4 vbNullString And .cboSortierArt4 _
vbNullString Then
AnzahlKriterien = 4
lngSpalte4 = Sheets("Trafo").Range("1:1").Find(What:=.cboSortierSpalte4).Column
If .cboSortierArt4 = "aufsteigend" Then strSortierArt4 = "xlAscending" Else _
strSortierArt4 = "xlDescending"
Else
If .cboSortierSpalte4 vbNullString Xor .cboSortierArt4 vbNullString Then GoTo _
Fehlermeldung
End If
If AnzahlKriterien = 4 And .cboSortierSpalte5 vbNullString And .cboSortierArt5 _
vbNullString Then
AnzahlKriterien = 5
lngSpalte5 = Sheets("Trafo").Range("1:1").Find(What:=.cboSortierSpalte5).Column
If .cboSortierArt5 = "aufsteigend" Then strSortierArt5 = "xlAscending" Else _
strSortierArt5 = "xlDescending"
Else
If .cboSortierSpalte5 vbNullString Xor .cboSortierArt5 vbNullString Then GoTo _
Fehlermeldung
End If
End With
'Sortierfall aussuchen
Select Case AnzahlKriterien
Case 1:
Sheets("Trafo").Range(Cells(1, 1), Cells(lngLetzteZeile, lngLetzteSpalte)).sort _
Key1:=Sheets("Trafo").Columns(lngSpalte1), Order1:=strSortierArt1, _
Header:=xlYes
Case 2:
Sheets("Trafo").Range(Cells(1, 1), Cells(lngLetzteZeile, lngLetzteSpalte)).sort _
Key1:=Sheets("Trafo").Columns(lngSpalte1), Order1:=strSortierArt1, _
Key2:=Sheets("Trafo").Columns(lngSpalte1), Order2:=strSortierArt2, _
Header:=xlYes
Case 3:
Sheets("Trafo").Range(Cells(1, 1), Cells(lngLetzteZeile, lngLetzteSpalte)).sort _
Key1:=Sheets("Trafo").Columns(lngSpalte1), Order1:=strSortierArt1, _
Key2:=Sheets("Trafo").Columns(lngSpalte1), Order2:=strSortierArt2, _
Key3:=Sheets("Trafo").Columns(lngSpalte1), Order3:=strSortierArt3, _
Header:=xlYes
Case 4:
Sheets("Trafo").Range(Cells(1, 1), Cells(lngLetzteZeile, lngLetzteSpalte)).sort _
Key1:=Sheets("Trafo").Columns(lngSpalte1), Order1:=strSortierArt1, _
Key2:=Sheets("Trafo").Columns(lngSpalte1), Order2:=strSortierArt2, _
Key3:=Sheets("Trafo").Columns(lngSpalte1), Order3:=strSortierArt3, _
Key4:=Sheets("Trafo").Columns(lngSpalte1), Order4:=strSortierArt4, _
Header:=xlYes
Case 5:
Sheets("Trafo").Range(Cells(1, 1), Cells(lngLetzteZeile, lngLetzteSpalte)).sort _
Key1:=Sheets("Trafo").Columns(lngSpalte1), Order1:=strSortierArt1, _
Key2:=Sheets("Trafo").Columns(lngSpalte1), Order2:=strSortierArt2, _
Key3:=Sheets("Trafo").Columns(lngSpalte1), Order3:=strSortierArt3, _
Key4:=Sheets("Trafo").Columns(lngSpalte1), Order4:=strSortierArt4, _
Key5:=Sheets("Trafo").Columns(lngSpalte1), Order5:=strSortierArt5, _
Header:=xlYes
End Select
'Sortierung ausführen
With Sheets("Trafo").AutoFilter.sort
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Trafo.txtSortierkriterien = strSortierkriterien
Call EingabenEntfernen
Call EingabefelderDeaktivieren
Befehle_Sortierung.Hide
Exit Sub
Fehlermeldung:
MsgBox "Sie haben nicht alle nötigen Eingaben für eine Sortierung eingegeben." & Chr(13) & _
Chr(13) & "Bitte vervollständigen Sie ihre Eingaben.", , "BSC-Programm"
End Sub
Nun habe ich in der Userform ein Suchkriterium ausgesucht und habe xlDescending als XlSortOrder festgelegt, dann gibt mir Excel eine Fehlermeldeung in der fett markierten Zeile aus: "Die Sort-Methode des Range-Objektes konnte nicht ausgeführt werden."
Da ich die strSortierArt1-5 oben als XlSortOrder deklariert habe, verstehe ich nicht warum der Fehler kommt. Wäre schön wenn mir jemand helfen könnte.
Grüße
Jens