Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1368to1372
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

VBA Code erst weiter wenn...

VBA Code erst weiter wenn...
22.07.2014 16:43:52
Marcy

Hallo zusammen,
ich stehe mal wieder vor einem kleinen Problem.
Ich habe mir was tolles gebastelt, womit ich eine Vorlage fülle, aber perfekt ist es noch nicht.
Die Einträge in Spalte 48&49 sind von den Einträgen in Spalte 4, 14, 15, 18 und 45 abhängig. Das muss erst erledigt sein, bevor Spalte 48&49 gefüllt wird, siehe Kommentar im Code.
Ich könnte es höchstens in zwei Codes aufteilen, wäre aber elegant, wenn es in einem funktioniert.
Wenn ich wüsste wie man es nennt, hätte ich die Suchfunktion benutzen können.
Vielen Dank für Eure Hilfe
Marcy

Sub Ebenen_Sind_angelegt()
Call EventsOff
Dim i As Long
For i = 201 To ActiveSheet.UsedRange.Columns("A").Cells.Count
If Cells(i, 4) = "" Then Cells(i, 4) = Cells(i - 1, 4)
If Cells(i, 14) = "" Then Cells(i, 14) = Cells(i - 1, 14)
If Cells(i, 15) = "" Then Cells(i, 15) = Cells(i - 1, 15)
If Cells(i, 18) = "" Then Cells(i, 18) = Cells(i - 1, 18)
If Cells(i, 45) = "" Then Cells(i, 45) = Cells(i - 1, 45)
'Hier darf es erst weitergehen, wenn die Aufgaben oben erledigt sind.
If Cells(i, 48) = "" Then Cells(i, 48) = Cells(i - 1, 48)
If Cells(i, 49) = "" Then Cells(i, 49) = Cells(i - 1, 49)
Next i
Call EventsOn
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code erst weiter wenn...
22.07.2014 18:08:30
fcs
Hallo Marcy,
mache zwei For-Next-Schleifen draus.
Gruß
Franz
Sub Ebenen_Sind_angelegt()
Call EventsOff
Dim i As Long
For i = 201 To ActiveSheet.UsedRange.Columns("A").Cells.Count
If Cells(i, 4) = "" Then Cells(i, 4) = Cells(i - 1, 4)
If Cells(i, 14) = "" Then Cells(i, 14) = Cells(i - 1, 14)
If Cells(i, 15) = "" Then Cells(i, 15) = Cells(i - 1, 15)
If Cells(i, 18) = "" Then Cells(i, 18) = Cells(i - 1, 18)
If Cells(i, 45) = "" Then Cells(i, 45) = Cells(i - 1, 45)
Next i
For i = 201 To ActiveSheet.UsedRange.Columns("A").Cells.Count
If Cells(i, 48) = "" Then Cells(i, 48) = Cells(i - 1, 48)
If Cells(i, 49) = "" Then Cells(i, 49) = Cells(i - 1, 49)
Next i
Call EventsOn
End Sub

Anzeige
AW: VBA Code erst weiter wenn...
23.07.2014 06:18:18
Marcy
Hallo Franz,
danke für Deine Antwort
Habe es gleich probiert, klappt aber auch nicht.
Du hast mir aber trotzdem geholfen :-)
Mit EventsOff schalte ich die automatische Berechnung aus.
Somit konnte Spalte 48 +49 auf die Eintragung in Spalte 45 nicht reagieren.
Ich hatte durch meine bescheidenen VBA Kenntnisse den Fehler aussschließlich im Code vermutet, lag aber nur an den automatischen Berechnung.
Vielen Dank für den Anstoß
Gruß Marcy

AW: VBA Code erst weiter wenn...
23.07.2014 13:16:39
Adis
Hallo
Ich benutze für solche Faelle ein Flag oder Zaehler der nur weiter zaehlt wenn das Ereignis ok ist
Jetzt spielt es keine Rolle wieviele Funktionen erfüllt sein müssen. Er zaehlt ja nur bei If ok = n+1
Die weitere Ausführung haengt jetzt vom Zehler Stand ab. Den Endwert prüfe ich ob er stimmt
wdh: 'Einsprungmarke, wenn das Programm wiederholt werden soll
n=0 'Zehler zuerst löschen nicht vergessen !!
If Cells(i, 4) = "" Then Cells(i, 4) = Cells(i - 1, 4): n=n+1
If Cells(i, 14) = "" Then Cells(i, 14) = Cells(i - 1, 14): n=n+1
If Cells(i, 15) = "" Then Cells(i, 15) = Cells(i - 1, 15): n=n+1
If n = gewünschter Wert Then Makro weiter ausführen
If n < gewünschter Wert Then Msgbox n & " die Bedinung ist noch nicht erfüllt"
if wdhza > Abbruchzahl Then Exit Sub 'Abbruch zur Vermeidung von Endlos Schleife
if n < gewünschter Wert Then wdhza = wdhza + 1: goto wdh
Bleibt die Frage, was soll das Programm machen wenn die Bedingung unerfüllt ist?
Man kann z.B. auf eine wdh = Wiederholung Einsprungmarke zurückspringen, neu beginnen.
Dabei bitte einen Wiederhol Zaehler setzen, sonst gibt es bei unerfüllten Bedingungen
eine Endlos Schleife ohne Abbruch. Das Programm haengt sich in einer Todesschleife auf.
wdhza über Dim setzen, damit der Zaehler immer beim Makro Start gelöscht wird
Erkenntnisse aus der eigenen Praxis. Bei Todesschleişfen hift nur noch PC runterfahren.
Gruss Adis

Anzeige
AW: VBA Code erst weiter wenn...
23.07.2014 15:18:41
Marcy
Hallo Adis,
danke für Deine ausführliche Antwort. Hilft mir immer wieder bei meinem VBA Lernen.
Habe Franz seinen Vorschlag schon eingebaut und leicht angepasst.
Vor der zweiten Schleife Berechnung ein und dann wieder aus.
Mit Berechnung dauerte es viel zu lang.
Da in Summe die sieben Spalten bis Zeile 100499 und auch annährend 100499 x 7 Zellen gefüllt werden, das ganze "nur" 85 Sekunden dauert, denke ich ist der Code nun toppp.
Ich bin in jedem Fall mehr als zufrieden.
Besten Dank an alle und
Gruß Marcy
Sub Ebenen_Sind_angelegt()
Application.GoTo Cells(199, 2)
ActiveCell.Offset(1, 0).Select
Call EventsOff
Dim i As Long
For i = 201 To ActiveSheet.UsedRange.Columns("A").Cells.Count
If Cells(i, 4) = "" Then Cells(i, 4) = Cells(i - 1, 4)
If Cells(i, 14) = "" Then Cells(i, 14) = Cells(i - 1, 14)
If Cells(i, 15) = "" Then Cells(i, 15) = Cells(i - 1, 15)
If Cells(i, 18) = "" Then Cells(i, 18) = Cells(i - 1, 18)
If Cells(i, 45) = "" Then Cells(i, 45) = Cells(i - 1, 45)
Next i
Call EventsOn
For i = 201 To ActiveSheet.UsedRange.Columns("A").Cells.Count
Call EventsOff
If Cells(i, 48) = "" Then Cells(i, 48) = Cells(i - 1, 48)
If Cells(i, 49) = "" Then Cells(i, 49) = Cells(i - 1, 49)
Next i
Call EventsOn
End Sub

Anzeige
AW: VBA Code erst weiter wenn...
23.07.2014 15:59:45
fcs
Hallo Marcy,
dann solltest du 1 mal zwischen den Schleifen neu berechnen.
Es macht wenig/keinen Sinn, in der 2. Schleife die Events bei jedem Durchlauf abzuschalten.
Gruß
Franz
Sub Ebenen_Sind_angelegt()
Application.Goto Cells(199, 2)
ActiveCell.Offset(1, 0).Select
Call EventsOff
Dim i As Long
For i = 201 To ActiveSheet.UsedRange.Columns("A").Cells.Count
If Cells(i, 4) = "" Then Cells(i, 4) = Cells(i - 1, 4)
If Cells(i, 14) = "" Then Cells(i, 14) = Cells(i - 1, 14)
If Cells(i, 15) = "" Then Cells(i, 15) = Cells(i - 1, 15)
If Cells(i, 18) = "" Then Cells(i, 18) = Cells(i - 1, 18)
If Cells(i, 45) = "" Then Cells(i, 45) = Cells(i - 1, 45)
Next i
ActiveSheet.Calculate
For i = 201 To ActiveSheet.UsedRange.Columns("A").Cells.Count
If Cells(i, 48) = "" Then Cells(i, 48) = Cells(i - 1, 48)
If Cells(i, 49) = "" Then Cells(i, 49) = Cells(i - 1, 49)
Next i
Call EventsOn
End Sub

Anzeige
AW: VBA Code erst weiter wenn...
23.07.2014 16:08:46
Marcy
Mhhhh Franz,
läuft aber super, trotzdem versuche ich es später mal mit ActiveSheet.Calculate.
Gruß Marcy
Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige