Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1236to1240
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 Syntax einer variablen Sprungmarke

GoTo Syntax einer variablen Sprungmarke
Jörg-HH
Hallo zusammen
in diesen Schnipsel
For Each objName In ThisWorkbook.Names
For i = 100 To 305
If Left(objName.Name, 8) = "A_ber" & i Then
If Not Intersect(Target, Range(objName.Name)) Is Nothing Then
strName = objName.Name
MsgBox strName
GoTo strName
wollte ich mit Hilfe von GoTo strName einbauen, daß nun nach A_berxxx gehüpft wird - diverse im Code vergesehene Sprungmarken. Geht aber nicht :-(
Was muß denn hinter GoTo stehen, damit strName als das interpretiert wird, was in der MsgBox anstandslos angezeigt wird?
Grüße - Jörg

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: GoTo Syntax einer variablen Sprungmarke
27.11.2011 19:02:26
Josef

Hallo Jörg,
das geht nicht! Abgesehen davon sin Sprungmarken, außer bei der Fehlerbehandlung, zu 100% überflüssig und machen den Code unübersichtlich.
Was willst du den erreichen?

« Gruß Sepp »

Lange Change
27.11.2011 19:13:22
Jörg-HH
Hi Sepp
Ich habe eine viele hunderte Zeilen lange Worhsheet_Change (mit Leerzeilen über tausend), die bei jeder Eingabe in dem Blatt durchrattert, was ja unnötig Zeit kostet - stammt noch aus meinen Ur-Anfängen mit VBA. Mittlerweile erkenne ich das und möchte mit Intersect den ganzen Kram gliedern. Also wenn ich in einem bestimmten Bereich eine Eingabe gemacht habe, kann ich ja danach gleich ans Ende springen und spar die sinnentleerten Ifs und Schleifen dazwischen.
Umgekehrt (und daraus ist das Beispiel) kann ich ja gleich zu Beginn klären, in welchem Bereich ich geklickt habe, um was zu schreiben, und im Code an die Stelle springen, wo das betreffende Detail steht - so würde ich auch alle vorhergehenden Deteils überspringen.
Jörg
Anzeige
AW: Lange Change
27.11.2011 19:16:49
Josef

Hallo Jörg,
und trotzdem braucht man dazu keine einzige Sprungmarke!

« Gruß Sepp »

statt Sprungmarke
27.11.2011 19:41:43
Jörg-HH
Hi Sepp
das will ich ja gern glauben - aber wie geht es dann statt dessen?
Jörg
AW: statt Sprungmarke
27.11.2011 19:57:18
Josef

Hallo Jörg,
ohne deinen Code zu sehen, ist es schwer darauf zu antworten.

« Gruß Sepp »

Anzeige
Codebeispiel
27.11.2011 20:27:24
Jörg-HH
...naja, den Code kann ich nicht posten, und die Menge sowieso nicht. Aber das Ganze ist zu einem goßen Teil eine Aneinanderreihung von sowas hier:
If Target.Address = Range("KdBonusProz").Address Then
With Target.Worksheet
.Range("KdBonusWährg, KdBonusTermin").ClearContents
End With
End If
If Target.Address = Range("KdBonusWährg").Address Then
With Target.Worksheet
.Range("KdBonusProz").ClearContents
.Range("KdBonusTermin").Value = "Auswahl..."
End With
End If
Diverse Schleifen sind auch noch drin und einige Details, di in anderen Blättern was bewirken
Jörg
Anzeige
AW: Codebeispiel
27.11.2011 21:40:11
Josef

Hallo Jörg,
also Sprungmarken kann ich da keine erkennen und wenn du die sinnlosen With-Rahmen raus nimmst, dann werden es gleich ein paar hundert Zeilen weniger, Target.Worksheet ist auch umsonst und wenn du mit If-Then-ElseIf-Then-End if arbeitest, dann werden keine unnötigen If-Abfragen durchlaufen, obwohl das kaum einen Geschwindigkeitsvorteil bringen wird.
Sonst kann ich zu dem Code-Fragment nicht viel sagen
With Target
  If .Address = Range("KdBonusProz").Address Then
    Range("KdBonusWährg, KdBonusTermin").ClearContents
  ElseIf .Address = Range("KdBonusWährg").Address Then
    Range("KdBonusProz").ClearContents
    Range("KdBonusTermin").Value = "Auswahl..."
  End If
End With


« Gruß Sepp »

Anzeige
..alles klar...
27.11.2011 22:09:49
Jörg-HH
...danke, Sepp - verstanden.
werd mich also mal ans Aufräumen machen :-)
Schönen abend!
Jörg
Nur der Vollständigkeit halber, ...
30.11.2011 02:34:44
Luc:-?
…Jörg,
das, was du ursprgl vorhattest, macht man mit On ausdruck GoTo kommagetrenntesprungmarkenliste. Mit ausdruck kannst du die ReihenfolgeNr der jeweils gewünschten Sprungmarke berechnen. Bei 0 wird in der nächsten PgmZeile nach der Anweisung fortgesetzt.
Gruß Luc :-?
AW: Nur der Vollständigkeit halber, ...
30.11.2011 12:18:22
Jörg-HH
Hi Luc
das ist ja interessant... magst du mir dazu mal ein Beispiel geben? Ich kann mir das, was in "ausdruck" stehen soll, nicht recht vorstellen.
Nehmen wir mal an, ich habe 5 Bereiche Bereich1 bis Bereich5. In welchem ich klicke, erkunde ich mit Intersect...Bereich+i. Wenn ich dann Sprungmarken setze (zB Bereich1: , Bereich2: usw.) ... was muß dann in Ausdruck stehen?
Gruß - Jörg
Anzeige
AW: Nur der Vollständigkeit halber, ...
30.11.2011 17:42:36
Josef

Hallo Jörg,
bei Excel gibt es auch eine Hilfe! Schau einfach bei "GoTo" nach, ist aber wie bereits gesagt, unnötig und außerdem ganz schlechter Programmierstil.

« Gruß Sepp »

Dem 'schlechten PgmierStil' wage ich zu ...
30.11.2011 18:45:09
Luc:-?
…widersprechen, Sepp,
das hängt ganz von der jeweiligen Situation ab! Das so zu pauschalisieren ist quasi eine Mode-Erscheinung, die mit der Entwicklung der KI-Sprachen zusammenhängt, bspw Lisp u. Prolog. Auch dBase hatte das schon in seiner DB-Sprache versucht, wenn ich mich recht erinnere. Aber auf dem Niveau der Erstgenannten bewegen wir uns mit VBA bei weitem nicht… ;-)
Gruß Luc :-?
Anzeige
Wenn i mit der Abfolge der Bereiche ...
30.11.2011 18:33:42
Luc:-?
…übereinstimmt, Jörg,
dann kannst du für ausdruck einfach nur i schreiben. Die Sprungmarkenliste führt dann die den die jeweiligen Bereiche behandelnden CodeAbschnitten zugeordneten Sprungmarken in der Reihenfolge der für i zu erwartenden Werte auf. Ist i=0 wird mit der CodeZeile nach dieser bedingten Sprunganweisung fortgesetzt. Am Ende der den Bereichen zugeordneten Codeabschnitte muss dann natürlich auch eine (unbedingte) Sprunganweisung stehen. Diese Unterscheidung zwischen bedingten und unbedingten Sprunganweisungen ist uralt — habe ich schon vor 40 Jahren gelernt! Gleiches gibt's auch für UPgm-Sprünge: On ausdruck GoSub kommagetrenntesprungmarkenliste (bedingt) neben GoSub sprungmarke (unbedingt). Hier wird dann allerdings am Ende des UPgms mit Return zurückgekehrt, was man allerdings auch von Bedingungen, aber das ganz klassisch mit If … Then … Else bzw Select Case, abhängig machen kann.
Ein Bsp für eine etwas komplexere ausdruck-Notation ist folgende Situation:
Man will das Ergebnis einer MsgBox-Abfrage auswerten. Der besseren Übersichtlichk halber sollte dafür eine Variable deklariert wdn, bspw Dim mbx As vbMsgBoxResult. Wir nehmen nun folgd Abfrage an …
mbx = MsgBox("Wiollen Sie das wirklich tun?", vbQuestion + vbYesNoCancel, "Alles Löschen")
Dem kann dann eine PgmVerzweigg mittels bedingten Sprungs folgen …
On (vbNo - mbx) Mod 3 GoTo lo, ab
wobei lo die Sprungmarke für den Lösch- und ab die für den Nutzerabbruchsabschnitt ist. Bei Nein wird in der nächsten Zeile fortgesetzt.
Es ist natürl richtig, dass durch das Überstrapazieren von Sprunganweisungen sog Spaghetti-Code entstehen kann, aber das ist ein Anfängerfehler! Wer in einer Prozedur von 50-100 Zeilen Länge die Übersicht verlieren will, muss schon gewaltig „rumhüpfen”. Und natürl kann man erst recht besagte Übersicht verlieren, wenn sich If … Then … Else-Konstrukte o.ä. über Dtzde CodeZeilen hinziehen. Da sind Sprünge mitunter übersichtlicher. Allerdings gab's dafür früher 'ne (Interpreter-)Regel — möglichst nur vorwärts und nur ausnahmsweise zurück springen. Aber das muss heutzutage (bzw Vorkompilierung) nicht unbedingt mehr gelten.
Die Ansicht, dass man auch (fast) ganz ohne Sprünge auskommen kann, ist der Entwicklung von KI-Sprachen geschuldet, die das zwingend müssen, weil sie kontext-interpretierend konstruiert sind. Naja, schön, Bücher lesen kann die KI also schon, aber (Gedanken-)Sprünge sind ihr unbekannt! Das ist wohl das irrationale Moment, das aus Maschinen Menschen macht… ;-)
Grüße, Luc :_?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige