PDA

Vollständige Version anzeigen : VBA - Wieso wird die erste Zeile nicht gelöscht?


someguy
14.07.2014, 15:17
Hallo,

in meinem Hauptmodul habe ich folgendes stehen:

... 'Präambel, zahlreiche Variablendefinitionen, unter Anderem
Dim iRow As Integer
...
...
Call KopfzeilenEntfernen
...

Dann das Modul:

Sub KopfzeilenEntfernen()
'
'Kopfzeilen entfernen
With ActiveSheet
For iRow = 22 To 1 Step -1
If Cells(iRow, 1) <> "ABC" Then Cells(iRow, 1).EntireRow.Delete 'wenn Eintrag in Spalte 1 in Zeile iRow ungleich "ABC", wird Zeile gelöscht
Next
End With
End Sub

=> Die erste Zeile wird zwar geleert, aber nicht gelöscht. Was ist das denn??
Also in A2 steht dann "ABC", darüber die Zeile ist einfach leer.
Lasse ich das im im Hauptmakro durchlaufen, klappt alles einwandfrei.
Das war jetzt mein erster Versuch mein großes Makro in einer Datei in mehrere Module aufzusplitten, aber viel ist darauf bisher nicht geworden. Bin also dementsprechend unerfahren mit Untermodulen oder wie man das nennt.

Mc Santa
14.07.2014, 15:21
Hallo,

bei mir funktioniert der Code, eventuell gibt es ein Problem mit ActiveSheet? das sollte man ohnehin besser nicht verwenden.

Zusätzlich solltest du iRow in der entsprechenden Sub deklarieren und nicht woanders.

VG

someguy
14.07.2014, 15:27
Huh? Muss ich Deklarationen in jedem Sub neu machen? Oh nein... :(

Naja, iRow wird als Integer global deklariert, dann aber lokal aber auf 22 gesetzt und läuft dann runter. Verstehe es einfach nicht...

aloys78
14.07.2014, 15:31
Hallo,

ergänzend:
Wenn du WITH arbeitest, dann solltest du auch die Anweisungen darauf ausrichten und den Punkt vor Cells setzen.
Ansonsten: der Code läuft bei mir auch fehlerfrei !

Sub KopfzeilenEntfernen()
'
'Kopfzeilen entfernen
With ActiveSheet
For iRow = 22 To 1 Step -1
If.Cells(iRow, 1) <> "ABC" Then .Cells(iRow, 1).EntireRow.Delete 'wenn Eintrag in Spalte 1 in Zeile iRow ungleich "ABC", wird Zeile gelöscht
Next
End With
End Sub

someguy
14.07.2014, 15:33
Das war wohl ein Trick 17.

Eigentlich hatte ich in meinem richtigen Dokument anstelle "ABC" eine Variable definiert, es war tatsählich KopfzeileUnerwuenscht. Ich habe es jetzt umgesetzt auf "X_Value" und es funktioniert. Verstehe ich nicht. Denn natürlich stand in der Präambel auchDim KopfzeileUnerwuenscht As String, damit ich die Variable besser umsetzen kann an einigen Stellen. Hm.

Mc Santa
14.07.2014, 15:38
Hallo,

Antwort #5 ist etwas verwirrend, ist jetzt noch ein Problem offen?

zu#3:
Wenn du eine Variable innerhalb einer Sub oder Function deklarierst, dann ist si auch nur dort verfügbar. Du kannst den gleichen Variablennamen woanders erneut benutzen, aber es ist dann eine andere Variable!
Deklarierst du dagegen global, ist es immer die selbe Variable und Änderungen haben überall Auswirkungen.

In deinem Beispiel KopfzeilenEntfernen würde ich immer eine lokale Variable nutzen.

VG

someguy
14.07.2014, 15:40
Ja, es ist noch ein Problem offen.
Also das große Hauptmakro ist natürlich nicht nur von mir, ich habe mir auch hier im Forum kräftig Hilfe geholt und merke gerade dass mir das über den Kopf steigt. Ich lasse es mit dem Aufsplitten, so nett die Idee auch ist.
Wird wohl bisschen längeres T&E dann, aber da läuft es immerhin schon richtig durch.