Anzeige
Archiv - Navigation
1484to1488
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

Gibt es das? Exit Sub abfrage

Gibt es das? Exit Sub abfrage
11.04.2016 14:56:48
Benjamin
Hallo zusammen,
ich baue mir aktuell ein (für mich) Excel Monster auf.
nun bin ich an einem punkt wo ich nicht wirklich weiter komme.
ich habe einen Sub der Datums Berechnungen und Einfärbungen in 4 spalten durchführt.
Nun sollen 4 weitere spalten ähnlich behandelt werden aber mit der Verknüpfung ... wenn Sub 1 = Exit dann Sub 2 = go quasi.
ich hatte probiert diese bearbeitungsgänge in einem Sub laufen zu lassen nur hat er dabei immer Driss mit der Einfärbung gemacht.
lange rede kurzer sin gibt es so etwas wie eine "Exit Sub abfrage"?
Grüße benjamin

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gibt es das? Exit Sub abfrage
11.04.2016 15:14:31
UweD
Hallo
du kannst vor dem Exit eine Public Variable setzten und die im 2. Makro abfragen.
Hier mal ein Konstrukt.

Public Temp As Boolean
Sub Makro1()
Dim JaNein
JaNein = InputBox("Testen Exit Ja /nein", , "Ja")
If JaNein = "Ja" Then
Temp = True
Exit Sub
Else
Temp = False
End If
End Sub
Sub Makro2()
Dim Txt
If Temp = True Then
Txt = "mit "
Else
Txt = "ohne "
End If
MsgBox Txt & "Exit verlassen"
End Sub
Gruß UweD

AW: Gibt es das? Exit Sub abfrage
11.04.2016 15:41:44
Benjamin
Hallo Uwe,
danke für deine Antwort. Jedoch möchte ich das Makro 2 quasi damit starten (application.run) da es bis zu dem Zeitpunkt noch nicht aktiv war.
ich dachte das es ggf so geht:
If Range("G" & x) = "" Then
Application.Run ("Ex_Schutz")
Exit Sub
jedoch macht er so garnix mehr xD
leider habe ich deine variante nicht bei mir einbauen können...
ich poste mal meinen code wie ich es bisher gedacht hatte...
Sub BerechnungFälligkeiten()
'=============================================================================================== _
Dim x As Integer
Dim heute As Date
Dim faelligAM As Date
Dim faelligIN As Single
heute = Date 'nutzt das heutige datum zum berechnen der verbleibenden Monate zur Fälligeit
For x = 18 To 300 'Schleife für Zeile 18-150
'=============================================================================================== _
If Range("G" & x) = "" Then
Application.Run ("Ex_Schutz")
End If
'=============================================================================================== _
'
faelligAM = DateAdd("M", Range("AX" & x), Range("AY" & x))
Range("AZ" & x).Select
ActiveCell.FormulaR1C1 = faelligAM
'=============================================================================================== _
'=============================================================================================== _
'
faelligIN = DateDiff("m", heute, Range("AZ" & x))
Range("BA" & x).Select
ActiveCell.FormulaR1C1 = faelligIN
If faelligIN  24 Then
ActiveCell.Interior.ColorIndex = 0
End If
'=============================================================================================== _
Next x
End Sub

Sub Ex_Schutz()
Dim heute As Date
Dim y As Integer
Dim faelligAMEx As Date
Dim faelligINEx As Single
heute = Date 'nutzt das heutige datum zum berechnen der verbleibenden Monate zur Fälligeit
For y = 18 To 300 'Schleife für Zeile 18-150
If Range("G" & y) = "" Then Exit Sub
'Ex-Schutz
If Range("BB" & y) = "ja" Then
faelligAMEx = DateAdd("M", Range("BC" & y), Range("BD" & y))
Range("BE" & y).Select
ActiveCell.FormulaR1C1 = faelligAMEx
faelligINEx = DateDiff("m", heute, Range("BE" & y))
Range("BF" & y).Select
ActiveCell.FormulaR1C1 = faelligINEx
End If
If faelligINEx  24 Then
ActiveCell.Interior.ColorIndex = 0
End If
Next y
End Sub

so hängt er sich aber leider für eine gewisse zeit in einer schleife auf bis er wohl doch mal ein ende findet

Anzeige
offen..
11.04.2016 15:50:48
UweD

Sorry, aber...
11.04.2016 16:55:15
Michael
Benjamin,
...in Deinem Code könnte prinzipiell aufgeräumt werden, so wie ich das sehe.
Bezogen auf Deine Grundfrage: Warum lagerst Du überhaupt in eine andere Routine aus? Die zweite Routine macht doch nicht viel anderes, als Zellen färben; genauso wie auch die erste Routine. Es geht Dir also vermutlich darum unterschiedliche Zellfärbungen zu realisieren, bei fehlenden oder gegebenen Bedingungen - das könntest Du aber auch innerhalb einer Routine steuern, was ggf. sogar übersichtlicher wäre.
Besonders konfus wird es hier:
For x = 18 To 300 'Schleife für Zeile 18-150
If Range("G" & x) = "" Then
Hier prüfst Du in der ersten Routine die entsprechenden Zellen der Spalte G auf Leerwerte, nur um dann
For y = 18 To 300 'Schleife für Zeile 18-150
If Range("G" & y) = "" Then Exit Sub
in der zweiten Routine nochmal diese Prüfung durchzuführen, und beim Zutreffen aus der zweiten Routine auszusteigen.
Weiters bezweifle ich, dass eine Zählschleife zwingend notwendig ist, schon gar nicht aber, dass Du auch jedes Element (Zelle) hier immer zunächst auswählen musst. Die vielen ElseIfs sprechen auch nicht gerade für eine übersichtliche, nachvollziehbare Code-Struktur, deshalb schlage ich vor:
Beschreibe doch einmal konkret, ohne Bezug auf Deinen vorhandenen Code, welche Aufgabe ein Code in Deiner Mappe/Tabelle lösen soll, am besten gleich mit konkreten Bezügen (Tabellenblattnamen, Zellbereiche etc.) bzw. optimal mit Beispieltabelle. Dann können wir uns das hier evtl. von Grund auf anschauen!
LG
Michael

Anzeige
AW: Sorry, aber...
12.04.2016 13:16:53
Benjamin
hallo zusammen,
zuerst hatte ich beide schleifen vereint jedoch hat er dann bei der Einfärbung nicht das gemacht was er machen sollte.
aber hier mal das was ich vorhabe brauche.
Ich habe 2 unabhängige Prüfintervalle für Einrichtungen.
Nach der Berechnung der Fälligkeiten soll er mir diese farblich einfärben (Zellen).
dh. wie oben zusehen ist die Einfärbung in Abhängigkeit der noch verbleibenden Monate.
als ich diese beiden schleifen zusammen in einer hatte färbte er mir jedoch Zellen falsch ein und somit habe ich diese getrennt.
ich habe das jetzt jedoch so umgesetzt das ich die Aktualisierung der Fälligkeiten parallel ausführe.

Anzeige
AW: Gibt es das? Exit Sub abfrage
11.04.2016 16:37:51
Werner
Hallo Benjamin,
wenn ich dich richtig verstanden habe dann vielleicht so:
If Range("G" & x) = "" Then
Call Ex_Schutz
Else
'hier dein weiterer Code
Am Ende muss dann vor dem Next x noch ein End If rein.
Gruß Werner

AW: Gibt es das? Exit Sub abfrage
11.04.2016 17:04:19
Michael
Hi zusammen,
ich habe mal ein paar kleine Änderungen vorgenommen...
Option Explicit
Sub BerechnungFälligkeiten()
'=============================================================================================== _
Dim x As Long
Dim heute As Date
Dim faelligAM As Date
Dim faelligIN As Single
Dim farbe As Variant
heute = Date 'nutzt das heutige datum zum berechnen der verbleibenden Monate zur Fälligeit
For x = 18 To 300 'Schleife für Zeile 18-150
'=============================================================================================== _
If Range("G" & x) = "" Then Exit For
'=============================================================================================== _
'
faelligAM = DateAdd("M", Range("AX" & x), Range("AY" & x))
Range("AZ" & x).Value = faelligAM
'=============================================================================================== _
'
faelligIN = DateDiff("m", heute, Range("AZ" & x))
Range("BA" & x).Value = faelligIN
If faelligIN  6 Then
Range("BA" & x).Interior.Color = farbe
Else
Range("BA" & x).Interior.ColorIndex = farbe
End If
'=============================================================================================== _
Next x
Ex_Schutz
End Sub
Sub Ex_Schutz()
Dim heute As Date
Dim y As Long
Dim faelligAMEx As Date
Dim faelligINEx As Single
Dim farbe As Variant
heute = Date 'nutzt das heutige datum zum berechnen der verbleibenden Monate zur Fälligeit
For y = 18 To 300 'Schleife für Zeile 18-150
If Range("G" & y) = "" Then Exit Sub
'Ex-Schutz
If Range("BB" & y) = "ja" Then
faelligAMEx = DateAdd("M", Range("BC" & y), Range("BD" & y))
Range("BE" & y).Value = faelligAMEx
faelligINEx = DateDiff("m", heute, Range("BE" & y))
Range("BF" & y).Value = faelligINEx
End If
If faelligINEx  6 Then
Range("BF" & y).Interior.Color = farbe
Else
Range("BF" & y).Interior.ColorIndex = farbe
End If
Next y
End Sub

... aber mangels Daten nicht getestet, wobei Michael natürlich Recht hat: wozu überhaupt ZWEI Schleifen?
Schöne Grüße,
Michael
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige