Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Rücksprünge vermeiden

Forumthread: Rücksprünge vermeiden

Rücksprünge vermeiden
07.03.2025 14:06:04
Udo
Ich habe 15 fast gleiche Tabellenblätter, die aber noch zusätzlich Angaben benötigen wenn sie verwendet werden sollen.
Welche Tabellenblätter verwendet werden entscheide ich auf einem 16. Tabellenblatt, wenn in diesem entsprechende Zellen mit einem >x versehen werden, gelten sie als gewählt. Nun möchte ich mit einem Makro die Zellen abfragen, wenn ein >x eingetragen ist, soll das entsprechende Blatt aufgerufen werden, bearbeitet werden können. Danach durch klicken auf Schaltfläche die Eingaben bestätigt werden UND nun soll das Makro das nächste >x suchen und das nächste Blatt anwählen.

Ich hatte das durch Einzelmakros gelöst, Makro1 fragt ersten Wert ab, ist >x ruft das Makro das Blatt auf, nach den Eingaben klickt man auf die Schaltfläche >Weiter die dann Makro2 aufruft, Makro2 fragt den Wert ab, ist nichts vorhanden, ruft es Makro3 usw. Hat auch bis Makro5 geklappt, doch dann springen die Makros auf einmal Rückwärts, von 5 zu 4, von 4 zu 3, von 3 zu 2 und dann zur 1, dann geht es wieder vorn los und bleibt bei Makro3 stehen.

Wie kann ich dieses Rückwärts-Springen vermeiden ?
Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rücksprünge vermeiden
07.03.2025 14:14:56
UweD
Hallo


ganz klar. Der Fehler steckt in Zeile 47 deines Codes.


LG UweD
AW: Rücksprünge vermeiden
07.03.2025 14:25:13
Onur
Wenn Makro 1 Makro 2 aufruft und Makro 2 dann Makro 3 aufruft, passiert folgendes:
Makro1 ruft Makro2 auf
Makro 2 ruft Makro 3 auf
Makro 3 wird beendet und springt zurück auf Makro 2
Makro 2 wird beendet und springt logischerweise zurück auf Anfang - und das ist Makro 1.
Das ist völlig normal - Wenn du es anders haben willst, musst du es einfach anders programmieren.
Anzeige
AW: Rücksprünge vermeiden
07.03.2025 14:32:25
Udo
@ Omur

schön, jetzt hast Du mir erklärt warum es so ist, schön wäre nun wenn Du auch erklären würdest wie denn das anders programmieren geht.

Ich habe ein Anfangsmakro, das bei Nichterfüllung der Bedingung das nächste aufruft.
In jedem Arbeitsblatt rufe ich das nächste auf.

Und wie muss ich jetzt programmieren, das es anders wird ?
Anzeige
AW: Rücksprünge vermeiden
07.03.2025 14:34:24
Onur
Woher soll ich das wissen, wie du es ANDERS programmieren könntest? Ich weiss ja nicht einmal, wie du es JETZT programmiert hast, da du ja keine Datei gepostet hast....
AW: Rücksprünge vermeiden
07.03.2025 15:07:09
Onur
Poste die (Beispiels-) Datei und wir schauen weiter...
AW: Rücksprünge vermeiden
07.03.2025 15:18:49
GerdL
Moin Udo!

So z.B.:
Sub Unit()


Static a As Long
Dim zeile As Long

a = a + 1

For zeile = a To 16
If Worksheets("Tabelle16").Cells(zeile, 2) = "x" Then
Worksheets(Worksheets("Tabelle16").Cells(zeile, 1).Value).Activate: a = zeile: Exit For
End If
Next
Worksheets("Tabelle16").Activate

End Sub

Sub Weiter()
Call Unit
End Sub


Gruß Gerd
Anzeige
AW: Rücksprünge vermeiden
07.03.2025 18:28:48
Piet
Hallo

@Gerd schöner Code, ich glaube mit zwei kleinen Schönheitsfehlern. Bei -Exit For- wird wieder Sheets(16). aktiviert!
Was ist, wenn die Zahl 16 erreicht wurde? Wer setzt a wieder auf 1 zurück?? - Ich habe ihn mal etwas geändert.

mfg Piet

Sub Unit()

Static a As Long
Dim zeile As Long

a = a + 1 'was geschieht bei 16?
If a >= 16 Then a = 1

For zeile = a To 16
If Worksheets("Tabelle16").Cells(zeile, 2) = "x" Then
Worksheets(Worksheets("Tabelle16").Cells(zeile, 1).Value).Activate
a = zeile: Exit Sub
End If
Next
Worksheets("Tabelle16").Activate
End Sub
Anzeige
AW: Rücksprünge vermeiden
07.03.2025 18:34:54
Piet
Nachtrag

statt 15 einzelne Makros weisst du allen Button das Makro "Unit" zu. Oder beliebiger anderer Makroname!

Mfg Piet
AW: Rücksprünge vermeiden
07.03.2025 18:42:11
GerdL
Hi Piet,

ja, danke fürs Mitdenken.

Gruß Gerd
AW: Rücksprünge vermeiden
10.03.2025 07:50:43
Udo
Sub MasteBestimmen()
'
' MasteBestimmen Makro



'
Sheets("Multiprojekte").Select
Range("K23").Select
Dim Muss1 As String
Muss1 = Range("K23")
If Muss1 = "0" Or Muss1 = "" Then Call MasteBestimmen2

If Muss1 > "0" Or Muss1 > "" Then
Sheets("Mast Grube Multi3,5P").Select
Range("BP6").Select
End If
Exit Sub
End Sub

Sub MasteBestimmen2()
'
' MasteBestimmen Makro
'
Sheets("Multiprojekte").Select
Range("AB23").Select
Dim Muss2 As String
Muss2 = Range("AB23")
If Muss2 = "0" Or Muss2 = "" Then Call MasteBestimmen3

If Muss2 > "0" Or Muss2 > "" Then
Sheets("Mast Grube Multi3,5B").Select
Range("BP6").Select
End If
Exit Sub
End Sub
Sub MasteBestimmen3()
'
' MasteBestimmen Makro
'
Sheets("Multiprojekte").Select
Range("AN23").Select
Dim Muss3 As String
Muss3 = Range("AN23")
If Muss3 = "0" Or Muss3 = "" Then Call MasteBestimmen4

If Muss3 > "0" Or Muss3 > "" Then
Sheets("Mast Grube Multi3,5lB").Select

Range("BP6").Select
End If
Exit Sub
End Sub

Ich habe das hier schon mal eingefügt, nur sehen kann ich das hier nicht und ganz ehrlich, das mit >unit verstehe ich nicht, könnt Ihr mir das bitte mal erklären, Danke
Anzeige
AW: Rücksprünge vermeiden
11.03.2025 07:17:22
Udo
Ich hatte Euch nach einer einfachen Lösung gefragt.
Danke für die vielen Lösungsvorschläge, doch eine wirklich einfache Lösung habe ich nun mit Suchen in einem anderen Forum gefunden.
Zeile ein >End einfügen und das hin und her Gespringe war vorbei
AW: Rücksprünge vermeiden
10.03.2025 08:25:18
Udo
Nun ist meine Programmierung ja endlich hier auch zu sehen. Gibt es denn keinen Weg, in meinen kurz Programmen was einzusetzen das die Rücksprünge vermieden werden ?
Anzeige
AW: Rücksprünge vermeiden
07.03.2025 14:22:09
daniel
gute Frage.
um die zu beantworten müssten wir wissen, was du programmiert hast.
zeige uns den Code, am besten zusammen mit der Datei, damit wir den Code auch testen können.
ich meine , wenn dein Auto nicht richtig funktioniert, dann bringst du ja auch dein Auto mit in die Werkstatt und kommst nicht zu Fuss, oder?
Gruß Daniel
Anzeige
AW: Blattauswahl - Musterdatei - Ergänzung
10.03.2025 14:14:48
GerdL
Da fehlte noch Codezeile
Sub Unit()

Static a As Long
Dim zeile As Long
If ActiveSheet.Name = "Uebersicht" Then a = 0
a = a + 1
If a >= 16 Then a = 1

For zeile = a To 16
If Worksheets("Uebersicht").Cells(zeile, 2) = "x" Then
Worksheets(Worksheets("Uebersicht").Cells(zeile, 1).Value).Activate
a = zeile: Exit Sub
End If
Next
Worksheets("Uebersicht").Activate
End Sub

Gruß Gerd
Anzeige
AW: Rücksprünge vermeiden
10.03.2025 12:12:21
Udo
Die Datei umfast ca. 90 Tabellenblätter, 15 davon beziehen sich auf die Masten, die Blätter dazu stehen am Ende der Datei (ganz links)
ich habe nun Euer >Unit> Programm versucht auf die Anwendung anzupassen:
Sub Unit()

Sheets("Multiprojekte").Select
Static a As Long
Dim zeile As Long
a = 22
a = a + 1 'was geschieht bei 16?
If a >= 27 Then a = 22

For zeile = a To 27
If Worksheets("Multiprojekte").Cells(zeile, 11) > "" Then
Call MasteBestimmen
Worksheets(Worksheets("Multiprojekte").Cells(zeile, 11).Value).Activate
a = zeile: Exit Sub

ElseIf Worksheets("Multiprojekte").Cells(zeile, 28) > "" Then
Worksheets(Worksheets("Multiprojekte").Cells(zeile, 28).Value).Activate
a = zeile: Exit Sub

ElseIf Worksheets("Multiprojekte").Cells(zeile, 40) > "" Then
Worksheets(Worksheets("Multiprojekte").Cells(zeile, 40).Value).Activate
a = zeile: Exit Sub
End If
Next
Worksheets("Multiprojekte").Activate
End Sub

es arbeitet bis zur markierten Zeile, wenn ein Wert in der Zelle steht ruft es das Tabellenblatt auf und geht dann in die nächste Zeile, von da ruft es ein Tabellenblatt auf das ganz vorn in der Datei steht, aber gar nichts mit der Berechnung zu tun hat, dessen BlattName in dem ganzen Programm nicht auftaucht. Es wird aufgerufen durch die Zeile: Worksheets(Worksheets("Multiprojekte").Cells(zeile, 11).Value).Activate

Weiter oben stehen meine Programmversuche, die ja eigentlich klappen würden, wenn es keine Rücksprünge gäbe
Anzeige
AW: Rücksprünge vermeiden
10.03.2025 13:22:18
Onur
Irgendwie sehe ich den Sinn deiner Makros nicht.
Wieso heissen die denn "MasteBestimmen" ? Da wird doch nirgends irgendwas "bestimmt" oder "berechnet" - da wird nur überprüft, ob da in irgend einer Zelle nix drin steht, wenn ja wird irgenwohin gesprungen und wenn nicht, irgendwoanders hin... Aber wozu?
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18