Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Spalten selktiv nach Liste prüfen (VBA)

Spalten selktiv nach Liste prüfen (VBA)
23.02.2023 14:36:13
Frank
Hallo, ich benötige noch mal Eure Hilfe.
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

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten selktiv nach Liste prüfen (VBA)
23.02.2023 16:04:09
Yal
Hallo Frank,
es könnte/sollte jeder zuhilfe kommen. Es ist nur so, dass ich das Thema tatsächlich in Erinnerung habe.
Sub Spalten_neuordnen()
Dim i
Dim LC As ListColumn
Dim SpName As String
    With ActiveSheet.ListObjects(1)
        For i = 1 To .ListColumns.Count - 1
            SpName = Thisworkbook.Worksheets("Spaltenliste").Cells(i +1, "C").Value 'ab C2
            .ListColumns(SpName).Range.EntireColumn.Cut
            .ListColumns(i).Range.EntireColumn.Insert Shift:=xlToRight
        Next
    End With
End Sub
Diese Vorgang setzt voraus, dass alle in C2:C22 aufgelisteten Spalten in dem ActiveSheet.ListObjects(1) vorhanden sind.
VG
Yal
Anzeige
AW: Spalten selktiv nach Liste prüfen (VBA)
23.02.2023 16:23:09
Yal
Jetzt mit "Spalten, die aufgelistet, aber nicht vorhanden sind".
Nehmen wir an, die Spaltenliste beinhaltet die Spalten Monat, Jahr, Windrichtung, aber die Spalte Jahr ist nicht in der Quelle vorhanden. Dann ist de Endreihenfolge Monat, Windrichtung. Es ist dann weiterhin ein Problem, wenn auf diese Daten zugegriffen werden soll.
Sub Spalten_neuordnen()
Dim i
Dim Z As Range
Dim LC As ListColumn
On Error Resume Next
    With Worksheets("Tabelle1").ListObjects(1)
        For Each Z In Worksheets("Spaltenliste").Range("C2:C22")
            Set LC = Nothing
            Set LC = .ListColumns(Z.Value)
            If Not LC Is Nothing Then
                i = i + 1
                LC.Range.EntireColumn.Cut
                .ListColumns(i).Range.EntireColumn.Insert Shift:=xlToRight
            End If
        Next
    End With
End Sub
VG
Yal
Anzeige
AW: Spalten selktiv nach Liste prüfen (VBA)
23.02.2023 23:28:13
Frank
Yal, ich muss mal fragen (habe es noch nicht ausprobiert), dient dieser Code dem sortieren, oder der Überprüfung?
Ich kann gerade nicht erkennen, an welcher Stelle er prüft und ausgibt, es passt alles, oder es ist ein Fehler aufgetreten.
Ich muss ja immer von der Nettigkeit der Bereitsteller der Ursprungsdatei ausgehen das Spalten fehlen, oder umbenannt wurden.
Deswegen wollte ich gern die Spalten mit der Referenz prüfen.
Also eine Meldung bekomme, es passt alles, oder es ist ein Fehler aufgetreten.
AW: Spalten selktiv nach Liste prüfen (VBA)
23.02.2023 23:36:37
ralf_b
siehst du da irgendwo eine "Msgbox"?
Damit dürfte deine Frage nach einer Überpüfung beantwortet sein.
Du bekommst wahrscheinlich einen Fehler wenn der Code versucht eine Spalte auszuschneiden ,die es nicht gibt.
Anzeige
AW: Spalten selktiv nach Liste prüfen (VBA)
23.02.2023 23:53:08
Yal
Hallo Frank,
die Sortierung erfolgt nach einem Cut+insert Da es auf den Spalten der intelligenten Tabelle anhand der Spaltennamen, die in der Spaltenliste liegen, könnte es sein, das in dieser Liste Spaltenüberschriften gibt, die es in der Tabelle nicht gibt.
Daher LC zu nothing bevor einen Namen zu einem LC zugewiesen wird. Unter Fehlertoleranz kann man anschließend testen, ob LC noch leer ist. Wenn nicht, verschieben.
VG
Yal

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige