Microsoft Excel

Herbers Excel/VBA-Archiv

Do While... Loop

Betrifft: Do While... Loop von: Sammy Abu shab
Geschrieben am: 24.05.2005 16:13:05

Hallo Ihrs!

Mal wieder ein neuer Versuch hoffentlich redet diesmal jemand mit mir...

Ich brauche eine Schleife die mir folgende Anweisung solange wiederholt, bis DatumOptionende hinter dem heutigen Datum liegt.

Bei meiner Schleife gibt er immer ein Fehler aus und zwar immer am Ende der Schleife... was mach ich falsch???


#If DatumLaufende <= DatumHeute Then
Do While DatumEnde <= DatumHeute

TagOptionbeginn = TagBeginn
MonatOptionbeginn = MonatBeginn + Laufzeit
JahrOptionbeginn = JahrBeginn
DatumOptionbeginn = DateSerial(JahrOptionbeginn, MonatOptionbeginn,TagOptionbeginn)
.Cells(z, 10) = DatumOptionbeginn


TagOptionende = TagEnde
MonatOptionende = MonatEnde + Laufzeit
JahrOptionende = JahrEnde
DatumOptionende = DateSerial(JahrOptionende, MonatOptionende, TagOptionende)
.Cells(z, 11) = DatumOptionende

Loop

#End If

Freue mich auf Antwort!

  


Betrifft: AW: Do While... Loop von: Volker
Geschrieben am: 24.05.2005 17:12:25

Hallo Sammy,

leider sind die Variablenzuweisungen nicht ersichtlich.
Aber
1. dürfte ".cells(z,11)=...." eine Fehlermeldung geben. Laß den Punkt weg.
2. wird in deiner Schleife weder DatumEnde noch DatumHeute geändert, dh. das Abbruchkriterium wird nie erfüllt.

Gruß
Volker


  


Betrifft: AW: Do While... Loop von: Sammy Abu shab
Geschrieben am: 24.05.2005 18:52:38

Hey Volker,

tausend dank! Hast natürlich recht... das machen wohl meine mangelnden VBA-Künste das ich den Wald vor lauter Bäumen nicht seh!

Aber warum muss ich den Punkt wegmachen... jetzt klappts auch mit Punkt..

Viele Grüße
Sammy


  


Betrifft: AW: Do While... Loop von: Volker
Geschrieben am: 25.05.2005 06:44:28

Moin Sammy,

das mit dem Wald geht nicht nur dir manchmal so.

Also:

Sub xyz()
.cells(1,1)
End Sub


wird nicht gehen. probiers aus.

Du hast sicherlich irgendwo vorher ein

with activesheet
...dein code
.Cells(1, 1) = "xyz"
............
End With
End Sub

Mit dem Punkt kann man sich Schreibarbeit sparen:


Sub xyz_bla()
Sheets(1).Activate
With ActiveSheet
.Cells(3, 3) = "bla"
Sheets(2).Range("B2") = "Hallo"
.Cells(1, 1) = "xyz"
Sheets(2).Rows(1).Delete
.Rows(1).Delete
usw.
End With
End Sub


Alle Anweisungen nach dem "With Objekt" steht und mit einem Punkt beginnt, bezieht sich auf dieses Objekt.
Wie Du siehst, können dazwischen sogar Anweisungen stehen, die sich nicht auf das Objekt beziehen, also ohne Punkt sind.

Das gilt also für beliebige? Objekte, zB. auch einen Range:

Sub xyz_bla()
With Range("A1:C3")
.ClearContents
.Interior.Color = 10
......
End With

Gruß
Volker



  


Betrifft: AW: Do While... Loop von: Sammy Abu shab
Geschrieben am: 25.05.2005 09:36:58

Moin Volker,

gut zu wissen. Schreibarbeit ist nur nicht mein Problem sondern das fehlende Wissen... wenn ich das durch Schreibarbeit wenigstens ein wenig aufwiegen kann, bin ich ja schon zufrieden!

Kannst du mir bei diesem Problem auch Hilfestellung geben?


Kuendigung = .Cells(z, 14)
#If Kuendigung = "x" Then

'Kopiere diese Zeile in Tabellenblatt "GekuendigteVertraege" in die erste freie Zeile aber nicht in die erste
'Lösche dise Zeile in Tabellenblatt "Eingabefenster" und verschiebe alle anderen Zeilen um eins nach oben (behalte aber die Formatierungen jeder einzelnen Zeile)

#End If



Jetzt schon mal Danke!

Viele Grüße
Sammy


  


Betrifft: AW: Do While... Loop von: Volker
Geschrieben am: 25.05.2005 10:07:41

Klar, geht alles, nun aber ungetestet:

Kuendigung = .Cells(z, 14)
If Kuendigung = "x" Then
Rows(z).Copy
'Kopiere diese Zeile in Tabellenblatt "GekuendigteVertraege" in die erste freie Zeile aber nicht in die erste
letzte = WorksheetFunction.Max(2, Sheets("GekuendigteVertraege").Range("A65535").endxl(up).Row+1)
Sheets("GekuendigteVertraege").Range("A" & letze).Paste
'Lösche dise Zeile in Tabellenblatt "Eingabefenster" und verschiebe alle anderen Zeilen um eins nach oben (behalte aber die Formatierungen jeder einzelnen Zeile)
Rows(z).Delete
End If

oder kürzer

If .Cells(z, 14) = "x" Then
Rows(z).Copy
'Kopiere diese Zeile in Tabellenblatt "GekuendigteVertraege" in die erste freie Zeile aber nicht in die erste
letzte = WorksheetFunction.Max(2, Sheets("GekuendigteVertraege").Range("A65535").endxl(up).Row+1)
Sheets("GekuendigteVertraege").Range("A" & letze).Paste
'Lösche dise Zeile in Tabellenblatt "Eingabefenster" und verschiebe alle anderen Zeilen um eins nach oben (behalte aber die Formatierungen jeder einzelnen Zeile)
Rows(z).Delete
End If
End Sub

Gruß
Volker


  


Betrifft: AW: Do While... Loop von: Sammy Abu shab
Geschrieben am: 25.05.2005 10:38:57

Danke für den Einsatz!

Leider gibt er immer diese Fehlermeldung raus:

Objekt unterstützt diese Eigenschaft oder Methode nicht.
Und er makiert mir dann die Zeile :

letzte = WorksheetFunction.Max(2, Sheets("GekuendigteVertraege").Range("A65535").endxl(up).Row + 1)

habe das da stehen, mit den Variablen Kuendigung als String, letzte und up als Integer


Kuendigung = .Cells(z, 14)

#If Kuendigung = "x" Then

Rows(z).Copy
letzte = WorksheetFunction.Max(2, Sheets("GekuendigteVertraege").Range("A65535").endxl(up).Row + 1)
Sheets("GekuendigteVertraege").Range("A" & letzte).Paste
Rows(z).Delete

#End If


  


Betrifft: Keine Zeit mehr. Wer übernimmt bitte ??? von: Volker
Geschrieben am: 25.05.2005 10:45:25

sorry meine Zeit wird knapp.

1. up muß oder sogar darf nicht deklariert werden.
2. ev. muß Blatt("GekuendigteVertraege") vorher aktiviert werden, glaub ich aber eher nicht
3. Schau dir halt mal in der Hilfe die Funtionen an

Ich setzte die Frage auf offen. Vielleicht übernimmt jemand inzwischen.

Gruß
Volker


  


Betrifft: AW: Keine Zeit mehr. Wer übernimmt bitte ??? von: Sammy Abu shab
Geschrieben am: 25.05.2005 11:12:15

Hallo Volker!

Hab raus wie er diesen Fehler nicht mehr macht.
Es muß heißen: ...End(xlUp)...

Leider habe ich direkt den nächsten Bug. Für folgende Zeile:

Sheets("GekuendigteVertraege").Activate.Range("A" & letzte).Paste

gibt er immer diese Fehlermeldung aus: Objekt erforderlich!

Vielleicht steht mir ja noch jemand anderes mit Tat und Rat zur Seite.

Danke im Voraus& Danke Volker!

Viele Grüße Sammy


  


Betrifft: AW: Keine Zeit mehr. Wer übernimmt bitte ??? von: Hajo_Zi
Geschrieben am: 25.05.2005 17:36:31

Hallo Sammy,

was soll .Activate in der Zeile?

Grußformel
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Home SP2 und Excel Version 2003 SP1.

Homepage