Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1324to1328
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

List.Objects best. Spalten löschen

List.Objects best. Spalten löschen
13.08.2013 09:33:27
Nette13
Hallo zusammen,
am liebsten arbeite ich mit listobjects in meinen VBA's. Allerdings komme ich nun an einer Stelle nicht weiter. Mein listobject heißt "OrderLines". Nun möchte ich alle Spalten in diesem Object löschen, die den Namen "Column" enthalten.
Sub SpaltenLoeschen()
Dim vLetzteSpalte%, i%
vLetzteSpalte = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
Application.ScreenUpdating = False
For i = vLetzteSpalte To 1 Step -1
If Not Cells(1, i)  "Column*" Then
Cells(1, i).EntireColumn.Delete
End If
Next i
Application.ScreenUpdating = True
End Sub
Allerdings funktioniert das ganze irgendwie nicht, weil ich sicher noch irgendwie das Listobject bezeichnen muss.
Hat irgendjemand von Euch eine Idee, wie ich das einbauen muss.
Vielen Dank
Annette

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: List.Objects best. Spalten löschen
13.08.2013 10:53:10
Beverly
Hi Anette,
versuche es mal so:
Sub SpaltenLoeschen()
Dim vLetzteSpalte%, i%
Dim objListObj As ListObject
Dim objListCols As ListColumns
vLetzteSpalte = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
Application.ScreenUpdating = False
Set objListObj = ActiveSheet.ListObjects("OrderLines")
Set objListCols = objListObj.ListColumns
For i = vLetzteSpalte To 1 Step -1
If Not Left(objListCols(i).Name, 6)  "Column" Then
objListCols(i).Delete
End If
Next i
Application.ScreenUpdating = True
End Sub


Anzeige
AW: List.Objects best. Spalten löschen
13.08.2013 11:07:20
Nette13
Karin, vielen Dank. Yippieeeee. Es hat funktioniert. Kannst Du mir erklären was If Not Left(objListCols(i).Name, 6) macht? Ich meine, was bedeutet die 6?
Danke
Annette

AW: List.Objects best. Spalten löschen
13.08.2013 11:21:44
Beverly
Hi Anette,
die linken 6 Zeichen der Spaltenüberschrift der laufenden ListObject-Spalte sind verschieden von "Column" - also nicht löschen wenn dfie linken 6 Zeichen verschieden von "Column" sind. Natürlich kann man das auch etwas unkomplizierter schreiben, ohne doppelte Verneinung:
If Left(objListCols(i).Name, 6) = "Column" Then


Anzeige
AW: List.Objects best. Spalten löschen
13.08.2013 11:38:41
Nette13
Vielen Dank. Ah, ja klar. Ist auch auch bei "normalen" Formeln so.
Nochmals danke. Auch dir Luschi.
Gruß
Annette

AW: List.Objects best. Spalten löschen
13.08.2013 12:51:48
Luschi
Hallo nette Annette,
Karins Code ist noch sehr altlastig aus Zeiten von Excel 2002 (XP)und vorher.
Wenn das ListObject nicht in Spalte 'A' beginnt oder in eine andere Tabelle verschoben wird, beginnen schon die Probleme und der Vba-Code muß angepaßt werden.
Mit den neuen Möglichkeiten, die ich in meinem Code verwende, ist das Programm
resistent gegen solche manuellen Veränderungen: Denn es interessiert nicht, in welcher Tabelle das Objekt liegt und wo die Spaltenüberschriften zu finden sind.
Schau dazu mal in der Vba-Hilfe unter folgendem Stichpunkt nach: 'Elemente des ListObject-Objekts'.
So kann man mit DataBodyRange.Cells(1,1) auf die 1. Zelle im Datenbereich zugreifen, ohne daß man konkret die Zelladresse kennen muß.
Viel Spaß beim Stöbern wünscht Luschi
aus klein-Paris

Anzeige
AW: List.Objects best. Spalten löschen
13.08.2013 13:19:45
Beverly
Hi Anette,
bei der Spaltenermittlung war ich nur von deinem Ursprungscode ausgegangen.
Es geht auch bei meinem Code zu berücksichtigen, dass das ListObjekt nicht in A1 beginnt und nichts muss angepasst werden - der Basiscode für die Spalten des ListObjects entstammt der VBA-Hilfe von Excel2010 (zu finden unter: ListObject.ListColumns-Eigenschaft) und nicht der von Excel2002.
Sub SpaltenLoeschen()
Dim i%
Dim objListObj As ListObject
Dim objListCols As ListColumns
Application.ScreenUpdating = False
Set objListObj = ActiveSheet.ListObjects("OrderLines")
Set objListCols = objListObj.ListColumns
For i = objListCols.Count To 1 Step -1
If Left(objListCols(i).Name, 6) = "Column" Then
objListCols(i).Delete
End If
Next i
Application.ScreenUpdating = True
End Sub


Anzeige
AW: List.Objects best. Spalten löschen
13.08.2013 21:42:00
Luschi
Hallo Karin,
wer das Objekt 'ListObject' verwendet, sollte sich auch die neuen Methoden diese Objektes anschauen, um seinen Vba-Code effektiver zu gestalten. Dazu gehören eben auch 'HeaderRowRange' & 'DataBodyRange'.
Schon diese Befehlszeile:
Set objListObj = ActiveSheet.ListObjects("OrderLines")
führt zu einem Fehler, wenn das aktuell angezeigte Worksheet dieses Listobjekt nicht enthält sondern per Hand/Maus in eine andere Tabelle portiert wurde.
Mein Befehl:
Set liO = ListObjects(s1)
greift garantiert auf das richtige Objekt zu, wenn der Name korrekt angegeben wurde, ohne daß man wissen muß, in welcher Tabelle sich dieses Objekt gerade befindet.
Deshalb bin ich erstaunt, daß auch Du die alten Methoden (Technologie von vorgestern!) krampfhaft verteidigst (Anzahl der Spalten im Objekt ermitteln), ohne auf die neuen Möglichkeiten einzugehen:
objListCols(i).Name
ist doppelt gemoppelt, wenn man weiß, daß man mit der Methode 'HeaderRowRange' direkt die Überschriftenzeilen des ListObjektes ableiten und durchlaufen kann.
Auf Fragen wie, letzte Zeile eines Bereiches antworte ich schon gar nicht mehr, solange der Bereich nicht als 'ListObject' nicht definiert wurde.
Gruß von Luschi
aus klein-Paris
PS: Wer die neuen Möglichkeiten von Excel nicht nutzt, wird ewig sich fühlen wie im Trabbi, obwohl er gerade einen Ferrari fährt!

Anzeige
AW: List.Objects best. Spalten löschen
14.08.2013 07:18:36
Beverly
Hi Luschi,
mag schon sein, dass dein Code allumfassend ist, aber weshalb muss man gleich mit Kanonen auf Spatzen schießen, wenn es das Schrotgewehr genau so tut? Ich fahre lieber mit dem guten alten Trabbi (weshalb ist er wohl in manchen westlichen Ländern wohl so begehrt?!) über die kaputten Straßen als mit dem Ferrari, da ich beim Trabbi selbst Hand anlegen kann, wenn er an der nächsten Ecke wegen einer Panne liegen bleiben sollte.


AW: List.Objects best. Spalten löschen
13.08.2013 11:02:10
Luschi
Hallo nette Annette,
versuch es mal so:

Sub macheMal()
Dim liO As ListObject, _
rg1 As Range, rg2 As Range, rg3 As Range
Dim s1 As String, s2 As String
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
s1 = "OrderLines"
s2 = "Column*"
Set liO = ListObjects(s1)
Set rg1 = liO.HeaderRowRange
Debug.Print rg1.Address
For Each rg2 In rg1
If rg2 Like s2 Then
If rg3 Is Nothing Then
rg2.EntireColumn.Delete xlShiftToLeft
'Set rg3 = rg2
Else
'Set rg3 = Application.Union(rg2, rg3)
End If
End If
Next rg2
'dies klappt komischer weise nicht
'also erst sammeln und dann auf einmal löschen
If Not rg3 Is Nothing Then
rg3.EntireColumn.Delete xlShiftToLeft
End If
Set rg1 = Nothing
Set rg2 = Nothing
Set rg3 = Nothing
Set liO = Nothing
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
End Sub
Gruß von Luschi
aus klein-Paris

Anzeige
AW: List.Objects best. Spalten löschen
13.08.2013 11:07:40
Luschi
ganz kleine Korrektur,
natürlich muß an Ende alles wieder aktiviert werden:
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Gruß von Luschi
aus klein-Paris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige