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

For Schleife variablen

For Schleife variablen
Stephan
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
AW: For Schleife variablen
19.01.2012 05:30:58
Jürgen
Hallo,
vlt. ne blöde Gegenfrage: wo ist Dein Code ?
Ich sehe keinen
Jürgen
AW: For Schleife variablen
19.01.2012 07:35:29
Stephab
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
AW: For Schleife variablen
19.01.2012 07:31:11
Dirk
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
Anzeige
AW: For Schleife variablen
19.01.2012 09:29:13
Stephan
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
Anzeige
AW: For Schleife variablen
19.01.2012 10:51:14
Dirk
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 

Dabei bleibt aber die letzte Rechnungsposition immer als leere Zeile erhalten. Das koennte man ueber eine Rechnungsabschluss-Prozedur beheben.
Gruss
Dirk aus Dubai
Anzeige
AW: For Schleife variablen
19.01.2012 13:52:53
Stephan
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....
AW: For Schleife variablen
19.01.2012 14:46:32
Dirk
Hallo!
Das Makro springt nach else, weil
Cells(LastPosR, 2).Address = z.B. "B10", aber Target.address = "E10"
Gruss
Dirk aus Dubai
Anzeige
AW: For Schleife variablen
21.01.2012 16:53:17
Stephan
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
Anzeige
AW: For Schleife variablen
21.01.2012 17:23:51
Stephan
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
AW: For Schleife variablen
22.01.2012 06:35:07
Dirk
Hallo!
Bei mir sind keine blauen Markierungen.
Mach' doch mal einen Screenprint und lade diesen hoch.
gruss
Dirk aus Dubai
Anzeige
AW: For Schleife variablen
22.01.2012 08:57:55
Hajo_Zi
Hallo Dirk,
bei mirv waren auch keine, darum keine Antwort.
Gruß Hajo
AW: For Schleife variablen
22.01.2012 10:17:45
Stephan
Guten Morgen,
wie findet ihr die Umsetzung des Makros?
Diese blauen Markierungen treten bei verschiedenen Ereignissen auf.
Beim Zeile löschen
Userbild
Beim Zeile einfügen
Userbild
leider habe ich dafür noch keine Lösung gefunden...
viele Grüße
Anzeige
AW: For Schleife variablen
22.01.2012 10:20:20
Hajo_Zi
Hallo Stephan,
selbst in Version 2010 kann ich aus einem Bild keine Tabelle machen.
Gruß Hajo
AW: For Schleife variablen
22.01.2012 10:27:55
Stephab
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
AW: For Schleife variablen
22.01.2012 10:30:46
Hajo_Zi
Hallo Stephan,
ich Antworte immer auf den letzten Beitrag, da ich diesen sehe.
Gruß Hajo
Anzeige
Nöö, Du stehst nicht aufm Schlauch ...
22.01.2012 11:29:05
Matthias
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.
Userbild
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
Anzeige
AW: Nöö, Du stehst nicht aufm Schlauch ...
22.01.2012 11:37:16
Dirk
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
AW: Nöö, Du stehst nicht aufm Schlauch ...
22.01.2012 11:53:12
Stephan
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
AW: Nöö, Du stehst nicht aufm Schlauch ...
22.01.2012 12:02:23
Dirk
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
AW: Nöö, Du stehst nicht aufm Schlauch ...
22.01.2012 12:39:29
Stephan
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
AW: Nöö, Du stehst nicht aufm Schlauch ...
22.01.2012 12:52:27
Dirk
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
AW: Nöö, Du stehst nicht aufm Schlauch ...
22.01.2012 13:59:42
Stephan
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
Du willst Kritik ;o)
22.01.2012 17:12:40
Matthias
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige