ich habe weiter untenstehenden Code schon einmal in das Forum gestellt, das damalige problemchen wurde mir gelöst, ganz tolles danke dafür....
Mit diesem Code werden die Spalten nach gewissen Kriterien sortiert (ABER >> leider noch nicht ganz richtig)
Ausgangsituation:
Aus einer Datenbank werden Daten ins Excel (über eine Vorlage) exportiert. Mittels Makro werden `mal unnötige Spalten (können bis zu 100 sein, je nachdem was der einzelne User in seiner DB eingestellt hat, das heißt die Spaltenreihenfolge ist von Export zu Export unterschiedlich) gelöscht. Danach soll folgender Code die Spalten "richtig" sortieren.
Sub richtigeReihenfolge()
Dim i As Integer
Dim y As Integer
Dim rng As Range
Application.ScreenUpdating = False
Sheets("Anschrift").Activate
Rows("3:6").Select
Selection.Clear
With Sheets("Anschrift")
Set rng = Rows("7:7")
rng.Select
y = Application.WorksheetFunction.CountA _
(Rows(ActiveCell.Row))
For i = y To 1 Step -1
Cells(7, i).Select
Select Case Cells(7, i).Value
Case "Vertrag Nr."
With Columns(i)
If Not Cells(7, 1).Value = "Vertrag Nr." Then
.Select
.Cut
Range("A:A").EntireColumn.Insert
End If
End With
Case "Spartengruppe"
With Columns(i)
If Not Cells(7, 2).Value = "Spartengruppe" Then
.Select
.Cut
Range("B:B").EntireColumn.Insert
End If
End With
Case "Sparte"
With Columns(i)
If Not Cells(7, 3).Value = "Sparte" Then
.Select
.Cut
Range("C:C").EntireColumn.Insert
End If
End With
Case "Risiko1"
With Columns(i)
If Not Cells(7, 4).Value = "Risiko1" Then
.Select
.Cut
Range("D:D").EntireColumn.Insert
End If
End With
Case "ZW"
With Columns(i)
If Not Cells(7, 5).Value = "ZW" Then
.Select
.Cut
Range("E:E").EntireColumn.Insert
End If
End With
Case "FGP"
With Columns(i)
If Not Cells(7, 6).Value = "FGP" Then
.Select
.Cut
Range("F:F").EntireColumn.Insert
End If
End With
Case "Ablauf"
With Columns(i)
If Not Cells(7, 7).Value = "Ablauf" Then
.Select
.Cut
Range("H:H").EntireColumn.Insert
End If
End With
End Select
Next i
End With
Application.ScreenUpdating = True
End Sub
Sortieren tut das Makro, aber fast "irgendwie" >> ;-(
Das Problem wird sein, dass wenn mittels vba z.B. die Spalte "Vertrag-Nr." gefunden wird, diese richtigerweise in die Spalte A verschiebt. Sollte nun als nächstes, zum Beispiel, die Spalte "Sparte" gefunden werden, wird diese sicherlich auch richtig in die Spalte C verschoben.
Nun kommt das große ABER, wird erst jetzt die Spalte "Spartengruppe" gefunden, dann verschiebt das makro diese - richtigerweise - in Spalte B, JEDOCH wird damit automatisch die vorher in Spalte C eingefügte Datenreihe (Sparte) um eins nach rechts (also Sparte D) verschoben.
Wie kann man dies richtig gestalten (leider können wir beim DB-Export nix umstellen...)? Denn die richtige Reihenfolge ist für das "Weiterverarbeiten" notwendig.
Als Lösung habe ich mir gedacht, dass ich die Spalte in der die Datenreihe sich zum vVrschieben befindet nach dem Befehl "Ausschneiden" noch "Lösche" und über den Befehl .Insert Shift:=xlTo Right in die richtige Spalte verschiebe. Ist das sinnvoll? gibt es elgantere Möglichkeite. Grundsätzlich soll das Makro so "dynamisch" wie möglich bleiben, ausgenommen die richtige Spaltenreihefolge.
Ich bitte um Hilfestellung bzw. Tipp wie ich das Problemchen am besten löse.
Jedenfalls ein herzliches Dankeschön im Voraus....