AW: Spalten selktiv nach Liste löschen (VBA)
20.02.2023 11:23:18
Frank
Hallo Yal, erst mal vielen Dank das Du dich noch mal zu meinem Problem geäußert hast.
Die Variante die Du mir vorher gezeigt hast:
Sub reinschreiben()
Dim i As Long
Const cKopfzeile = 1
With Worksheets("Import_Tabelle")
For i = .Cells(cKopfzeile, Columns.Count).End(xlToLeft).Column To 1 Step -1
If Worksheets("Spaltenliste").Range("A1:A10").Find(.Cells(cKopfzeile, i), LookAt:=xlWhole) Is Nothing Then
.Columns(i).Delete
End If
Next Z
End With
End Sub
Ist aus meiner Sicht die weit bessere Lösung. Denn sobald sich was an den Spalten ändert muss nur in der Spaltenliste etwas geändert werden, nicht im Code.
Derzeit habe ich folgendes am laufen:
Damit öffne ich die zu bearbeitende Import-Datei und springe dann in Deinen Code um die Spalten anzupassen. Das funkt. sehr gut.
Allerdings benötigt er die Spaltenliste in der Import-Datei.
Sub Loeschen_XLSX_das_Ausfuehren() 'rufe via Taster das Makro auf
On Error GoTo ErrorHandler
Abfrage = MsgBox("Sollen die Spalten angepasst werden?", vbYesNo + vbQuestion, "Sicherheitsabfrage")
If Abfrage = vbYes Then
For Each Datei In Array("Import_Datei.xlsx")
Workbooks.Open "D:\Test_Spaltenloeschung\" & Datei
'hier muss aus meiner Sicht die Kopierfunktion der "Spaltenliste" Makro_Datei zur Import_Datei rein
Call Spaltenloeschung_XLSX 'hier springt er in die Spaltenlöschung
ActiveWorkbook.Save
ActiveWorkbook.Close
MsgBox "Die Spalten wurden angepasst", , MyCaption
GoTo Ende
Next
End If
ErrorHandler:
MsgBox "Die Spalten wurden nicht angepasst", , MyCaption
Ende:
End Sub
Oder wir bekommen es hin, das er das kopieren nicht benötigt, und die Spaltenliste direkt aus der Makro_Datei in der Import_Datei nutzt.
Das wäre aus meiner Sicht die beste Lösung.
Ich habe auch schon mal hiermit versucht das Blatt "Spaltenliste" aus der Makro_Datei in die Importdatei zu bekommen, will aber irg. wie nicht klappen.
Sheets("Tabelle1").Copy Before:=Workbooks("Beispiel.xlsm").Sheets(1) 'Mit diesem Code wird ein Arbeitsblatt als erstes Arbeitsblatt in eine anderen Arbeitsmappe kopiert
Oder,
Sheets("Tabelle1").Copy After:=Workbooks("Beispiel.xlsm").Sheets(Workbooks("Beispiel.xlsm").Sheets.Count) 'So wird das Arbeitsblatt an das Ende der anderen Arbeitsmappe kopiert