Verzeiht mir den Mehrfach-Post vorab, ich habe selbst keinen Schimmer wie das passieren konnte.
[b]Aufgabe:[/b] Mit meinem VBA-Code möchte ich bei jedem Aufruf meiner Arbeitsmappe existierende Spalten löschen, in denen in einer Zelle (in immer der gleichen Zeile) eine bestimmte Überschrift steht.
Das ganze habe ich mit einer Schleife implementiert, da die Überschriften eine variable Zahl enthalten. Diese Zahl kann maximal 6 sein (s. Code, es soll maximal eine Anzahl von 6 BHKW-Modulen geben).
Das Löschen ist notwendig, weil ebenfalls bei jedem Aufruf der Arbeitsmappe so viele Spalten hinzugefügt werden sollen, wie die Anzahl an BHKW-Modulen gewählt wurde.
[b]Problem:[/b] Im Grunde funktioniert das Löschen der Spalten ganz gut, bis auf einen kleinen Haken:
Wird eine Spalte gelöscht, rutscht die Spalte rechts von dieser gelöschten Spalte an ihre Stelle. Der Parameter, der die Schleife durchläuft, rückt allerdings eine Spalte weiter. Dadurch werden diese "verrutschten" Spalten nicht mehr überprüft und es bleiben letztendlich Spalten stehen, die eigentlich gelöscht werden sollten. Also sollte dieser Parameter für den Fall (if-Abfrage), dass eine Spalte gelöscht wird, die Überprüfung wieder ab der selben Spalte beginnen.
Ich hoffe ich habe mich verständlich ausgedrückt. Ich bitte um Hilfe.. die Lösung ist sicher denkbar einfach, habe jedoch gerade erst angefangen mich mit VBA zu beschäftigen.
Hier der Code:
[code]Sub Spalten_löschen()
'Dieses Makro fügt eine Anzahl an Spalten für Leistung und Wirkungsgrade hinzu, die der Anzahl an gewählten Modulen entspricht
Dim Anz_Module, i As Integer
Dim Zelle As Range
Anz_Module = Worksheets("Test1").Range("B1")
Worksheets("Test").Activate
'Existierende Anzahl an Spalten Löschen
For i = 1 To 6
For Each Zelle In ActiveSheet.Range("A2:Z2")
If Zelle.Value = "Leistung BHKW Modul " & i & " (in %)" Or Zelle.Value = "el. Wirkungsgrad BHKW Modul " & i & " (in %)" Or Zelle.Value = "th. Wirkungsgrad BHKW Modul " & i & " (in %)" Then
Columns(Zelle.Column).Delete
'An dieser Stelle soll Zelle wieder eine Spalte zurückspringen, da sonst die "Überschrift" nicht überprüft wird, die wegen Delete eine Spalte nach links gerutscht ist
End If
Next Zelle
Next i
End Sub[/code]
Vielen Dank schon im Voraus! |