Ich habe eine Excel-Tabelle, wo ich möchte, dass alle Zeilen (außer der Kopfzeile) in Sheet "CR" einen Wert enthalten (Formeln ausgenommen wenn möglich (Spalte A enthält Formeln))) werden zuerst nach Spalte B (name = TEAM), dann C (name = BUILDING) und schließlich D (name = DATE_MAJ) sortiert, bevor die Datei gespeichert wird.VBA Excel-Sortierung für mehrere Spalten
Ich bin ein absoluter Noob mit VBA, also probiere ich Sachen aus, die ich links und rechts auf den Foren finde und modifiziere sie nach meinen Bedürfnissen. Von der Suche um, habe ich versucht, diesen Code in dem Excel-VBA-Objekt ‚Arbeitsmappe‘, aber es gibt einen Fehler:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Setup column names
Col1name = "SECTION"
Col2name = "BATIMENT"
Col3name = "DATE_MAJ"
'Find cols
For Each cell In Range("A1:" & Range("A1").End(xlToRight).Address)
If cell.Value = Col1name Then
Col1 = cell.Column
End If
If cell.Value = Col2name Then
Col2 = cell.Column
End If
If cell.Value = Col3name Then
Col3 = cell.Column
End If
Next
'Below two line:- if they are blank e.g. column not found it will error so a small bit of error handling
If Col1 = "" Then Exit Sub
If Col2 = "" Then Exit Sub
If Col3 = "" Then Exit Sub
'Find last row - dynamic part
lastrow = ActiveSheet.Range("A100000").End(xlUp).Row
'Convert col numer to name
Col1 = Split(Cells(1, Col1).Address(True, False), "$")
Col2 = Split(Cells(1, Col2).Address(True, False), "$")
Col3 = Split(Cells(1, Col3).Address(True, False), "$")
'Sort
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Range(Col1(0) & "2:" & Col1(0) & lastrow) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range(Col2(0) & "2:" & Col2(0) & lastrow) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range(Col3(0) & "2:" & Col3(0) & lastrow) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A1:K" & lastrow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
ich für jede Hilfe dankbar sein würde, den Code direkt zu bekommen. Unten ist ein Link zur Excel-Datei (ich habe den obigen Code herausgenommen, da er nicht funktioniert hat).
Welchen Fehler haben Sie? Welche Linie wirft es? Außerdem hat Ihr verlinktes Beispiel keinen Spaltenkopf, der weder nach "BATIMENT" noch nach "DATE_MAJ" benannt ist. – user3598756
Die Spaltennamen der Spalten C und D sind "BATIMENT" und "DATE_MAJ"; Ihre Header sind in der Tat "BUILDING" und "DATE UPDATE". Spielt das eine Rolle? – Antoon
Der Fehler, den ich bekomme, ist 'Kompilierfehler: Variable nicht definiert' und 'Col1name' ist im VBA-Code ausgewählt. – Antoon