Vielleicht Yal, Du hattest das letzte Thema ja sehr gut gelöst.
Ich hatte da den Spaltenaufbau über eine Referenzliste "Spaltenliste" bearbeitet und die in der Liste enthaltenen beibehalten, alle anderen Spalten wurde gelöscht.
Nun ist mir so durch den Kopf gegangen,
das die Spalten ja nicht nur vorhanden sein müssen, sondern auch die richtige Reihenfolge haben müssen.
Sonst kann die Import-Datei nicht von anderen eingelesen, oder anderweitig verarbeitet werden.
In meinem jetzigen Beitrag möchte ich prüfen, ob alle Spalten wie gewünscht vorhanden sind und an der richtigen Stelle stehen.
In dem Makro hier prüft ich die Spalten auf Vorhandensein, ABER nicht auf die richtige Reihenfolge.
Ich brauchte die Abfrage ob die Prüfung durchgeführt werden soll eig. nicht, ... aber gut.
Kann ja erst mal drin bleiben, im Fall jemand nur diese Prüfung durchführen will.
So wie ich es hier habe, muss ich vor der Prüfung die Import-Datei nach ihrer 1.Bearbeitung erst schließen, da sie mit dem Makro hier noch mal geöffnet wird.
Aber, das würde ich sicher auch hin bekommen.
Hier mal das von mir angepasste Makro (stammt von Yal im 1. Beitrag, "Spalten selktiv nach Liste löschen (VBA)")
Die "Spaltenliste" dient auch hier als Referenz, jetzt in C2:C22
Sub Spaltenpruefung_Monat_XLSX() 'prüft die Spaltenanreihung und die Vollständigkeit
Dim WB As Workbook
Dim i As Long
Const cKopfzeile = 1
On Error GoTo Catch
If MsgBox("Sollen die Spalten geprüft werden?", vbYesNo + vbQuestion, "Sicherheitsabfrage") = vbYes Then
Try:
Set WB = Workbooks.Open("D:\Test_Spaltenloeschung\Import_Datei.xlsx") 'Datei öffnen
With WB.Worksheets(1)
'Spalten prüfen
For i = .Cells(cKopfzeile, Columns.Count).End(xlToLeft).Column To 1 Step -1
If ThisWorkbook.Worksheets("Spaltenliste").Range("C2:C22").Find(.Cells(cKopfzeile, i), LookAt:=xlWhole) Is Nothing Then
GoTo Catch
End If
Next
End With
MsgBox "Die Spalten wurden erfolgreich geprüft", , MyCaption
End If
GoTo Finally
Catch:
MsgBox "Die Spalten sind fehlerhaft", , MyCaption
Finally:
'hier kommt, was auf alle Fälle (auch nach Fehler) gemachte werden muss
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub