GoTo <Zeilennummer> im VBA
Aus der VBA-Hilfe-Datei:
GoTo-Anweisung
Filialen bedingungslos auf eine angegebene Zeile innerhalb einer Prozedur.
Syntax
Springen _Linie_
Erforderlichen Linie argument kann eine beliebige zeilenmarke oder Zeilennummer.
Bemerkungen
Springen kann Zweig nur zu Zeilen innerhalb der Prozedur, in dem es erscheint.
Meine Frage ist, wie kann ich den Sprung zu einer Zeilennummer mit GoTo
? (Ich weiß, wie zu springen, um ein Etikett.)
(Anmerkung: ich Frage das für Neugier Willen. Ich habe nicht die Absicht, tatsächlich mit GoTo
diese Weise.)
I will not accept or upvote answers that try to get around things by labelling the individual lines with their line numbers
nun, das ist genau, wie es geht! @TomCollins hat, Ihre Antwort 🙂Versuchen Sie, die "was wäre wenn..." - Ansatz zur Beantwortung dieser Frage. Stell dir vor, es unterstützt hat, gerade auf dem Sprung zur N-TEN Zeile. Was würde passieren, wenn Sie das hinzufügen von 1 Zeile, noch eine leere Zeile irgendwo oben, oder einmal versehentlich Hinzugefügt? Der gesamte code-Logik geht an pot.
Goto
s kann schwierig sein, zu Folgen, code flow, geschweige denn, wenn Sie ' re gehen, um nicht bestimmte Orte.Bitte stoppen tagging-VBA-Fragen wie VB6. VB6-Programmierer nicht wirklich Pflege über Excel Makros.
InformationsquelleAutor TheIronKnuckle | 2013-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich verstehe Ihre Abneigung gegen die Antwort "starten Sie die Zeile mit einer Zeilennummer", aber Sie können nicht argumentieren mit Fakten. Das ist genau das, was Sie bedeuten.
Die syntax von VBA/VB6 ist konzipiert rückwärts-kompatibel mit der syntax von QuickBasic, und, bevor, die mit der syntax von GW-Basic/MS-Basic, die Termine in den späten 1970er Jahren und noch früher: die original-Dartmouth-BASIC-Sprache erstellt wurde, in den 60er Jahren.
In MS-Basic, wie in jeder anderen Basic-Implementierung der Epoche, jede Zeile, die Sie Hinzugefügt, um ein Programm zu starten, mit einem Zeilennummer. Die Nummer der Zeile, erzählte der Basic-interpreter zwei Dinge: a) dass Sie waren Speicherung der Linie (sonst der interpreter ausgeführt würde sofort), und b) an welcher Stelle des Programms die Linie gehörte. Warum etwas tun, so Arkan? denn wenn die Grundlegenden erfunden wurde, war es soll interaktiv sein, in einer Welt, wo die einzige form der Interaktivität wurde ein command-line-Eingabeaufforderung auf einem Fernschreiber-Stil drucken terminal.
Und es gab keine Etiketten.
Einem typischen Basic-Sitzung könnte so ausgesehen haben, wo
>
steht für ein Kommando-Prozessor-Eingabeaufforderung (dies ist, aber nahe genug, um, wie es funktionierte). Denken Sie daran: es gibt keine cursor-Tasten oder Bildschirme. Sie Tippen auf einer Schreibmaschine - mit einer Rolle von Papier anstelle von einem Bildschirm - und die Schreibmaschine, antwortet auf Sie zurück, indem Sie Druck auf das Papier!:Primitiv? Vielleicht, aber irgendwo muss man anfangen.
Damals, Sie immer verwendet GOTO indem Sie die Nummer der Zeile, wo man wollte den code zu springen. Es war nur, wie es funktionierte. Zum Beispiel:
QuickBasic war eine erweiterte version des Basic von Microsoft veröffentlicht, unterstützt Optional die Kompilierung in ausführbaren Dateien, anstatt läuft dann in den interpreter interaktiv. Neben anderen Verbesserungen, auch hat diese zwei Funktionen:
Da lief es im Vollbildmodus mit einem voll ausgestatteten GUI-text-editor, es brauchte keine Zeilennummern zu bestimmen, wo jede neue Zeile gegangen; Sie hat sich gerade der cursor eingegeben und: traditionelle Linie zahlen wurden jetzt optional. In der Tat, Sie waren entmutigt, weil in einer full-featured-editor, den Sie gerade in den Weg kam. Aber Sie konnte nicht einfach entfernen, weil Sie so zentral sind, um GRUNDLEGENDE Kompatibilität, so wurden Sie noch unterstützt. Und Sie sind immer noch, auch in VBA.
Da Sie nicht wollen, Sie zu verwenden von Zeilennummern, die Sie benötigten eine alternative für die Befehle, die erforderlich sind Zeilennummern, die als Ziele, wie
GOTO
. Sie durften zum Platz Linie Beschriftungen, die verwendet werden könnten, die Ziele für SPRINGEN, etc.So, sehen Sie, dass die Zeilennummern sind nicht nur "line labels aus Ziffern". Sind Sie tatsächlich eine alternative syntax, die eingehalten wurde für die Kompatibilität mit älteren Versionen der Sprache.
Das ist es. Die Hilfe-Datei ist einfach, erzählen Sie über die "moderne" syntax von GOTO (mit Beschriftungen), und dass - wenn Sie wirklich wollen - Sie können weiterhin die legacy-syntax mit Zeilennummern und legacy GOTO syntax, die erfunden wurde, in die Mitte 1960.
Nun, das nimmt mich zurück weisen. Tolle Antwort. +1. Nun, ein weiterer Grund, Linien-Nummern saugen (und warum gingen wir von 10): 35 I = I + 1
oh junge, ich bin ein dunce! So lustig... ich glaube ich lass es einfach wie es ist und lass deinen Kommentar zu die Geschichte erzählen 🙂
InformationsquelleAutor Euro Micelli
Es ist eine Reminiszenz an die alten (wirklich alten) BASIS-Tage, wo Zeilennummern erforderlich waren. Jetzt Etiketten verwendet werden.
Aber mit Springen ist als schlechte Programmierung, mit der Ausnahme von
OnError GoTo ...
+1 für die historische Referenz
Oh, und hier ist Ihr Witz. stackoverflow.com/questions/234075/...
speziell dieser
InformationsquelleAutor Tom Collins
Sehr nützlich für alte Mode-Linie zahlen ist für die Fehlerbehandlung. Viele Leute nutzen eine standard-Fehler-handler in der Art:
proc name (args)
on error goto handler
code
.
.
Ausfahrt proc
handler:
debug.print err.Anzahl & "(" & err.Beschreibung & "), - Modul: "& ModuleName & "- Prozedur:" & ProcName at & jetzt
resume next
Ausfahrt Proc
Die gemacht werden können, etwas mehr nützlich In der code-Zeile nummeriert, wie die Fehlerzeile Eigenschaft wird die Nummer der Zeile zurück
der problematische ausführbare Zeile.
Debuggen.print err.Anzahl & "(" & err.Beschreibung & ") - in Zeile "& fehlerzeile & "Modul:" & ModuleName & "- Prozedur:" & ProcName at & jetzt
InformationsquelleAutor user2953309
deklarieren die Nummer der Zeile und deklarieren ein Label ist im Grunde das gleiche
aber mit einer Zeile als ein großer Vorteil: nicht Speicher!
wenn Ihr "unsere Speicher", werden Sie nicht in der Lage sein zu erklären, lable
aber Sie werden in der Lage sein, zu erklären, line numer und verwenden, die als "goTo" -
sub mySub()
....
on error goto 100
...
exit sub
100: msgbox("Fehler")
end sub
InformationsquelleAutor user2904976
Las ich viele Kommentare über GOTO-arm zu Programmieren..
Zurück in den alten Tagen, wenn
ein Hewlit Packard 25 25 Erinnerungen zu speichern, Anweisungen und Variablen
BASIC war immer noch Beginners All purpose Symbolic Instruction Code und
viel besser als die Dinge in 6502 Assembler
Ich ging zur computer-Konferenz, wo die
einer der Experten war takling über eine neue Programmiersprache, die verwendeten Bausteine und
Keine GOTO-GOSUB-UND RETURN .. ja PASCAL
Zu der Zeit WUSSTE ich, es war unmöglich, eine solche Sprache
aber da haben verbrachte über 20 Jahre Lehre
und die Gestaltung kommerzieller software in PASCAL
Mit MS-sichern Sie Ihre Office mit VBA natürlich Pascal selten geworden
obwohl Delphi war noch mit einem frühen Jahren Unterricht.
Kurz gesagt
Wenn Sie denken, der Computer-code gebaut für WENN, dann, sonst, Ende wenn
und die Tatsache, dass VBA immer noch wertet ALLE UND ODER NICHT XOR in einem
Wenn ....... Dann wenn Sie benötigen, um zu bewerten ein paar Millionen mal
die SPRINGEN können sparen Sie ein paar Sekunden.
Jedoch auf das Thema " ON Error Resume Next
viele nutzen diese, um zu prüfen, ob eine Arbeitsmappe geöffnet ist oder ein Blatt vorhanden ist
auf einer geschlossenen Arbeitsmappe... ...etc etc ..
In einigen Fällen ist schlechte Programmierung, dass das Programm
überprüfen Sie alle vor und zeigt einen Fehler in der Erwägung, dass
für jede ....
während Nicht Gefunden
gefunden = a = b
wend
hat nur zu prüfen, bis festgestellt
Meinen ersten Unterricht computer war eine PDP 8 ... 8 kB ..
Lochstreifen Fernschreiber für Druck-und I/O .. 7 Oktal-switches zu starten.
Dann zog Sie bis zu Comodore 64 ..
Aktuelle 16 GB computer Speicher von 250.000 von Ihnen.
einem aktuellen Kommentar
mit dem FBI, CIA usw .....Homeland Security Übertrumpft Sie alle.
InformationsquelleAutor Harry S