Microsoft Excel

Herbers Excel/VBA-Archiv

For Schleife variablen | Herbers Excel-Forum


Betrifft: For Schleife variablen von: Stephan Schneider
Geschrieben am: 18.01.2012 19:17:41

Hallo Liebe Community,

leider sehe ich irgendwie gerade nicht die Lösung und weiß nicht mehr weiter.
Ich habe euch die Datei mal hochgeladen und nun meine Anliegen...

https://www.herber.de/bbs/user/78498.xlsm

Sobald ich in das Feld B19 einen Wert eingeben wird unten eine neue Zeile hinzugefügt.
mein Ziel ist es, dass dann die Berechnung der Zwischensumme mit rutscht und das die folgende Abfrage dann nicht mehr auf B19 sondern auf B20 reagiert!
Ich weiss, dass es eigentlich an einer schleife liegen müsste aber ich weiss nicht wo ich diese ansetzen soll.
Habt ihr eine Idee??

VG

Stephan

  

Betrifft: AW: For Schleife variablen von: Jürgen
Geschrieben am: 19.01.2012 05:30:58

Hallo,

vlt. ne blöde Gegenfrage: wo ist Dein Code ?
Ich sehe keinen


Jürgen


  

Betrifft: AW: For Schleife variablen von: Stephab
Geschrieben am: 19.01.2012 07:35:29

Im vba Editor...
Ich worksheet ein kurzer und dann nochmal in der Arbeitsmappe selber...
Ich arbeite mit Office Mac 2011 wenn das irgendwas ausmacht...

Vg

Stephan


  

Betrifft: AW: For Schleife variablen von: Dirk aus Dubai
Geschrieben am: 19.01.2012 07:31:11

Hallo Stephan,

probier mal so:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LastPosR As Long, ZwischSum As Range, MyFormStr As String
    
    With ActiveSheet.Cells
        Set ZwischSum = .Find(what:="Zwischensumme:", LookIn:=xlValues, lookat:=xlWhole)
        If Not ZwischSum Is Nothing Then
           LastPosR = Range(Cells(ZwischSum.Row, 2).Address).End(xlUp).Row
        End If
    End With
    
    If Cells(LastPosR, 2).Address = Target.Address Then
        If Not Cells(LastPosR, 2) = "" Then
            With Application
                 .ScreenUpdating = False
                 .Application.EnableEvents = False
                 MyFormStr = Cells(LastPosR, 6).FormulaR1C1
                 Cells(LastPosR, 2).Rows.EntireRow.Insert
                 Range(Cells(LastPosR + 1, 1), Cells(LastPosR + 1, 6)).Copy
                 Paste Range(Cells(LastPosR, 1), Cells(LastPosR, 6))
                 Range(Cells(LastPosR + 1, 2), Cells(LastPosR + 1, 5)).ClearContents
                 Cells(LastPosR, 6).FormulaR1C1 = MyFormStr
                 Cells(LastPosR + 1, 6).FormulaR1C1 = MyFormStr
                 .Goto ActiveCell.Offset(-1, 0)
                 .ScreenUpdating = True
                 .Application.EnableEvents = True
            End With
        Else
            Rows(LastPosR + 2).Delete xlShiftUp
        End If
    End If
End Sub
Lass' hoeren, ob ok.

Gruss

Dirk aus Dubai


  

Betrifft: AW: For Schleife variablen von: Stephan Schneider
Geschrieben am: 19.01.2012 09:29:13

Hallo Dirk,

vielen danke erstmal für diese andere und wesentlich bessere Lösung :D
ich hätte da noch ein paar verständnisfragen...

 With ActiveSheet.Cells
        Set ZwischSum = .Find(what:="Zwischensumme:", LookIn:=xlValues, lookat:=xlWhole)
        'Hier sucht sich das Makro die Zeile in der Zwischensumme steht und weist sie dem Range  _
ZwischSum zu
        If Not ZwischSum Is Nothing Then
        'Abfrage ob etwas zugewiesen wurde.
           LastPosR = Range(Cells(ZwischSum.Row, 2).Address).End(xlUp).Row
           'wenn ZwischSum einen Wert hat dann weise LastPosR die Adresse mit der Zeilenwert  _
von Zwischsum und den Spaltenwert von 2 zu
        End If
    End With

Wieso aber bekomme ich ich für LastPosR meine aktuelle Zeile wo ich etwas hineingeschrieben habe??
Und irgendwie funktioniert das löschen nicht obwohl ich den Fehler nicht sehe :(

viele Grüße


  

Betrifft: AW: For Schleife variablen von: Dirk aus Dubai
Geschrieben am: 19.01.2012 10:51:14

Hallo!

Das Kommando LastPosR = Range(Cells(ZwischSum.Row, 2).Address).End(xlUp).Row
Sucht Aufwaerts von der angegebenen Addresse bis es eine Zeile findet, in der etwas steht. Das ist dann die Zeilennummer, welche eingetragen wird. Falls Du da die naechste Zeile haben moechtes, einfach + 1 dazuaddieren, z.B. LastPosR = Range(Cells(ZwischSum.Row, 2).Address).End(xlUp).Row +1

Loeschen geht nicht, weil meinerseits fehlerhaft umgesetzt. Probier mal so:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LastPosR As Long, ZwischSum As Range, MyFormStr As String
    
    With ActiveSheet.Cells
        Set ZwischSum = .Find(what:="Zwischensumme:", LookIn:=xlValues, lookat:=xlWhole)
        If Not ZwischSum Is Nothing Then
           LastPosR = Range(Cells(ZwischSum.Row, 2).Address).End(xlUp).Row
        End If
    End With
    
    If Cells(LastPosR, 2).Address = Target.Address Then
        If Not Cells(LastPosR, 2) = "" Then
            With Application
                 .ScreenUpdating = False
                 .Application.EnableEvents = False
                 MyFormStr = Cells(LastPosR, 6).FormulaR1C1
                 Cells(LastPosR, 2).Rows.EntireRow.Insert
                 Range(Cells(LastPosR + 1, 1), Cells(LastPosR + 1, 6)).Copy
                 Paste Range(Cells(LastPosR, 1), Cells(LastPosR, 6))
                 Range(Cells(LastPosR + 1, 2), Cells(LastPosR + 1, 5)).ClearContents
                 Cells(LastPosR, 6).FormulaR1C1 = MyFormStr
                 Cells(LastPosR + 1, 6).FormulaR1C1 = MyFormStr
                 .Goto ActiveCell.Offset(-1, 0)
                 .ScreenUpdating = True
                 .Application.EnableEvents = True
            End With
        End If
    ElseIf LastPosR < Target.Row Then
        Application.EnableEvents = False
        Target.Rows.EntireRow.Delete
        Application.EnableEvents = True
    End If
End Sub

Dabei bleibt aber die letzte Rechnungsposition immer als leere Zeile erhalten. Das koennte man ueber eine Rechnungsabschluss-Prozedur beheben.


Gruss

Dirk aus Dubai


  

Betrifft: AW: For Schleife variablen von: Stephan Schneider
Geschrieben am: 19.01.2012 13:52:53

hallo Dirk..
danke für die Erklärung und die Berichtigung :D
warum aber springt das Makro direkt in die Else-Option wenn ich in die E Spalte einen Wert eintrage und in der gleichen Zeile ist kein Wert in der B Spalte.

 If Cells(LastPosR, 2).Address = Target.Address Then

diese Zeile überwacht doch eigentlich nur die B Spalte und dürfte doch nur Auslöser sein wenn ich in die B Spalte etwas eintrage....


  

Betrifft: AW: For Schleife variablen von: Dirk aus Dubai
Geschrieben am: 19.01.2012 14:46:32

Hallo!

Das Makro springt nach else, weil
Cells(LastPosR, 2).Address = z.B. "B10", aber Target.address = "E10"


Gruss

Dirk aus Dubai


  

Betrifft: AW: For Schleife variablen von: Stephan Schneider
Geschrieben am: 21.01.2012 16:53:17

Hallo Dirk,

ich habe es jetzt schon recht weit geschafft und habe es auch nach meinen Vorstellungen umgeschrieben und auch wieder eine Menge gelernt sodass, der Titel eigentlich hinfällig ist :D
man kann und sollte wahrscheinlich des öfteren ohne schleifen arbeiten, wo man gar keine braucht:D.

So nun zu meiner abschließenden Frage oder es sind genauer gesagt zwei...
https://www.herber.de/bbs/user/78542.xlsm

Ich habe es jetzt so umgeschrieben, dass eine Zeile erst kopiert wird wenn in die Vorletzte Zeile etwas hineingeschrieben wird.
Wenn ich dann diese neue Zeile habe, dann löst das Löschereignis natürlich aus , wenn in der vorletzten Zeile etwas passiert und durch die Prüfung in das else rein kommt....
Wie kann ich es umsetzten, dass es die letzte Zeile schon löscht, wenn ich in der drittletzten Zeile den Wert lösche??
Ich hoffe es war verständlich :D
Und dann noch eine Design-Frage: Jedesmal wenn ich Werte eingebe oder eine Zeile gelöscht wird, dann bleiben solch hässliche blaue Markierungen übrig... Wie kann ich die weg machen oder diese verhindern?

Mfg

Stephan


  

Betrifft: AW: For Schleife variablen von: Stephan Schneider
Geschrieben am: 21.01.2012 17:23:51

Hab es jetzt geschafft, dass es löscht wenn ich den Eintrag aus der drittletzten Zeile lösche...

ElseIf Cells(LastPosR - 2, 2).Address = Target.Address Then
    If Cells(LastPosR - 2, 2) = "" Then
    If LastPosR >= 21 Then
        Application.EnableEvents = False
        Range(Cells(LastPosR, 1), Cells(LastPosR, 6)).Delete
        Application.EnableEvents = True
jetzt bleibt das nur noch mit diesen lästigen blauen Markierungen die irgendwie übrig bleiben.......

viele güße


  

Betrifft: AW: For Schleife variablen von: Dirk aus Dubai
Geschrieben am: 22.01.2012 06:35:07

Hallo!

Bei mir sind keine blauen Markierungen.
Mach' doch mal einen Screenprint und lade diesen hoch.

gruss

Dirk aus Dubai


  

Betrifft: AW: For Schleife variablen von: Hajo_Zi
Geschrieben am: 22.01.2012 08:57:55

Hallo Dirk,

bei mirv waren auch keine, darum keine Antwort.

Gruß Hajo


  

Betrifft: AW: For Schleife variablen von: Stephan Schneider
Geschrieben am: 22.01.2012 10:17:45

Guten Morgen,

wie findet ihr die Umsetzung des Makros??
Diese blauen Markierungen treten bei verschiedenen Ereignissen auf.

Beim Zeile löschen


Beim Zeile einfügen


leider habe ich dafür noch keine Lösung gefunden...

viele Grüße


  

Betrifft: AW: For Schleife variablen von: Hajo_Zi
Geschrieben am: 22.01.2012 10:20:20

Hallo Stephan,

selbst in Version 2010 kann ich aus einem Bild keine Tabelle machen.

Gruß Hajo


  

Betrifft: AW: For Schleife variablen von: Stephab
Geschrieben am: 22.01.2012 10:27:55

Halo hajo

Entweder liegt es jetzt daran das Sonntag ist oder ich stehe auf dem Schlauch!!:)
Die Datei habe ich weiter oben schon angehängt und ich wollte euch nur zeigen wobei diese Makierungen bei mir auftauchen...

Gruß

Stephan


  

Betrifft: AW: For Schleife variablen von: Hajo_Zi
Geschrieben am: 22.01.2012 10:30:46

Hallo Stephan,

ich Antworte immer auf den letzten Beitrag, da ich diesen sehe.

Gruß Hajo


  

Betrifft: Nöö, Du stehst nicht aufm Schlauch ... von: Matthias L
Geschrieben am: 22.01.2012 11:29:05

Hallo Stephan

Das ist nur Hajos Art zu kommunizieren.

Ich habe mir Deine Datei auch angesehen (nur eben mit XL2007).
Ich komme leider nicht mal dazu eine Menge einzugeben.



Da meckert VBA schon in Zeile(10) & Zeile(27) des Codes jeweils
diese Zeile an:
Set ZwischSum = .Find(what:="Zwischensumme:", LookIn:=xlValues, lookat:=xlWhole)
einmal im Change- und dann auch im Calculate-Ereignis.

Ich weiß nicht obs an der XLVersion liegt, denn Dirk hatte ja anscheinend keine Probleme.
Habe mich aber mit Deinem Projekt auch nicht intensiver beschäftigt.
Gruß Matthias


  

Betrifft: AW: Nöö, Du stehst nicht aufm Schlauch ... von: Dirk aus Dubai
Geschrieben am: 22.01.2012 11:37:16

Hallo!

Kommt bei mir genauso. Habe auch 2007, Fehler kommt im Sheet_calculate.
Ich wuerde das sheet_calulate sowieso in ruhe lassen. Man kann das alles im Sheet_change abhandeln.

Gruss

Dirk aus Dubai


  

Betrifft: AW: Nöö, Du stehst nicht aufm Schlauch ... von: Stephan Schneider
Geschrieben am: 22.01.2012 11:53:12

Hallo ihr zwei :D

das ich Halo noch nicht kenne, wusste ich auch nicht, dass dies seine Art ist :D

Aber nun zu euren Fehlern...
Ich habe gerade nochmals nachgeschaut und ich bekomme keine Fehler...:(
aber mich würde jetzt schonmal interessieren woran das liegt...
leider kann ich nicht nachvollziehen was es verursacht, weil ich diesen halt nicht sehe und keine Möglichkeit habe auf 07 zu testen...

@Dirk: Im Change kann ich es aber doch nur abhandeln wenn ich noch einen neuen Überwachungsbereich hinzufüge...Oder? Wenn in einer Zelle von Einzelpreis etwas eingeben wird, dann soll das Makro berechnen...

viele Grüße



  

Betrifft: AW: Nöö, Du stehst nicht aufm Schlauch ... von: Dirk aus Dubai
Geschrieben am: 22.01.2012 12:02:23

Hallo!

Im worksheet_change kannst Du auf die Zelle pruefen:

If not intersect(target, MeineRange) is nothing then

... tu was
end if

Falls also Target in Deine Range faellt, passiert da was, ansonsten nicht. Target kommt aus dem worksheet-change als Range, meineRange musst Du mit set MeineRange festlegen 9kann eine Zelle sein oder auch mehrere).

Gruss

Dirk aus Dubai


  

Betrifft: AW: Nöö, Du stehst nicht aufm Schlauch ... von: Stephan Schneider
Geschrieben am: 22.01.2012 12:39:29

Ich habe es jetzt mal in das Change rein genommen aber irgendwie haut es mir jetzt die ganzen anderen Sachen durcheinander...(Formatierung, Kopieren funktioniert manchmal nicht)

https://www.herber.de/bbs/user/78549.xlsm


Was meint Ihr?
Habt Ihr immer noch den Fehler oder läuft die Berechnung jetzt erstmal?


grüße


  

Betrifft: AW: Nöö, Du stehst nicht aufm Schlauch ... von: Dirk aus Dubai
Geschrieben am: 22.01.2012 12:52:27

Hallo!

ich habe mal die alte Datei hergenommen und das Makro angepasst.

https://www.herber.de/bbs/user/78550.xlsm

Ich weiss leider nicht, was Du alles geaendert hast bzw. wie Dein gewuenschtes Ergebnis aussehen soll.
Vieleicht beschreibst Du das das man da am gleichen Ziel arbeitet.

gruss

Dirk aus Dubai


  

Betrifft: AW: Nöö, Du stehst nicht aufm Schlauch ... von: Stephan Schneider
Geschrieben am: 22.01.2012 13:59:42

So jetzt aber wirklich :D

https://www.herber.de/bbs/user/78552.xlsm


Ich denke, jetzt ist es fertig und auch ohne Fehlermeldung in 07 :D
Das was es machen soll sieht man jetzt deutlich :D
Sobald in die vorletzte Zeile ein Wert rein geschrieben wird, kopiert es eine Zeile dazu, wenn dann genau dieser Wert gelöscht wird, löscht es auch wieder diese Zeile.
Es sollen immer zwei leere Zeilen vorhanden sein.
Danke für den Tip (hätte man ja irgendwie selbst darauf kommen können....), die Rechnung für die Zwischensumme komplett raus zu nehmen.

So und jetzt könnt ihr nochmals kritisieren :D
ich bitte darum(Lerneffekt )

viele Grüße


  

Betrifft: Du willst Kritik ;o) von: Matthias L
Geschrieben am: 22.01.2012 17:12:40

Hallo Stephan

Ok ...

Lass einfach diese Zeile weg:
.Goto ActiveCell.Offset(-1, 0)

Ist nämlich ziemlich nervend, wenn der Cursor in die darüberliegende Zelle springt.
Nöö, das war keine Kritik ;o)
Nur ein Vorschlag

Gruß Matthias


Beiträge aus den Excel-Beispielen zum Thema "For Schleife variablen"