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

GoTo funktioniert nicht

GoTo funktioniert nicht
18.03.2016 11:49:43
Fred
Hallo zusammen,
ich habe ein Problem bei einer GoTo Anweisung.
Wenn im Sheet "eP gK 1" in Zelle AB3 der Wert 1 steht, soll er die Sprungmarke "Fisch" ausführen. Wenn in der gleichen Zelle der Wert 2 steht, soll die Sprungmarke "Hamster" ausgeführt werden.
Aber egal ob eine 1 oder eine 2 in der Zelle steht, er führt immer die Sprungmarke "Hamster" aus.
Was mache ich falsch? :-(
Folgenden Code habe ich ausprobiert:
Sh3 = Array("eP gK 1")
For Each I In Sh3
myNum = Range("AB3")
If myNum = "1" Then
GoTo Fisch
Else
GoTo Hamster
End If
Next I
Fisch:
'Prüft vor dem Drucken ob die Zellen "geperrt" enthalten
Sh3 = Array("eP gK 1")
For Each I In Sh3
If Range("AE2") = "gesperrt" Then
MsgBox "Heute ist Sonntag"
Cancel = True
Exit Sub
End If
Next I
For Each I In Sh3
If Range("AB2") = "gesperrt" Then
MsgBox "Heute ist Montag"
Cancel = True
Exit Sub
End If
Next I
Hamster:
'Prüft vor dem Drucken ob die Zellen "geperrt" enthalten
Sh4 = Array("eP gK 2")
For Each I In Sh4
If Range("AE2") = "gesperrt" Then
MsgBox "Heute ist Dienstag"
Cancel = True
Exit Sub
End If
Next I
For Each I In Sh4
If Range("AB2") = "gesperrt" Then
MsgBox "Heute ist Mittwoch"
Cancel = True
Exit Sub
End If
Next I
Hat jemand eine Idee?
Grüße
Fred

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
1 ist nicht gleich "1" !! (owT)
18.03.2016 12:13:16
EtoPHG

AW: 1 ist nicht gleich "1" !! (owT)
18.03.2016 12:29:52
Fred
Hallo EtoPGH,
auch wenn ich ein Wort nutze oder die Zahl in "" setzte oder nicht...
klappt dennoch nicht.
Es wird immer die Sprungmarke "Hamster" angesprochen.
Habt Ihr noch eine andere Idee?
Grüße
Fred

was bitte bedeutet das?
18.03.2016 12:42:58
Michael
Hi Fred,
was soll denn das bedeuten:
Sub test()
Sh3 = Array("eP gK 1")
For Each I In Sh3
MsgBox I
Next
End Sub
Du übergibst auch mit Array nur EINEN String an Sh3, nämlich "eP gK 1".
Vielleicht lädst Du eine Beispieldatei hoch, oder zumindest das komplette Makro, damit man sieht, welche Variablen Du wie deklariert hast: Du HAST sie doch deklariert?!
Im Übrigen versuch mal:
myNum = Range("AB3").Text
Schöne Grüße,
Michael

Anzeige
AW: GoTo funktioniert nicht
18.03.2016 12:42:11
Daniel
Hi
naja, Hamster steht nach Fisch.
wenn das Makro zu Fisch springt, führt es allen darunter liegenden Code aus, also auch Hamster.
wenn Hamster nicht ausgeführt werden soll wenn Fisch ausgeführt wurde, muss vor Hamster ein EXIT SUB stehen.
oder du Programmierst ohne Gotos, das ist eh die besser Variante.
Gotos sind in VBA ungefähr so aktuell wie Breitcord-Schlaghosen. (dh man hat mit Gotos programmiert, als Breitcord-Schlaghosen modisch angesagt waren:
If myNum = "1" Then
hier der code der ausgeführt werden soll, wenn myNum = 1 ist
Else
hier der Code der ausgeführt werden soll, wenn myNum nicht = 1 ist
End If
Gruß Daniel

Anzeige
AW: GoTo funktioniert nicht
18.03.2016 12:45:14
UweD
Hallo
wird auch das richtige Blatt benutzt? (Wenn nicht angegeben, wird das aktuelle benutzt.
Hier mal auf "Tabelle1" geändert.
Sub hfhfh()
Sh3 = Array("eP gK 1")
With Sheets("Tabelle1")
For Each i In Sh3
myNum = .Range("AB3")
If CInt(myNum) = 1 Then
GoTo Fisch
Else
GoTo Hamster
End If
Next i
Fisch:
'Prüft vor dem Drucken ob die Zellen "geperrt" enthalten
'Sh3 = Array("eP gK 1") führt zu Fehler, wenn nochmal zugewiesen wird
For Each i In Sh3
If .Range("AE2") = "gesperrt" Then
MsgBox "Heute ist Sonntag"
Cancel = True
Exit Sub
End If
Next i
For Each i In Sh3
If .Range("AB2") = "gesperrt" Then
MsgBox "Heute ist Montag"
Cancel = True
Exit Sub
End If
Next i
Hamster:
'Prüft vor dem Drucken ob die Zellen "geperrt" enthalten
Sh4 = Array("eP gK 2")
For Each i In Sh4
If .Range("AE2") = "gesperrt" Then
MsgBox "Heute ist Dienstag"
Cancel = True
Exit Sub
End If
Next i
For Each i In Sh4
If .Range("AB2") = "gesperrt" Then
MsgBox "Heute ist Mittwoch"
Cancel = True
Exit Sub
End If
Next i
End With
End Sub
Gruß UweD

Anzeige
AW: GoTo funktioniert nicht
18.03.2016 16:13:22
Fred
Hallo zusammen,
vielen Dank für eure Ratschläge, komme damit aber nicht wirklich zurecht...
ich erkläre nochmal, was ich genau will. Ich hoffe ihr habt genug Ausdauer zum lesen :-)
Einführung Teil 1
die Arbeitsmappe besteht aus insgesamt 16 Sheets.
Davon sind 4 Sheets (ich nenne diese mal "Hauptsheets") und jeweils immer 3 Sheets (ich nenne diese Mal "Nebensheets") den Haupsheets untergeordnet.
Aussehen würde das in der Tabellenleiste unten z. B. so:
"erstes Auto", "eA gK 1", "eA gK 2", "eA gK 3", "zweites Auto", "zA gK 1", "zA gK 2", zA gK 3", "drittes Auto", "dA gK 1", "dA gK 2", "dA gK 3", "viertes Auto", "vA gK 1", vA gK 2", "vA gK 3"
Wenn jetzt Eingaben in 3 bestimmte Bereiche der Hauptsheets gemacht wird, werden diese Eingaben auf die Nebensheets übernommen. Jeder Bereich auf den Hauptsheets ist einem Nebensheet zugeordnet.
Ich schreibe also einmal und habe jeweils immer zweimal die Angaben.
In den Nebensheets wird nicht geschrieben, diese sind nur zum Drucken!
Einführung Teil 2:
Vor dem Drucken soll geprüft werden, ob:
1. Alle nötigen Angaben im Hauptsheet gemacht wurden. Wenn NEIN, bleibt der Inhalt der Zelle "AB2" in jedem Nebensheet "gesperrt". Wenn Ja dann "Druck frei"
und
2. Ob zuvor schon mal diese Nebensheet gedruckt wurde. Wenn NEIN, beleibt der Inhalt in Zelle "AE2" in jedem Nebensheet "gesperrt". Wenn Ja dann "frei"
Sollte eines von beiden "gesperrt" sein, ist ein Drucken des jeweiligen Nebensheets nicht möglich.
Es erfolgt der Abbruch des Drucks und es kommt eine MsgBox die darauf hinweist, welcher Bereich auf welchem Hauptsheet nicht korrekt beschriftet wurde, oder das schonmal dieses Nebensheet gedruckt wurde.
Das ist wichtig, damit der Bediener weis wo er nach dem "Fehler" gucken muss.
Nun das Eigentliche Problem:
Es ist Gesetz, das ALLE Sheets hintereinander beschriftet oder gedruckt werden. Sie bauen also aufeinander auf. Die Arbeitsmappe "lebt" und es wird immer irgendwann mal ein weiterer Bereich der Hauptsheets ausgefüllt.
Es wird aber nicht immer ein Nebensheet gedruckt!
Jetzt könnte also z. B. das Nebensheet "eA gK 1" nicht gedruckt wurde, weil die Angaben im Hauptsheet die Nötigkeit des Drucks nicht aussagen. Die Arbeitsmappe wird geschlossen irgendwann wieder geöffnet und ein neuer Bereich beschrieben. Jetzt muss hier also geprüft werden ob z. B. im Nebensheet "eA gK 2" alle Angaben vorhanden sind.
Da das alles unter der Prozedur Before_Print läuft, muss er also die Prüfung für den oder die vorherigen Sheets "überspringen", damit nicht immer der Hinweis kommt, das ein Fehler in dem ersten Nebensheet ist, obwohl das gar nicht der Wahrheit entspricht.

Habe das mit GoTo und der 1 in der Zelle ("AB3") versucht (erstmal nur für die ersten beiden Nebensheets) klappt aber nicht. er geht direkt zum zweiten Nebensheet und gibt dafür die Massage, egal ob die 1 oder nix in der Zelle ist.
Folgenden Code nutze ich:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Application.ScreenUpdating = False
Sh3 = Array("eP gK 1")
For Each I In Sh3
myNum = Range("AB3")
If myNum = 1 Then
GoTo erste_gelbe_Karte
Else
GoTo zweite_gelbe_Karte
End If
Next I
erste_gelbe_Karte:
'Prüft vor dem Drucken ob die Zellen "geperrt" enthalten
Sh3 = Array("eA gK 1")
For Each I In Sh3
If Range("AE2") = "gesperrt" Then
MsgBox "..."
Cancel = True
Exit Sub
End If
Next I
For Each I In Sh3
If Range("AB2") = "gesperrt" Then
MsgBox "..."
Cancel = True
Exit Sub
End If
Next I
zweite_gelbe_Karte:
'Prüft vor dem Drucken ob die Zellen "geperrt" enthalten
Sh4 = Array("eA gK 2")
For Each I In Sh4
If Range("AE2") = "gesperrt" Then
MsgBox "..."
Cancel = True
Exit Sub
End If
Next I
For Each I In Sh4
If Range("AB2") = "gesperrt" Then
MsgBox "..."
Cancel = True
Exit Sub
End If
Next I
......
Ich habe die anderen Nabensheets im Code hier weggelassen, damit die Nachricht nicht aus sämtlichen Nähten platzt :-) geht aber so weiter...
Im Grundsatz geht es immer so weiter ... wenn also die Zelle AB3 jedes Nebensheets nicht die 1 anzeigt, soll er immer das nächste Nebensheet prüfen.
Findet er ein Nebensheet mit einer 1, prüft er die Zelle AB2 und AE2 dieses Sheets auf "gesperrt". Steht dort nicht "gesperrt", druckt er dieses Nebensheet.

So! Es freut mich schon mal, das du genug Ausdauer hattest den ganzen Text zu lesen :-)
Ich hoffe jeder weis jetzt was ich genau will :-)
Viele Grüße
Fred

Anzeige
Der PgmCode ist immer noch irrwitzig, ...
19.03.2016 04:25:13
Luc:-?
…F.F.,
Sh3 enthält nur 1 Element (nur zum Test? → ganz schlecht, mind 2 verwenden, dann merkst du auch das GoTo kontra­produktiv ist!), warum dann For Each? Mit GoTo wird die Schleife endgültig verlassen, mit GoSub (Return am UPgm-Ende nicht vergessen!) nicht. Für ein endgültiges vorzeitiges Verlassen einer For-Schleife verwendet man Exit For (dadurch bleibt die LaufVariable auf dem letzten Stand, was abgefragt wdn kann; ansonsten ist sie bei Zählern >EndeWert bzw bei ObjektVariablen Nothing, bei Variant Empty).
Außerdem kann hier das ganze If…Else-Konstrukt leicht durch einen bedingten SprungBefehl ersetzt wdn → On Abs(bedingung) GoTo marke1, marke2, … bzw On Abs(bedingung) GoSub marke1, marke2, …. Wenn Abs(bedingung) 0 ergibt, wird ohne Sprung fortgesetzt.
Merke: Wenn man schon SprungAnweisungen benutzt, sollte man sich auch damit auskennen!
Ich habe aber nicht vor, dir dein Pgm zu schreiben! Außerdem solltest du zur Code-Darstellung die <pre>-HTML-Tags benutzen! Dafür gibt's auch einen Button im Kopf des Frage/Antwort-Formulars.
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …

Anzeige
Beispieldatei?
20.03.2016 16:31:30
Michael
Hallo Fred,
ohne Beispieldatei ist die Bearbeitung völlig hoffnungslos!
Das Prinzip ist ja einigermaßen verständlich, aber es ist völlig unklar, wann was wo passiert - und von welchem Blatt aus.
Die anderer Geschichte ist, daß Du Hilfe suchst, aber unsere Zeit ist zu kostbar, um komplette Datein nachzubasteln: abgesehen davon ist bei "VBA bescheiden" zu erwarten, daß Du die Lösung in einer von uns erstellten Datei nicht in Deine Datei übernehmen kannst. Das wiederum würde zu vermeidbaren Rückfragen führen.
Schöne Grüße,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige