visual basic 6 - referenz

680
visual basic 6 referenz

Upload: pedagope

Post on 02-Jan-2016

655 views

Category:

Documents


3 download

DESCRIPTION

VISUAL BASIC 6

TRANSCRIPT

  • visual basic 6referenz

  • visual basic 6 referenzvisual basic 6 referenz

    rudolf huttaryrudolf huttary

    new technology

    Markt+Technik Verlag

  • Die Deutsche Bibliothek CIP-Einheitsaufnahme

    Ein Titeldatensatz fr diese Publikation ist beiDer Deutschen Bibliothek erhltlich.

    Die Informationen in diesem Produkt werden ohne Rcksicht auf eineneventuellen Patentschutz verffentlicht.Warennamen werden ohne Gewhrleistung der freien Verwendbarkeit benutzt.Bei der Zusammenstellung von Texten und Abbildungen wurde mit grterSorgfalt vorgegangen.Trotzdem knnen Fehler nicht vollstndig ausgeschlossen werden.Verlag, Herausgeber und Autoren knnen fr fehlerhafte Angabenund deren Folgen weder eine juristische Verantwortung nochirgendeine Haftung bernehmen.Fr Verbesserungsvorschlge und Hinweise auf Fehler sind Verlag undHerausgeber dankbar.

    Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und derSpeicherung in elektronischen Medien.Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeitenist nicht zulssig.

    Fast alle Hardware- und Softwarebezeichnungen, die in diesem Buch erwhnt werden,sind gleichzeitig auch eingetragene Warenzeichen oder sollten als solche betrachtetwerden.

    Umwelthinweis:Dieses Buch wurde auf chlorfrei gebleichtem Papier gedruckt.Die Einschrumpffolie zum Schmutz vor Verschmutzung ist ausumweltvertrglichem und recyclingfhigem PE-Material.

    10 9 8 7 6 5 4 3 2 1

    03 02 01 00

    ISBN 3-8272-5588-0

    2000 by Markt+Technik Verlag,ein Imprint der Pearson Education Deutschland GmbH,Martin-Kollar-Strae 1012, D 81829 Mnchen/GermanyAlle Rechte vorbehaltenLektorat: Erik Franz, [email protected]: Claudia Burle, [email protected]: reemers publishing services gmbh, KrefeldDruck und Verarbeitung: Media Print, PaderbornPrinted in Germany

  • Inhaltsverzeichnis

    5

    Vorwort 15Lesebuch und Nachschlagewerk 15Gut verwurzelt: traditionelles Basic vs. Visual Basic 16Zielgruppe 18

    Teil I: Referenzteil 21

    Grundlegendes 23Programme und Module in Visual Basic 23

    Programm 23Modul 24Projekt 24Arten von Modulen in einem Projekt 25

    Literale und Konstanten 27Anweisungen 33Bezeichner und Namensraum 34Kontrollstrukturen 36

    Unbedingte und bedingte Verzweigung, Subroutinen 36Fallunterscheidung 38Schleifen 40Fehlerbehandlung 43

    Datentypen und ihre Operationen 49Elementare Datentypen 49

    Der Datentyp Variant 50Die Datentypen Integer, Long, Single und Double 51Die Datentypen Boolean und Byte 52Die Datentypen Currency und Date 52Der Datentyp Decimal 53

    Operatoren fr elementare Datentypen und logische Bedingungen 54Arrays 55Typumwandlung 57Benutzerdefinierte Datentypen 60

    Type-Datentypen 61Enum-Aufzhlungen 62

    Funktionen und Anweisungen fr Zeichenfolgen 63Asc-, AscB- und AscW-Funktion 66Chr-, ChrB- und ChrW-Funktion 67Filter-Funktion 68Format-Funktion 69FormatCurrency-Funktion 73FormatDateTime-Funktion 74FormatNumber-Funktion 75

  • 6Inhaltsverzeichnis

    FormatPercent-Funktion 75Hex-Funktion 76InStr- und InStrB-Funktion 76InStrRev-Funktion 77Join-Funktion 78LCase-Funktion 79Left- und LeftB-Funktion 79Len- und LenB-Funktion 79LSet-Anweisung 80LTrim-Funktion 81Mid- und MidB-Funktion 81Mid- und MidB-Anweisung 82MonthName-Funktion 82Oct-Funktion 82Option Compare-Anweisung 83Replace-Funktion 84Partion-Funktion 85Right- und RightB-Funktion 85RSet-Anweisung 86RTrim-Funktion 86Space-Funktion 86Split-Funktion 87Str-Funktion 87StrComp-Funktion 88StrConv-Funktion 89String-Funktion 90StrReverse-Funktion 90Trim-Funktion 90UCase-Funktion 91Val-Funktion 91WeekdayName-Funktion 92

    Mathematische und finanzmathematische Funktionen und Anweisungen 92Abs-Funktion 94Atn-Funktion 95Cos-Funktion 95DDB-Funktion 96Exp-Funktion 97Fix-Funktion 97FV-Funktion 98Int-Funktion 99IPmt-Funktion 99IRR-Funktion 100Log-Funktion 101MIRR-Funktion 102NPer-Funktion 103NPV-Funktion 104

  • 7Inhaltsverzeichnis

    Pmt-Funktion 105PPmt-Funktion 106PV-Funktion 106Randomize-Anweisung 107Rate-Funktion 108Rnd-Funktion und Rnd-Anweisung 109Round-Funktion 110Sgn-Funktion 110Sin-Funktion 112SLN-Funktion 112Sqr-Funktion 113SYD-Funktion 113Tan-Funktion 114

    Funktionen und Anweisungen fr Datums-/Zeitwerte 114CDate-Funktion 116Date-Funktion und Date-Anweisung 116DateAdd-Funktion 116DateDiff-Funktion 117DatePart-Funktion 118DateSerial-Funktion 119DateValue-Funktion 120Day-Funktion 121FileDateTime-Funktion 121FormatDateTime-Funktion 121Hour-Funktion 121Minute-Funktion 121Month-Funktion 122MonthName-Funktion 122Now-Funktion 122Second-Funktion 122Time-Funktion und Time-Anweisung 123Timer-Funktion 124TimeSerial-Funktion 124TimeValue-Funktion 125Weekday-Funktion 125WeekdayName-Funktion 126Year-Funktion 126

    Dateiorientierte Funktionen und Anweisungen 126ChDir-Anweisung 131ChDrive-Anweisung 132Close-Anweisung 133CurDir-Funktion 134Dir-Funktion 135Environ-Funktion 136EOF-Funktion 137FileAttr-Funktion 138

  • 8Inhaltsverzeichnis

    FileCopy-Anweisung 138FileDateTime-Funktion 139FileLen-Funktion 139FreeFile-Funktion 139Get-Anweisung 140GetAttr-Funktion 142Input- und InputB-Funktion 142Input #-Anweisung 143Kill-Anweisung 144Line Input #-Anweisung 145Loc-Funktion 146Lock-Anweisung 146LOF-Funktion 147LSet-Anweisung 148MkDir-Anweisung 148Name-Anweisung 148Open-Anweisung 149Print #-Anweisung 151Put-Anweisung 153Reset-Anweisung 154RmDir-Anweisung 155Seek-Anweisung und Seek-Funktion 156SetAttr-Anweisung 157Shell-Anweisung 158Unlock-Anweisung 159Write #-Anweisung 159

    Variablen 161Variablendeklaration 162

    Typkennzeichen und Bezeichnerbereiche fr Typen 167Variableninitialisierung 168Geltungsbereiche von Variablen 173

    Funktionen und Prozeduren 175Parameterbergabe an Funktionen und Prozeduren 178Funktionen selbst definieren 181Prozeduren selbst definieren 183

    Routinen aus DLLs und der Windows-API einsetzen 185

    Objekte und Klassen 195Klassen als Datentypen fr Objektvariablen 196

    Ereignisroutinen 204Standardereignisse 207

    Activate-Ereignis und Deactivate-Ereignis 212Change-Ereignis 214Click-Ereignis 215DblClick-Ereignis 217

  • 9Inhaltsverzeichnis

    DragDrop-Ereignis 218DragOver-Ereignis 221GotFocus-Ereignis und LostFocus-Ereignis 222Initialize-Ereignis 224KeyDown-Ereignis und KeyUp-Ereignis 225KeyPress-Ereignis 228LinkClose-Ereignis 230LinkError-Ereignis 231LinkExecute-Ereignis 232LinkNotify-Ereignis 233LinkOpen-Ereignis 233Load-Ereignis 236MouseDown-Ereignis und MouseUp-Ereignis 237MouseMove-Ereignis 239OLECompleteDrag-Ereignis 241OLEDragDrop-Ereignis 242OLEDragOver-Ereignis 245OLEGiveFeedback-Ereignis 247OLESetData-Ereignis 248OLEStartDrag-Ereignis 250Paint-Ereignis 253QueryUnload-Ereignis 256Resize-Ereignis 257Terminate-Ereignis 258Unload-Ereignis 259Validate-Ereignis 260

    Global-Objekt 261App-Objekt 264CallByName-Methode 269Clipboard-Objekt 270Command-Methode 273CreateObject-Methode 273DeleteSetting-Methode 275DoEvents-Methode 276Err-Objekt 277Forms-Auflistung 279GetAllSettings-Methode 279GetObject-Methode 280GetSetting-Methode 281InputBox-Methode 281Load-Methode 282LoadPicture-Methode 283LoadResData-Methode, LoadResPicture-Methode, LoadResString-Methode 284Printer-Objekt 284Printers-Auflistung 297

  • 1 0

    Inhaltsverzeichnis

    QBColor-Methode 298RGB-Methode 299SavePicture-Methode 299SaveSetting-Methode 300Screen-Objekt 300Sendkeys-Methode 302Unload-Methode 303

    Auflistungen und Collection-Objekte 304Formulare 306

    Form-Objekt (Basisobjekt fr Formulare) 307MDIForm-Objekt 313

    Selbst definierte Klassen 318ClassModul-Schnittstelle 320

    Steuerelemente 321Gemeinsame Eigenschaften 323

    Alignment-Eigenschaft 327Appearance-Eigenschaft 328AutoSize-Eigenschaft 329BackColor-Eigenschaft und ForeColor-Eigenschaft 330BackStyle-Eigenschaft 331BorderStyle-Eigenschaft 332Caption-Eigenschaft 334Container-Eigenschaft 335CausesValidation-Eigenschaft 335DataChanged-Eigenschaft 336DataField-Eigenschaft 336DataFormat-Eigenschaft 338DataMember-Eigenschaft 339DataSource-Eigenschaft 339DisabledPicture-Eigenschaft 341DownPicture-Eigenschaft 341DragIcon-Eigenschaft 342DragMode-Eigenschaft 343DrawMode-Eigenschaft 344DrawStyle-Eigenschaft 346Enabled-Eigenschaft 347FillColor-Eigenschaft 348FillStyle-Eigenschaft 349Font-Eigenschaft 349ForeColor-Eigenschaft 350HasDC-Eigenschaft 350hDC-Eigenschaft 351Height-Eigenschaft und Width-Eigenschaft 351HelpContextID-Eigenschaft und WhatsThisHelpID-Eigenschaft 353hWnd-Eigenschaft 354Image-Eigenschaft 354

  • 1 1

    Inhaltsverzeichnis

    Index-Eigenschaft 356Left-Eigenschaft und Top-Eigenschaft 357MaskColor-Eigenschaft 358MouseIcon-Eigenschaft 359MousePointer-Eigenschaft 360MultiLine-Eigenschaft 361Name-Eigenschaft 361OLEDropAllowed- und OLETypeAllowed-Eigenschaften 362OLEDropMode-Eigenschaft 363Parent-Eigenschaft 364Picture-Eigenschaft 365RightToLeft-Eigenschaft 366ScaleLeft-Eigenschaft und ScaleTop-Eigenschaft 366ScaleHeight-Eigenschaft und ScaleWidth-Eigenschaft 368ScaleMode-Eigenschaft 369ShowTips-Eigenschaft 371Style-Eigenschaft 372TabIndex-Eigenschaft 375TabStop-Eigenschaft 376Tag-Eigenschaft 376ToolTipText-Eigenschaft 377UseMaskColor-Eigenschaft 377Visible-Eigenschaft 378WhatsThisHelp-Eigenschaft 378WhatsThisHelpID-Eigenschaft 378Width-Eigenschaft 379

    Gemeinsame Methoden 379Drag-Methode 379LinkExecute-Methode 380LinkPoke-Methode 381LinkRequest-Methode 382LinkSend-Methode 382Move-Methode 383OLEDrag-Methode 383Refresh-Methode 384SetFocus-Methode 385ShowWhatsThis-Methode 386ZOrder-Methode 386

    Standardsteuerelemente 387Anzeige-Steuerelement (Image) 390Befehlsschaltflche-Steuerelement (CommandButton) 392Bezeichnungsfeld-Steuerelement (Label) 393Bildfeld-Steuerelement (PictureBox) 395Bildlaufleisten-Steuerelemente (HScrollBar, VScrollBar) 398Dateilistenfeld-Steuerelement (FileListBox) 400Data-Datensteuerelement (Data) 402

  • 1 2

    Inhaltsverzeichnis

    Figur-Steuerelement (Shape) 406Kombinationsfeld-Steuerelement (ComboBox) 407Kontrollkstchen-Steuerelement (CheckBox) 409Laufwerklistenfeld-Steuerelement (DriveListBox) 410Linie-Steuerelement (Line) 411Listenfeld-Steuerelement (ListBox) 412OLE-Container-Steuerelement (OLE) 415Optionsfeld-Steuerelement (OptionButton) 424Rahmen-Steuerelement (Frame) 426Textfeld-Steuerelement (TextBox) 427Verzeichnislistenfeld-Steuerelement (DirListBox) 431Zeitgeber-Steuerelement (Timer) 432

    ActiveX-Steuerelemente (OCX) Windows-Standardsteuerelemente 433Abbildungsliste-Steuerelement (ImageList) 436

    Weitere ActiveX-Steuerelemente 439Bildausschnitt-Steuerelement (PictureClip) 442Standarddialoge-Steuerelement (CommonDialog) 444

    Teil II: Praxisteil 451

    ltere Basic-Programme nach Visual Basic portieren 453Wie importiert man den Quelltext? 454Einfache Programme 454

    Implementation einer eigenen Input-Routine 456Anspruchsvollere Programme 457

    Implementation von Inkey$ 459Implementation von LOCATE, POS, CSRLIN und COLOR 460Koordinatensystem und Grafikmodus 461Zusammenfassung der Emulation als Standardmodul 463

    Von WANKEL.BAS zur WankelAnimation 468Die portierte Fassung 472

    Mathematik und Algorithmen 477ApfelmannZoom eine Fahrt durch die Mandelbrotmenge 478

    Implementation des Apfelmnnchen-Algorithmus 484Optimierung 485Ereignisbehandlung mit DoEvents, ein komplexes Problemfeld 485Benutzerschnittstelle 487Der Stack 488Einzelbilder speichern 489

    Formulare und Ansichten 491Ereignisbehandlung 491

    Gummiband Bereiche interaktiv auswhlen 492DDE-Verbindungen 495OLE-Drag&Drop 501

  • 1 3

    Inhaltsverzeichnis

    DiaProjektor SDI-Formulare synchronisieren 511Das Programmdesign 514Info-Dialog als gebundenes Formular aufrufen 525Ereignisse delegieren und Instanziierung durch One-Shot-Logik 525Programmstart und Auswahl der Bilddateien im Standarddialog ffnen 527Das Anzeigesystem 530Bilder einlesen und in maximaler Gre zeichnen 535Vollbildanzeige 536Men und Kontextmen 538Benutzerschnittstelle 542

    Bildlaufleisten fr Ansichten einsetzen und auf Grennderungen reagieren 544

    Bildlauf ein kleiner Betrachter fr groe Bilder 545HexView eine schnelle Textansicht fr groe Dateien 551

    Registrierung 561RegTest Sitzungen wieder aufnehmen 562

    Objektorientiertes Basic 567Klassen selbst definieren 567

    Ring eine einfache Klasse demonstriert Grundlegendes 5683DAnimation Drahtgittermodelle frei im Raum gedreht 577Point3D ein Punkt im Raum 582Line3D eine Linie aus zwei Punkten 586

    ActiveX-Steuerelemente und Benutzersteuerelemente 599LongTimer der Timer mit Ausdauer 599Transparenz und Drag&Drop 606MemoryEdit das Textfeld mit Gedchtnis 615

    Kurzreferenz der Schlsselwrter mit Vergleich zu QBasic 642

    Tabellenindex 659

  • 1 5

    Wer heute nicht tglich mit einem bestimmten Produkt, etwa einem Entwicklungssystem wieVisual Basic, einer Tabellenkalkulation oder einer Textverarbeitung arbeitet, sondern eher spo-radisch, dem bleibt nichts anderes brig, als erst einmal erhebliche Mengen an wertvoller Zeitschlicht damit zu vergeuden, sich und sein System immer wieder auf den neuesten Stand desjeweiligen Produkts zu bringen. Der Effizienzvorsprung, den der neueste Stand des Produktsverspricht, muss oft sehr teuer mit Lernaufwand und der Umgestaltung bestehender Lsungenerkauft werden. Die Hersteller wollen nicht nur, dass ein Produkt in der neuen Version uer-lich anders erscheint, die zustzlichen Features sowie die Anpassung an eine sich stndigndernde Umgebung (Benutzeroberflche, Betriebssystem, Entwicklungsplattform, Vernetzung,verwandte Produkte) erzwingen in den meisten Fllen auch nderungen des inneren Aufbaus,eingefhrter Daten- und Kommunikationsstrukturen und nicht zuletzt auch erhebliche nde-rungen in der Dokumentation. Damit wren wir bereits beim Thema.

    Dieses Buch reiht sich mit seinem Titel in die 1999 neu ins Leben gerufene Referenzreihe desMarkt+Technik-Verlags ein. Mageblich fr das Erscheinen dieser neuen Reihe war derWunsch vieler semi- wie professioneller Programmierer nach verdichteten Referenzinformatio-nen mit ineinander greifender theoretischer und praktischer Aufarbeitung, mit anderen Worten,der schnelle und gleichzeitig kompetente berblick ber ein Sprachprodukt mit nichttrivialenpraktischen Anregungen als Nachschlagewerk fr den Einstieg, Umstieg sowie die Auffri-schung fr die konkrete Arbeit mit dem Produkt.Die Titel in dieser Reihe geben Antwort auf die Fragen Was ist das? und Wie geht das? und dies in einer fr den Einzelnen noch berschaubaren Weise. Das Buch soll dem Kufer alsLesebuch und als Nachschlagewerk dienen, es soll ihm also das ntige Know-how fr seine Pro-grammierttigkeit vermitteln und ihm gleichzeitig Anregungen und Lsungen anbieten, die er inseine Programmierarbeit einflieen lassen kann. Schaltstelle und Garant fr die gute gegensei-tige Durchdringung der Themen im Referenz- und Praxisteil ist der zentrale Tabellenindex imAnhang, dessen themen- und sachbezogene Eintrge berwiegend in beiden Teilen Fundstellenausweisen.Heutige Online-Hilfen zu Produkten knnen dies aus verschiedenen Grnden eher schlecht alsrecht bzw. immer hufiger gar nicht mehr leisten. So, weil sie sich ber die Versionen hinwegimmer weiter aufgeblasen haben, ohne strukturell berarbeitet worden zu sein, weil sie auf-grund schlechter und unvollstndiger Aufarbeitungen teilweise bereits in sich widersprchlichgeworden sind, weil sie aufgrund erbrmlicher Indizes nur sehr zeitraubend zu handhaben sindund nicht zuletzt, weil sie in ihrem enzyklopdischen Charakter keinerlei Gewichtung derInformationen nach Kriterien der Brauchbarkeit und dem Wissensstand des Lesers mehr enthal-ten. Ein wirklich pathologisches Beispiel einer solchen Online-Hilfe ist die MSDN Library frVisual Studio 6.0. Der monumentale Fundus dieses in seinem Format inzwischen auf den Inter-net Explorer zugeschnittenen Hilfesystems ist auf zwei CDs verteilt und stellt einen Rundschlagan Informationen ber die wichtigeren Sprachprodukte von Microsoft dar darunter zu VisualBasic, Visual C++, Visual J++, Visual FoxPro sowie die SDK- und die DDK-Dokumentation.Die Benutzbarkeit des Systems lsst jedoch extrem zu wnschen brig. Erstens wurden Textund Index teilweise eingedeutscht, was fr den Index eine echte Katastrophe darstellt, teilweiseim amerikanischen Original belassen, und zweitens wurde bei der indexikalischen Sucheschlicht vergessen, die Produktzugehrigkeit der einzelnen Themen mit anzugeben. Die Voll-textsuche leistet dies zwar, erschlgt einen aber schier mit der Flle der Fundstellen. Wer dieserHilfe in annehmbarer Zeit etwas halbwegs Vernnftiges ber Visual Basic entlocken will, tut

  • Gut verwurzelt: traditionelles Basic vs. Visual Basic

    1 6

    Gut

    verw

    urze

    lt: t

    radi

    tione

    lles

    Basi

    c vs

    . Vi

    sual

    Bas

    ic

    gut daran, sich ber das Men ANSICHT/UNTERMENGE DEFINIEREN als Erstes eine Quellenaus-wahl in Form einer Untermenge zusammenzustellen und diese fr die weitere Arbeit als Filter zubenutzen.Eine gedruckte Referenz zu Visual Basic im Umfang des vorliegenden Buches kann es sich nichtleisten, ausgiebigst auf allen Hochzeiten zu tanzen das sei der Online-Hilfe vorbehalten. Viel-mehr stellt sich die gedruckte Referenz der Aufgabe, die Ecken und Kanten abzuschleifen, dieein Verstndnis der Sprache oder spezifische Problemlsungen erschweren, indem sie Zusam-menhngendes als solches aufzeigt, begreiflich darstellt und in seinen relevanten Dimensionenexemplarisch erlutert. Entscheidend ist dabei die Auswahl und Verdichtung der behandeltenThematiken, die zwar nicht in jedem Fall, so doch aber in der Mehrzahl der Flle eine Vertie-fung der eher lax gehaltenen Online-Hilfe zu Visual Basic erreicht.Der vorliegende Band enthlt eine umfassende Darstellung der Konzepte, Funktionen undObjekte von Visual Basic als Programmiersprache und Entwicklungsplattform, beschrnkt sichaber in seiner Themenauswahl auf die Innensicht der Sprache, ohne sich allzu weit in derWelt des ActiveX, der Automatisierung, der Datenbankprogrammierung sowie generell desCOM (bzw. DCOM) zu verlieren. Grob gesehen deckt der Band das gesamte Instrumentariumvon Visual Basic inklusive aller Standardsteuerelemente sowie ausgewhlter Windows-Stan-dardsteuerelemente und die Programmierung eigener Benutzersteuerelemente ab.

    Keiner anderen Programmiersprache haftet so stark das Etikett an, in Hunderte verschiedenerDialekte zerfallen zu sein, wie Basic. Das liegt zum einen daran, dass Basic ber lange Zeit hin-weg, insbesondere fr die ersten in ihren Mglichkeiten massiv beschrnkten Mikrocomputerund spter fr den PC die mit dem Betriebssystem ausgelieferte Standardsprache darstellte wenn es nicht gar, wie etwa fr den Commodore C64 zur Kommandosprache fr das Betriebs-system selbst avanciert war. Zum anderen liegt es aber auch daran, dass die Sprache in ihrerEntwicklung einer weniger rigiden Kontrolle durch Standardisierungskomitees und -gremienausgesetzt war als die anderen vielleicht wegen des Buchstabens B im Akronym, der jabekanntlich fr Beginners steht. Unterschwellig mag dabei freilich auch noch das Vorurteilmitgeschwungen haben, Basic werde aufgrund seiner Begrenztheit als Entwicklungssprache frernst zu nehmende Anwendungen sowieso nie taugen.Ein groes Vernderungspotential geht aber auch mit einem groen Entwicklungspotential undder Fhigkeit zur schnellen Adaption einher. In der Tat haben im letzten Jahrzehnt die Philoso-phien fr Benutzeroberflchen und Betriebssysteme einen massiven Wandel durchgemacht. Dasgilt in besonders krasser Weise fr den PC. Da ist es nicht verwunderlich, wenn sich auch dieAnforderungen verlagert haben, denen eine Programmiersprache bei der Anwendungsentwick-lung fr moderne Benutzeroberflchen gengen muss. Eine wichtige Rolle spielen heute Objekt-orientierung, Modularisierung und Prozesskommunikation. Mit anderen Worten, das monoli-thische Programm, das isoliert von anderen Anwendungen den ihm zugedachten Aufgabennachkommt, indem es seine eigenen Datenformate und Algorithmen strickt, seine eigene Benut-zerschnittstelle parat hlt und vielleicht noch so tut, als gehre ihm die Maschine alleine, hatunwiderruflich ausgedient. Gefragt sind berschaubare, mglichst allgemein einsetzbare Kom-ponenten, die im Dienste der Allgemeinheit das Ihre zum Groen Ganzen beitragen. Dieserneue Zeitgeist hrt auf den Namen COM (Component Object Model), eine sprachbergrei-fende Spezifikation, die die Implementation und das Miteinander von Objekten in dieser Weltregelt. Microsoft hat seinen Beitrag an der technologischen Umsetzung dieser Konzeption (mitBlick auf die Internet-Programmierung) unter der Bezeichnung ActiveX zusammengefasst. EinerAnwendung, gleich in welcher Sprache sie realisiert wird, stehen damit vonseiten des Betriebs-systems komplexe, allgemein gehaltene Bausteine in Form von Komponenten (Steuerelemente,

  • Gut verwurzelt: traditionelles Basic vs. Visual Basic

    1 7

    Gut verwurzelt: traditionelles Basic vs. Visual Basic

    Schnittstellen, Player, Filter etc.) mit verkapselter Funktionalitt und Implementation zur Ver-fgung, derer sie sich nach Belieben und ohne groes Brimborium bedienen kann.Angesichts dieser Entwicklungen scheint es etwa bei Betrachtung der Linie von BasicA berQuickBasic/QBasic nach Visual Basic beinahe schon verblffend, wie treu sich die Sprache inihren Wurzeln doch geblieben ist und wie viel sie von ihren ursprnglichen Konzepten in dieneue Objekt-dominierte Welt retten konnte. Mehr noch, die Adaption ist so erstaunlich gutgelungen, dass sich der mit Visual Basic vorliegende Basic-Dialekt mit Fug und Recht inzwi-schen zu den ernst zu nehmenden Sprachen fr die Anwendungsentwicklung zhlen darf. Aberauch damit noch nicht genug. Microsoft hat Visual Basic vielmehr die Rolle des Flagschiffszugedacht: In Form von VBA (Visual Basic fr Anwendungen) stellt das neue Basic zudem dieAutomatisierungssprache fr die wichtigsten Anwendungen der Microsoft Office Suite, und inder stark eingeschrnkten Form von VBScript ist das neue Basic auch gleich noch zur neuenKommandosprache des Betriebssystems Windows avanciert.Wer nun darauf beharrt, Visual Basic habe nicht mehr viel mit dem traditionellen Basic zu tun,dem kann natrlich genauso wenig widersprochen werden. Die objektorientierte Fassung von Cist C++ und von Pascal ist Modula oder Delphi, und keiner wird Letztere als Dialekte Erstererbezeichnen wollen, obwohl die Kenntnis von C bzw. Pascal doch sehr beim Verstndnis ihrerobjektorientierten Nachfolger von Vorteil ist. Nehmen Sie es so: Basic war schon immer mehrein Oberbegriff, denn ein kohrentes Gebilde, und als Oberbegriff ist es durchaus in der Lage,auch den bergang in die objektorientierte Programmierung unter sich zu subsumieren.Die wesentlichen in Visual Basic zu findenden Neuerungen sind:

    Module der Modulbegriff deckt sich nicht mehr mit dem Programmbegriff, sondernerweitert die Strukturierungsfhigkeit der Sprache nach oben hin. Die Sprache vermagdamit insbesondere Bibliotheken (Klassen- und Komponentenbibliotheken) konzeptuellzu integrieren

    Objekte der Objektbegriff ist inzwischen sprachlich-syntaktisch verwurzelt. Nebenden einfachen Datentypen stehen nun auch komplexe, verkapselte Datentypen samtzugehriger Operationen zur Disposition. Der Sprache erffnet sich damit unter ande-rem die vollstndige Anbindung an alle Dienste des Betriebsystems inklusive der gra-fisch orientierten Benutzerschnittstelle, des gesamten Dateiwesens, der Kommunikati-onseinrichtungen und der Datenbankschnittstellen.

    Ereignisse die Sprache adaptiert das Modell der ereignisgesteuerten Anwendungspro-grammierung von Windows ber den Objektbegriff. So gestatten vordefinierte Klassenund interaktiv definierte Objekte dieser Klassen eine umfassende Reprsentation derBenutzerschnittstelle mit all ihren Elementen (Fenster, Mens, Symbol- und Statusleis-ten, Steuerelemente, Komponenten) und Aktionen.

    ActiveX die vom COM geforderte Codeabstraktion ermglicht es der Sprache nichtnur, von existierenden Komponenten zu profitieren, sondern auch selbst Komponentenbeizusteuern, von denen wiederum andere Anwendungen profitieren knnen.

    Erst mit Integration dieser Konzepte besitzt Visual Basic das ntige Rstzeug, um in der Weltder modernen Windows-Programmierung Schritt halten zu knnen. Das gilt mit gleichem Vor-zeichen fr den Programmierer: Wer auch nur halbwegs ernst zu nehmende Anwendungen mitVisual Basic zu Stande bringen will, dem bleibt nichts anderes brig, als sein Basic-Repertoire(und sein Denken) auf den Stand dieser Neuerungen zu bringen. Dabei spielt in erster Linie derObjektbegriff eine zentrale Rolle. Wer den Objektbegriff einmal soweit verinnerlicht hat, dasser nicht mehr ber die Nahtstelle zwischen dem alten Basic und dem Basic mit Objektenstolpert, dem wird auch die modulare Programmierung mit Code- und Klassenbibliotheken,ActiveX-Komponenten keine allzu groen Rtsel mehr aufgeben. Damit wren wir bereits beider Zielgruppe dieses Buchs.

  • Zielgruppe

    18

    Ziel

    grup

    pe

    Was das Vorwissen des Lesers betrifft, so wurde bei der Gestaltung der einzelnen Themen gr-ter Wert auf eine Steigerung vom Einfachen zum Komplexen und vom Allgemeinen zum Spezi-ellen gelegt. Der Eine liest so weit, wie er kommt, der Andere beginnt da zu lesen, wo es fr ihninteressant wird. Damit ist, wie fr eine Referenz blich, die Zielgruppe dieses Buchs naturge-m recht breit anzusetzen. Sie umfasst:

    den unerfahrenen Programmierer, der die ersten Schritte und Hrden der Visual-Basic-Programmierung zwar hinter sich gebracht hat, aber weder den inneren Zusammenhangder Sprache so recht durchdrungen hat, noch eine Vorstellung von der Flle ihrer Mg-lichkeiten bei der Bewltigung praktischer Problemfelder besitzt. Programmierer dieserGruppe finden in diesem Buch nicht nur einen bersichtlichen Grundlagenteil, der aufdie Elemente und Konzepte der Sprache genauer eingeht und gleichermaen eine Vertie-fung des Objektbegriffs vermittelt, sondern auch Anregungen fr die eigene Program-mierttigkeit in Form einfacher Programmbeispiele, die Lsungen zu typischen Frage-stellungen vorstellen.

    den Alten Hasen, der Basic seit langem kennt, die Sprache aber vernachlssigt hat undmit Visual Basic den schnellen Wiedereinstieg in die heutige objektorientierte Basic-Pro-grammierung sucht. Programmierer dieser Gruppe werden in der Referenz ntzlicheGegenberstellungen und Anmerkungen finden, die gerade auf die Vernderung derSprache im Vergleich zu QBasic abzielen.

    den ambitionierten Anwendungsentwickler, der sein Repertoire erweitern will, nachAnstzen fr neue Lsungen sucht und sich vom Griff zur Referenz nicht nur Auskunft,sondern auch Inspiration erwartet. Als Referenz bemht sich das Buch, Licht in mg-lichst viele Winkel der Visual-Basic-Programmierung zu bringen. Programmierer dieserGruppe werden daher in der Flle der vorgestellten Programmiertechniken und Pro-blemlsungen schnell Ansatzpunkte fr die Lsung der eigenen Fragestellungen finden.

    den versierten Programmierer, der in vielen Programmiersprachen zu Hause ist undgezielte Hilfestellung in der einen oder anderen Fragestellung sucht. Die problemrele-vante Auswahl der Einzelthemen und die Anwendungen unterschiedlicher Schwierig-keitsgrade und Komplexitt umfassende Beispielsammlung drfte das Buch fr diesenProgrammierertyp zu einer Fundgrube bei der Suche nach speziellen Lsungen werdenlassen.

    den Entwickler spezifischer Datenbanklsungen, der Visual Basic unter anderem alsPlattform fr die Front-End-Programmierung benutzt

    Auch wenn im Text vielfach nur Visual Basic zu lesen ist, ist der Inhalt des Buches vor demHintergrund der bei Drucklegung aktuellsten Version von Visual Basic zu interpretieren. Die indiesem Buch aufgefhrten Thematiken und Beispiele wurden daher unter Visual Basic 6.0 (SP3)sowie der dazu von Microsoft bereitgestellten Dokumentation sorgfltig ausgearbeitet undauch getestet. Da Microsoft die Entwicklungszyklen seiner Produkte inzwischen scheinbarzunehmend auf Release-Versionen ausdehnt und eine weitgehende Fehlerfreiheit meist erst mitdem zweiten oder dritten Service-Pack erreicht wird, bietet diese Version eine hinreichend sta-bile Plattform fr die Anwendungsentwicklung.

    Die CD zum BuchDem Buch ist eine CD beigelegt, auf der Sie die im Text explizit als Projekte bezeichneten Bei-spiele in je eigenen Unterverzeichnissen der Verzeichnisse Referenz und Praxis vorfinden. Zureinfacheren Orientierung tragen die Unterverzeichnisse die Namen der Projekte. Um die nicht

  • Zielgruppe

    1 9

    Zielgruppe

    kompilierten Programme auszufhren, ffnen Sie die jeweilige VBP-Projektdatei oder VBG-Pro-jektgruppendatei in der Visual-Basic-Entwicklungsumgebung und starten die Ausfhrung mit-tels der Taste (F5).Fr Kommentare, Verbesserungen und Anregungen mit Bezug auf den Inhalt dieses Buchs binich jederzeit dankbar. Richten Sie Zuschriften bitte an:

    [email protected]

    Mnchen im August, 2000 Rudolf Huttary

  • 21

    !

  • 23

    Bei der prozeduralen Programmierung erfolgt die Strukturierung des Quellcodes traditionelldurch Kontrollstrukturen, Funktionen/Prozeduren und Module. Whrend Kontrollstrukturenals Muss fr jede Programmiersprache schon immer zum Kern von Basic zhlten, hielten derFunktions- und Prozedurbegriff und das damit verbundene Konzept des Namensraums nur sehrzgerlich Einzug in die Sprache. Der Modulbegriff war als solcher zwar schon immer vorhan-den, er implizierte bis zur Entwicklung von Visual Basic jedoch nicht mehr als die schiere Mg-lichkeit, von einem ersten Programm aus die Kontrolle zusammen mit gegebenenfalls speziellfr den Export deklarierten Werten an ein zweites Programm abzugeben. Da das erste Pro-gramm dadurch beendet wurde und seine gesamte Umgebung verlorenging, war dieses Konzeptals zustzliche Strukturebene wenig geeignet. Brauchbare Adaptionen fr Funktionen/Prozedu-ren gibt es seit QuickBasic und QBasic, wenngleich die etwas seltsam anmutenden Regeln frden Namensraum aus heutiger Sicht den Eindruck erwecken, als seien den Funktionen/Prozedu-ren Teile eines Modulkonzepts untergemischt worden. Erst die mit Visual Basic vollzogene ff-nung zur objektorientierten Programmierung brachte der Sprache ein ausgewogenes Verhltnisdieser drei Strukturebenen, wie es heute in allen modernen Programmiersprachen zu finden ist:Kontrollstrukturen sind (unverndert) bedingte Verzweigungen und Schleifen, die eine Steue-rung der Programmausfhrung ermglichen. Prozeduren/Funktionen fassen als Unterpro-gramme umfangreiche Anweisungsfolgen zu kompakten Einheiten zusammen, wobei Funktio-nen aufgrund des Funktionswerts, den sie verkrpern, noch der spezielle Aspekt derAuswertung komplexer Ausdrcke zufllt. Module haben Bibliothekscharakter und kombinie-ren Code und Datenstrukturen zu eigenstndigen Programmeinheiten. Damit erfllen sie diestrukturelle Voraussetzung fr die Implementation von Objektdatentypen (Klassen).

    "## $ Dieser Abschnitt diskutiert den Programm- und Modulbegriff von Visual Basic und stellt dieverschiedenen Ausprgungen vor.

    "##Ein Programm ist eine Folge von Befehlen, die auf einem Computer ausfhrbar ist und im wei-testen Sinne eine spezifische Anleitung fr die spezifische Verarbeitung spezifischer Daten dar-stellt. Das hier etwas strapazierte Wort spezifisch soll deutlich machen, dass bei der Daten-verarbeitung die Reprsentation eine enorme Rolle spielt und Programm nicht gleich Programmist, selbst wenn es das Gleiche tut. Basic war ursprnglich als Interpretersprache konzipiert, wasnichts anderes heit, als dass zur Ausfhrung eines Basic-Programms ein Interpreter (also einweiteres Programm) erforderlich war, das vergleichbar einem Dolmetscher die Basic-Befehlenacheinander in Maschinenbefehle bersetzte. Darber hinaus musste der Interpreter whrenddes bersetzens auch noch darauf achten, dass der Programmtext keine Fehler syntaktischeroder sonstiger Natur enthielt. Das hatte zwar den Vorteil, dass die Programmentwicklung sehreinfach weil vollstndig interaktiv vonstatten gehen konnte, aber auch den Nachteil, dassdie Ausfhrungsgeschwindigkeit zu wnschen brig lie. Basic hatte daher immer schon denRuf, nicht gerade der schnellsten einer zu sein. Im Gegensatz zu Basic sind andere Sprachenwie C oder Pascal von vornherein als Compilersprachen konzipiert, das heit, Programmtextewerden einmalig (sowie nach jeder nderung) von einem Compiler (bersetzungsprogramm)auf syntaktische und sonstige Fehler hin untersucht und dann in eine ausfhrbare Version ber-setzt, die aus nichts weiter als aus Maschinenbefehlen besteht und vom Prozessor direkt verar-beitet werden kann. (In der Praxis muss der vom Compiler gelieferte Code allerdings zur Aufl-

  • Programme und Module in Visual Basic

    24

    Prog

    ram

    me

    und

    Modu

    le in

    Vis

    ual B

    asic

    sung von Bibliotheksverweisen noch einem Bindevorgang unterzogen werden dafr ist der sogenannte Linker zustndig). Der Geschwindigkeitsvorteil liegt dabei natrlich auf der Hand.Visual Basic vereint heute die Vorteile einer Interpretersprache mit der einer Compilersprache.Fr die interaktive Programmentwicklung stellt die Entwicklungsumgebung von Visual Basiceinen Interpreter (genau genommen handelt es sich dabei um einen inkrementellen Compiler)mit integriertem Debugger bereit, und zur Fertigstellung einen Compiler, der direkt ausfhrba-ren Code erzeugen kann. Dieser Code ist allerdings noch auf eine oder mehrere zu Visual Basicgehrende Laufzeitbibliotheken angewiesen, die in Form von DLLs bereitstehen. Neben derbersetzung in Maschinencode bietet Visual Basic auch die bersetzung in den so genannten P-Code an, ein im Schnitt etwa um 40 Prozent kompakterer und syntaktisch fehlerfreier Zwi-schencode. In P-Code vorliegende Programme besitzen einen kleinen ca. 9 KB umfassendenMaschinencode-Anteil, den so genannten P-Code-Interpreter, der ein primitives Laufzeitsystemdarstellt und den P-Code (mit weitaus geringeren Geschwindigkeitsverlusten als ein Basic-Inter-preter) in Maschinencode entfaltet.

    $Ein Blick auf die Entwicklung von Basic zeigt weiterhin, dass sich die Sprache von einerschwach strukturierenden Sprache, deren einzige Strukturelemente Kontrollstrukturen und(inzwischen vllig verpnte) Subroutinen bildeten, zu einer stark strukturierenden Sprachegemausert hat, die sich dem Vorwurf, sie wrde Spagetti-Code frdern, nicht mehr gefallen las-sen muss. So baut sich die Funktionseinheit Programm heute nicht mehr als schlichte Folge vonAnweisungen, Verzweigungen und Sprngen auf, sondern als Sammelsurium sich gegenseitig instreng hierarchischer Organisation aufrufender Funktionen und Prozeduren, also in sich abge-schlossener und gekapselter Untereinheiten mit eng begrenzten und berschaubaren Funktiona-litten. Damit aber nicht genug. Um als Programmiersprache in einer zunehmend objektorien-tiert gestalteten Systemumgebung noch mitmischen zu knnen, muss auch die Mglichkeit einerStrukturierung nach oben hin gegeben sein. Dies bringt den Begriff des Moduls ins Spiel. EinModul vereinigt im Wesentlichen das unter sich, was traditionell als Basic-Programm begriffenwurde: einen als Datei vorliegenden Programmtext, der vom Basic-Laufzeitsystem als eigenstn-dige Programmeinheit behandelt wird. Charakteristikum des Moduls ist, dass es einen eigenenNamensraum darstellt, mithin also Variablen bereitstellen kann, die global in allen Prozedurendes Moduls bekannt sind (Deklaration mit Dim oder Private). Darber hinaus ist auch einExport globaler Variablen und Prozeduren an andere Module (Deklaration mit Public) mg-lich. Auf diese Weise lsst sich in Visual Basic die Gesamtfunktionalitt eines Programms alsAnsammlung kleinerer Programme bzw. Module mit definierten Schnittstellen begreifen. Daseinzelne Modul kann im Zusammenspiel mit anderen Modulen einem hheren Zwecke dienen,aber auch fr sich genommen ein vollstndiges Programm sein. Mit Blick auf die Objektorien-tierung hat das Modul in Visual Basic eine noch weitere sehr wichtige Funktion: Es kann alseigenstndiger komplexer Datentyp (Klasse) auftreten und stellt dafr die Implementation. Eineausfhrliche Diskussion dieses Aspekts finden Sie im Teil Objekte und Klassen (S. 195).

    "%Der Visual-Basic-Programmierer legt fr jedes neue Programm ein Projekt an, welches als orga-nisatorischer Rahmen fr die verschiedenen Module seines Programms fungiert. Damit das Pro-gramm fr sich lauffhig ist, muss eines (und nur eines) dieser Module ein Startobjekt bereit-stellen, das unter PROJEKTEIGENSCHAFTEN auf der Seite ALLGEMEIN anzugeben ist. Der NameObjekt ist hier ein wenig unglcklich gewhlt, weil nicht nur Objekte mit eigenstndigerNachrichtenbehandlung (wie Formulare), sondern auch eine Prozedur mit dem speziellenBezeichner Main zur Auswahl stehen. Ist fr ein Projekt kein Startobjekt definiert, kann derresultierende Code nur als Bibliothek fr andere Programme oder Bibliotheken fungieren. (Eine

  • Arten von Modulen in einem Projekt

    25

    Programm

    e und Module in Visual Basic

    Bibliothek kann allerdings gleichfalls ein Startobjekt bentigen, wenn noch vor dem Aufruf derersten Bibliotheksroutine gegebenenfalls notwendige Initialisierungen durchzufhren sind.)So ergibt sich, dass in Visual Basic geschriebene Programme aus unterschiedlichen Teilenzusammengesetzt sind, die jeweils unterschiedliche Gestalten haben bzw. annehmen knnen:

    Quelltext oder Interpretercode liegt im ASCII-Format vor und kann die Dateierweite-rungen .frm (Formular und MDI-Formular), .bas (Programmmodul), .ctl (ActiveX-Steuerelement) oder .cls (Klassenmodul, ActiveX-Komponente) haben. Zur Ausfhrungdes Quelltextes im Visual-Basic-Interpreter sind darber hinaus je Quelltext eine Pro-jektdatei (.vbp) und bei Gruppierung mehrerer Projekte zu einem Ganzen eine Gruppie-rungsdatei (.vbg) vonnten.

    Compilercode liegt als ausfhrbarer Maschinencode oder P-Code vor und kann dieDateierweiterungen .exe (Ausfhrbare Datei oder prozessexterne ActiveX-Kompo-nente), .dll (dynamische Bibliothek oder prozessinterne ActiveX-Komponente) oder.ocx (ActiveX-Steuerelement) tragen.

    & $ # "%Visual Basic unterscheidet mehrere Arten von Modulen. Um einem bestehenden Projekt einweiteres Modul hinzuzufgen, finden sich im Men PROJEKT der Entwicklungsumgebung ent-sprechende Eintrge. Mit Ausnahme von Standardmodulen des Typs Modul sowie allgemeinenKlassenmodulen setzt sich ein Modul aus einer Codekomponente und einer Objektkomponente(lies: sichtbare Reprsentation) zusammen. Die Bearbeitung der Codekomponente erfolgt imASCII-Editor und die Bearbeitung der Objektkomponente im Designerfenster der integriertenEntwicklungsumgebung Visual Studio.Standardmiges Modul fr die Programmierung kleiner Anwendungen mit Ein- und Ausgabe-funktionalitt ist das Formular. Sein Charakteristikum ist, dass seine Funktionalitt im Wesent-lichen auf ein einzelnes Fenster ausgerichtet ist, das ihm als Eingabe- und Ausgabemediumdient. Nachdem ein Formularmodul zur Laufzeit durch ein Formularobjekt mit eigenstndigerNachrichtenbehandlung reprsentiert wird, kann jedes Formularmodul formal zum Startobjekterklrt werden. (Natrlich muss dann auch das Design sowie die Logik des Formulars auf dieseEigenschaft zugeschnitten sein.) Somit kann ein aus einem einzelnen Formularmodul bestehen-des Projekt bereits als vollstndiges, interaktives Visual-Basic-Programm auftreten. Sie erhaltenein solches Minimalprojekt (mit geeignet definiertem Startobjekt), wenn Sie ein Projekt desTyps Standard-EXE anlegen. Mit dieser Konstellation kommt das Formularmodul dem tra-ditionellen Basic-Programm am weitesten entgegen, auch wenn die Programmiertechniken frdie Ein- und Ausgabe unter Windows doch erheblich anders aussehen als vergleichsweise nochunter DOS. Eine Anleitung, wie ltere, noch mit QBasic geschriebene Basic-Programme unterVisual Basic zum Laufen gebracht werden, findet sich zu Anfang des Praxisteils.Eine andere, gleichfalls auf die Arbeit mit Fenstern ausgerichtete Modulart ist das MDI-Formu-lar. Es unterscheidet sich vom gewhnlichen Formularmodul darin, dass es das Rstzeug fr dieProgrammierung mit einem Hauptfenster und beliebig vielen weiteren, ersterem untergeordne-ten Fenstern sozusagen bereits mitbringt. MDI-Formularmodule kommen dementsprechenddann zum Einsatz, wenn es um die Darstellung und Verwaltung mehrerer Dokumente (Formu-larmodule) unter einem gemeinsamen Dach (MDI-Formularmodul) geht. Weitere Informa-tionen hierzu im Abschnitt Selbst definierte Klassen auf Seite 318.Die schlichte Bezeichnung Modul fr die dritte Modulart verrt bereits, dass es sich hierbei umein unspezifisches Standardmodul handelt. Ein solches Modul kann beispielsweise die Logik frdie Koordination weiterer Module enthalten oder schlicht als Bibliothek fr von allen Moduleneines Projekts gemeinsam genutzte Funktionen, Prozeduren, Variablen, Typen und Konstantenfungieren.

  • Programme und Module in Visual Basic

    26

    Prog

    ram

    me

    und

    Modu

    le in

    Vis

    ual B

    asic

    Geheimnisvoller ist die Bezeichnung Klasse fr die vierte Modulart. Sie ist dafr gedacht, die neumit Visual Basic hinzugekommene Seite der objektorientierten Programmierung aktiv zu bedie-nen, sprich, eigene Objekte zu implementieren. Sieht man ein Objekt als Kombination aus einembenutzerdefinierten Datentyp und den zugehrigen Operationen ber diesem Datentyp an, wirddie Rolle des Klassenmoduls schnell deutlich. Es beherbergt die Beschreibung des Objektdaten-typs hinsichtlich seiner Reprsentation und seiner Methoden (lies: Funktionen und Prozeduren).Weitere Informationen hierzu im Abschnitt Selbst definierte Klassen auf Seite 318.Die Modulart Benutzersteuerelement ist dem Bereich der ActiveX-Programmierung zuzurech-nen. Sie erlaubt die Bereitstellung eigener Steuerelemente im OCX-Format, deren Funktionalittim (allerdings recht reichhaltigen) Angebot der unter Windows allgemein verfgbaren Steuer-elemente nicht enthalten ist. Anders als ein Formular ist ein Benutzersteuerelement im Allgemei-nen nicht dazu da, ein komplettes Fenster darzustellen, sondern wie der Name schon sagt nur ein Steuerelement, das sich auf einem Formular platzieren lsst. Aus diesem Grund besitztein Benutzersteuerelement fr gewhnlich weder Menleisten, Symbolleisten und andere Dinge,die bei Formularen anzutreffen sind, noch ein feste Gre. Vergleichbar mit den Standard-steuerelementen, werden die sichtbaren Abmessungen eines Benutzersteuerelements erst beiPlatzierung des fertigen Steuerelements im Verlauf des Formularentwurfs oder programmge-steuert festgelegt. Das Benutzersteuerelementmodul enthlt die gesamte Logik eines Benutzer-steuerelements sowie die Schnittstellendefinition fr den Datenaustausch (Eigenschaften). Wiedas Formular Minimalbestandteil des Projekttyps Standard-EXE ist, so ist das Benutzer-steuerelement Minimalbestandteil des Projekttyps ActiveX-Steuerelement.Auch die Modulart Eigenschaftsseite fllt in den Bereich der ActiveX-Programmierung. Acti-veX-Steuerelemente haben oft komplexe Eigenschaften (so etwa zusammengesetzte Datentypenoder Objekte), deren Darstellung im standardmigen Fenster Eigenschaften der Entwicklungs-oberflche nicht mehr erfolgen kann. Fr diesen Fall besteht die Mglichkeit, eine oder mehrereEigenschaftsseiten fr die Eingabe der Eigenschaften bereitzustellen. Da ein ActiveX-Steuerele-ment, das beim Entwurf eines Formulars, eines anderen Steuerelements oder einer anderenKomponente in den Entwurfbereich gezogen wird, standardmig (als Entwurfsinstanz) zurAusfhrung kommt, steht insbesondere auch der hinter einer Eigenschaftsseite steckende Codezur Verfgung. Eine Eigenschaftsseite lsst sich wie ein Formular unter Verwendung vonSteuerelementen im Designerfenster der Entwicklungsumgebung zusammenstellen und imCode-Editor mit der entsprechenden Logik fr den Datenaustausch mit einem ActiveX-Steuer-element, aber auch mit mehreren ActiveX-Steuerelementen (bei Mehrfachauswahl von ActiveX-Steuerelementen im Designerfenster, denen die gleiche Eigenschaftsseite zugeordnet ist) verse-hen.Die letzte Modulart, Designer, ist mehr oder weniger ein Sammelbecken fr die verschiedenstenObjekte. Visual Basic hlt fr jedes dieser Objekte ein Designer-Werkzeug bereit, das hnlichdem Formulardesigner die interaktive visuelle Gestaltung der Objektkomponente ermglicht.Wie beim Formular wird in der Codekomponente eines solchen Objekts seine spezifische Reak-tion auf bestimmte Ereignisse festgelegt. Unter den Werkzeugen finden sich der DHTML-Desi-gner fr den Entwurf und die Programmierung dynamischer HTML-Seiten, der Data-Report-Designer fr den Entwurf und die Programmierung von Datenberichten, der Data-Environ-ment-Designer fr die interaktive Gestaltung und das Management der Datenumgebung frDatenbankverbindungen mit programmgesteuerten Datenzugriffen sowie der WebClass-Desig-ner fr die Bereitstellung von Active Server Pages (.asp-Dateien) im Zusammenhang mit verteil-ten Anwendungen im Internet oder Intranet und dem Internet Information Server.

    ...................................................Tipp

    Tipp

    Module sind ein sehr geeignetes Mittel fr die Strukturierung von Programmcode hinsichtlichseiner Wiederverwendbarkeit. Die Vielfalt der unter Visual Basic vorhandenen Modularten fr-

  • Literale und Konstanten

    27

    Literale und Konstanten

    dert zwar bereits von sich aus die modulare Programmierung, ersetzt aber verstndlicherweisenicht die bewusste Aufteilung des Codes in spezifische und allgemein verwendbare Programm-texte. Wer sich beizeiten vernnftige Bibliotheken anlegt, kann spter um so mehr davon profi-tieren.

    ...................................................Beis piele

    Beispiele

    Das einfache Projekt Modultest besteht aus zwei Modulen, einem gewhnlichen Modul Module1und einem Formularmodul Form1. Module1 enthlt eine Startprozedur namens Main, die im Dia-log PROJEKTEIGENSCHAFTEN als Startobjekt spezifiziert ist. Form1 enthlt dagegen nichts weiterals eine Schaltflche Beenden zum Beenden des Formulars. In diesem Programm ruft Main alsStartobjekt Form1 zweimal hintereinander als gebundenes Formular auf und passt dazu denFenstertitel entsprechend an. Whlt man Form1 als Startobjekt, erfolgt nur ein Aufruf des For-mulars, whrend das Modul Module1 gar nicht erst zur Ausfhrung kommt:

    ' Projekt: Modultest

    ' vollstndiger Code von Module1Sub Main() ' Main ist Startobjekt des ProjektsDim f As New Form1 f.Caption = "Erster Aufruf" ' Ldt Formular Form1 in Hauptspeicher f.Show 1 ' Zeigt Formular an und wartet, bis dieses endet f.Caption = "Zweiter Aufruf" f.Show 1 ' Zeigt Formular an und wartet, bis dieses endetEnd Sub

    ' vollstndiger Code von Form1 ' Formular enthlt Schaltflche "Beenden"Private Sub Beenden_Click() Unload MeEnd Sub

    Das in den folgenden beiden Abbildungen gezeigte Projekt EuroDMTestprojekt besteht auszwei Modulen, einem einfachen Formularmodul und einem Benutzersteuerelementmodul. DasProgramm testet ein Benutzersteuerelement namens EuroDM, welches die Ein- und Ausgabevon Geldbetrgen wahlweise in DM oder Euro gestattet. Der Einfachheit halber wurde auf eineRundung und eine Korrektur der Punkt-/Komma-Problematik verzichtet. Das aus zwei Text-und zwei Bezeichnungsfeldern bestehende Benutzersteuerelement rechnet Eingaben in der einenWhrung automatisch in die andere um und erlaubt die Definition und Abfrage seiner beidenTextfelder ber die Eigenschaften Euro und DM. Da die Textfelder eine gegenseitige Wertnde-rung im Rahmen ihrer Change-Behandlung vornehmen, sind ein wenig Logik und die globaleZustandsvariable Changing ntig, um eine Endlosschleife zu verhindern.

    '[Public | Private] Const ConstName [As Typ] = Literal [Public | Private] Const ConstName [As Typ] = LiteralerAusdruck

  • Literale und Konstanten

    28

    Lite

    rale

    und

    Kon

    stan

    ten

    ...................................................Bes c hreibung

    Beschreibung

    Die elementarste Unterscheidung bei der Datenverarbeitung, an der selbst einfachste Taschen-rechner nicht vorbeikommen, ist die zwischen Daten und Befehlen. Als Datum bezeichnet mandie Reprsentation eines Werts in einem spezifischen Datenformat (Datentyp). Ein Datum kannals Literal, als Konstante oder als Variable vorliegen. Im Falle des Literals steht der Wert frsich selbst, etwa wie 42 fr die Zahl Zweiundvierzig oder Rudolf fr den Vornamen desAutors dieses Buches. Im Falle der Konstanten hat man es genau genommen gleichfalls miteinem Literal zu tun, da der Interpreter bzw. Compiler jedes Vorkommen einer Konstanten imQuelltext automatisch durch ihren literalen Wert ersetzt. Variablen sind dagegen auf einbestimmtes Datenformat (Datentyp) zugeschnittene Behlter, die einen Bezeichner (lies: einenNamen) tragen und einen (in dem bestimmten Datenformat gehaltenen) Wert enthalten. Wh-rend sich der Wert eines Literals oder einer Konstanten im Programmverlauf nicht ndernkann, weil wenn man so will Bezeichner und Wert identisch sind, kann eine Variable (im

    Testprojekt fr das Benutzersteuerelement EuroDM im Entwurfsmodus

    Das Benutzersteuerelement EuroDM im Einsatz

  • Literale und Konstanten

    29

    Literale und Konstanten

    Rahmen ihres Datenformats) unter Beibehaltung ihres Namens jederzeit ihren Wert ndern.Anders gesagt: Ein Literal ist ein Wert, eine Konstante steht fr einen Wert und eine Variableenthlt einen Wert.Ein Befehl ist eine allgemeine Vorschrift fr die Manipulation von Daten im weitesten Sinneund wird in Visual Basic hufig mit der so genannten Anweisung gleichgesetzt (vgl. Anweisun-gen, S. 33). So ist beispielsweise die Zuweisung eines Werts an eine Variable, die so genannteZuweisungsoperation mit = ebenso ein Befehl wie die Ausgabe einer Grafik mit automati-scher Grenanpassung in ein Bildfeld, das auf einem Formular gelegen ist. Als Operationenbezeichnet man dagegen eine besondere Art von Befehlen, bei der ein Operator (lies: Rechen-vorschrift) auf einen oder mehrere Operanden (lies: Werte einer bestimmten Art) angewendetwird und einen neuen Wert (gleicher Art) produziert so etwa die Bildung der Summe zweierZahlen, die Verkettung von Zeichenfolgen, die Restwertdivision (Modulo-Rechnung) oder, wiegesagt, die Zuweisung eines Werts an eine Variable. Ist ein Wert so notiert, dass er erst durchAnwendung von Operatoren auf Operanden berechnet werden muss, spricht man von einemAusdruck. Sind die Operanden als Literale notiert, spricht man genauer von einem literalenAusdruck.

    ...................................................Anwendung

    Anwendung

    Ein Literal kann berall dort stehen, wo ein Wert erforderlich ist so bei Zuweisungen alsRechtswert (lies: rechts von Gleichheitszeichen), in Ausdrcken als Operand, bei Funktions-und Prozeduraufrufen als Argument fr einen Parameter.Fr die Notation literaler Gren gibt es feste Regeln, die sich auch von Datentyp zu Datentypunterscheiden knnen.So sind Zeichenfolgenliterale in doppelte Anfhrungszeichen einzuschlieen, und damit es zukeiner Verwechslung zwischen dem doppelten Anfhrungszeichen als Zeichen und dem Zei-chenfolgenende kommt, muss das Anfhrungszeichen doppelt notiert werden, wenn es als Zei-chen auftritt.

    strMyName = "Rudolf Huttary"Position$ = "Das Schiff liegt 2 3' und 42"" Ost"

    Zahlenliterale knnen Sie in dezimaler Schreibweise, wie gewohnt:

    Const cMaxSize = 255

    in hexadezimaler Schreibweise durch Voranstellen von &H:

    Const cMaxSize = &HFF ' dezimaler Wert 255

    oder in oktaler Schreibweise durch Voranstellen von &O notieren:

    Const cMaxSize = &O377 ' dezimaler Wert 255

    Die dezimale Notation von Zahlenliteralen mit Nachkommastellen erfolgt mit Dezimalpunkt.(Achtung: In Zeichenfolgen, die spter implizit oder mittels einer Funktion wie Val umgewan-delt werden, gelten jedoch die Lndereinstellungen, so dass hier auf einem deutschen System einKomma zu notieren ist.) Etwaige Zehnerpotenzen sind, durch ein E abgetrennt, an die Dezi-maldarstellung anzuhngen. Positive Vorzeichen knnen Sie weglassen; negative Vorzeichenstellen Sie jeweils dem Wert voran, fr den sie gelten.

    Const delta = -2.14E-27 ' Minus 2 Komma 14 mal 10 hoch Minus 27

  • Literale und Konstanten

    30

    Lite

    rale

    und

    Kon

    stan

    ten

    Der standardmige Datentyp von Zahlenliteralen ist Integer bzw. bei vorhandenen Nach-kommastellen Single. Um einen anderen Datentyp zu erzwingen, knnen Sie dem literalenWert ein Typkennzeichen anhngen.

    Const cAlpha = 100& ' cAlpha ist vom Typ LongConst cBeta = 100! ' cBeta ist vom Typ SingleConst cGamma = 100# ' cGamma ist vom Typ Double

    Nicht ganz so eingngig sind die Regeln fr die Notation von Datumsliteralen.Werte dieses Typs reprsentiert Visual Basic als 64-Bit-Gleitkommazahlen (8 Bytes) nach IEEEund kann somit Datumsangaben im Bereich zwischen dem 1. Januar 100 und dem 31. Dezem-ber 9999 sowie Uhrzeiten im Bereich von 0:00:00 bis 23:59:59 unterscheiden. Datumsliteraleknnen Datumsangaben und Zeitangaben kombinieren, aber auch je einzeln ausdrcken. DerNotation literaler Datums- und Zeitangaben liegt das amerikanische Format zugrunde, dasheit, in Datumsangaben wird der Monat vor dem Tag notiert und die Abtrennung erfolgtdurch das Zeichen /, und Zeitangaben sind in 12-Stunden-Darstellung gefolgt von PModer AM zu treffen. Zudem ist die Darstellung durch ein fhrendes und abschlieendes Zei-chen # einzuschlieen. (Der Editor erkennt brigens auch andere Darstellungen, so etwa#1 Feb 99#, und korrigiert diese beflissen in das erwnschte Format.)

    Dim a As Date, b As Date, c As Datea = #2/1/1996 1:12:01 PM#b = #12:01:00 PM#c = #2/1/1996#

    Konstanten lassen sich wie Literale berall dort einsetzen, wo ein Wert erforderlich ist.Gegenber Literalen bieten sie den Vorteil, dass der Wert, fr den sie stehen, an zentraler Stelledefiniert und fortan formal durch Angabe des Konstantenbezeichners notiert werden kann. DieDefinition einer Konstanten erfolgt zur Entwurfszeit im Rahmen einer Const-Anweisung durchZuweisung eines Literals oder eines literalen Ausdrucks an einen Konstantenbezeichner. Bei derWahl des Konstantenbezeichners gelten die blichen Vorschriften fr die Bezeichnerwahl (vgl.Bezeichner und Namensraum, S. 34). Es ist legitim, bei der Definition von Konstanten,andere, bereits definierte Konstanten als Rechtswerte oder als Operanden in Ausdrcken zuverwenden.

    Const MinSize = 8 ' MinSize steht fr den Wert 8Const MaxSize = MinSize + 2741 ' MaxSize steht fr den Wert 2749

    ...................................................Warnung

    Warnung

    Wer denkt, dass die Konstantendeklarationen

    Const a = 65535

    und

    Const b = &HFFFF

    identisch sind, der irrt. a steht fr die Zahl 65535 (wie notiert), b jedoch fr -1. Das liegt daran,dass Visual Basic a implizit den Datentyp Long und b den Datentyp Integer zuordnet und derWert -1 aufgrund der Reprsentation negativer Zahlen durch Zweierkomplementbildung diehexadezimale Darstellung &HFFFF hat. Damit beide Konstanten den gleichen Wert erhalten, istdie hexadezimale Darstellung so zu notieren:

    Const b = &H0FFFF

  • Literale und Konstanten

    31

    Literale und Konstanten

    In Basic existiert nur formal ein Unterschied zwischen der bitweisen Operation und der logi-schen Operation, da die Reprsentation logischer Werte genau so gewhlt ist, dass eine bitweiseOperation die jeweilige logische Operation hervorbringt.

    Const a = Not 2 ' a steht fr -3 (Zweierkomplement)

    und

    s% = -3 And 42 Or 1 ' s% erhlt den Wert 41

    Die von Visual Basic verwendete interne Reprsentation fr Datumswerte kann mit folgenderKapriole aufwarten: Der 30. Dezember 1899 ist nicht darstellbar. Visual Basic interpretiert die-sen Tag vielmehr als reine Zeitangabe #12:00:00 AM#.

    ...................................................Tipps

    Tipps

    Vermeiden Sie im Programmtext nach Mglichkeit die Verwendung von Literalen und arbeitenSie mit Konstanten, die Sie jeweils zu Anfang des Moduls im Bereich ALLGEMEIN (seltener: zuAnfang einer Prozedur) definieren. Auf diese Weise knnen Sie den Wert eines Literals an zen-traler Stelle mit globaler Wirkung fr den gesamten Programmtext ndern.

    Const cMaxSize = 255...For x = 0 to cMaxSize

    Um fr Konstanten einen bestimmten Typ zu erzwingen, erklren Sie diesen entweder durch dieAngabe eines Typkennzeichens oder durch eine explizite Typdeklaration.

    Const cMaxSize As Integer = 255

    Bildet ein literaler Wert die Grundlage fr einen weiteren literalen Wert, so empfiehlt es sich,den zweiten Wert als Ausdruck zu schreiben, der auf den ersten aufbaut, oder anstelle des zwei-ten Literals eine Variable einzusetzen und deren Wert rechnerisch aus dem ersten Literal zuermitteln.

    Const cMinSize = 100' Const cMaxSize = 199 ' falschConst cMaxSize = 2 * cMinSize 1 ' richtig

    Const cVerschlsseltesKennWort = "2XVf5uhf"' Const KennwortLnge = 8 ' falsch...Dim KennwortLnge As Integer KennwortLnge = Len(cVerschlsseltesKennwort) ' richtig

    Visual Basic besitzt eine sehr reichhaltige Flle an vordefinierten Konstanten (auch Objektkon-stanten), deren Einsatz nicht nur ein Garant fr Kompatibilitt ist, sondern auch (gerade imZusammenhang mit Objektkonstanten) zu Laufzeitverbesserungen fhrt. Einen berblick berdiese Konstanten gibt der Objektkatalog (aufzurufen ber ANSICHT/OBJEKTKATALOG oder (F2)).

    ...................................................Beis piel

    Beispiel

    Das folgende vollstndige Programm Apfelmann, eine stark vereinfachte Version des mehrfachin diesem Buch diskutierten Apfelmnnchens, demonstriert den Umgang mit literalen Werten.Da das Programm whrend der Berechnung keine Aktualisierung der Anzeige vornimmt,erscheint das Bild erst nach Abschluss aller Berechnungen es sei denn, man fgt einen Show-Aufruf in die Load-Routine ein und setzt die AutoRedraw-Eigenschaft des Formulars auf False.

  • Literale und Konstanten

    32

    Lite

    rale

    und

    Kon

    stan

    ten

    ' Bereich AllgemeinConst cx1 As Double = -2.1 ' Bildausschnitt des ApfelmnnchensConst cy1 As Double = -1.2Const cx2 As Double = 0.7Const cy2 As Double = 1.2Const cFenster_x = 4000 ' Fensterabmessungen nicht zu groConst cFenster_y = 3600 ' sonst dauert es zu langeConst cMaxIterat As Integer = 200Const cGrenze As Double = 100

    Private Sub Apfel(m_x1, m_x2, m_y1, m_y2, step_x, step_y)Dim r1 As Double, re As Double, im As DoubleDim zr As Double, zi As Double, it As Integer

    For zr = m_x1 To m_x2 Step step_x ' alle Spalten in x-Richtung For zi = m_y1 To m_y2 Step step_y ' alle Punkte in Spalte zr re = 0 ' Realteil initialisieren im = 0 ' Imaginrteil initialisieren For it = 0 To cMaxIterat ' Iteration fr Punkt r1 = re * re im * im + zr im = 2 * re * im + zi re = r1 If re < -cGrenze Or re > cGrenze Or _ im < -cGrenze Or im > cGrenze Then PSet (zr, zi), it * 16 ' Punkt ausgeben Exit For End If Next it Next zi Next zrEnd Sub

    Private Sub Form_Load()Dim step_x As Double, step_y As Double Width = cFenster_x ' Fensterabmessungen anpassen Height = cFenster_y' AutoRedraw = False' Show ScaleMode = vbPixels ' Ab jetzt Bildpunkte als Einheit step_x = (cx2 cx1) / ScaleWidth ' Breite eines Bildpunkts step_y = (cy2 cy1) / ScaleHeight ' Hhe eines Bildpunkts Scale (cx1, cy1)-(cx2, cy2) ' Koordinatensystem vorgeben Apfel cx1, cx2, cy1, cy2, step_x, step_y ' Apfelmnnchen berechnenEnd Sub

    ...................................................Verwandte Befehle

    Verwandte Befehle

    Dim, Public, Private, ReDim

    ...................................................Verwandte Themen

    Verwandte Themen

    Datentypen und ihre Operationen (S. 49); Operatoren fr elementare Datentypen und logi-sche Bedingungen (S. 54); Anweisungen (S. 33); Bezeichner und Namensraum (S. 34)

  • Anweisungen

    33

    Anweisungen

    &_ (Operator fr bertrag in nchste Zeile)

    : (Operator fr Aneinanderreihung von Anweisungen)

    [Let] Var = Wert

    Rem Kommentar ' Kommentar

    #If Ausdruck ThenAnweisungsfolge1[#Else | ElseIf AusdruckN AnweisungsfolgeN#End If

    ...................................................Bes c hreibung

    Beschreibung

    Der Quelltext eines Visual-Basic-Moduls setzt sich aus einer Folge von Anweisungen zusam-men.Unter einer Anweisung versteht man in Visual Basic alles, was einen Befehl darstellt, ohne selbsteinen Wert zu verkrpern. Man unterscheidet zwischen einfachen Anweisungen, die in einereinzelnen Zeile stehen knnen, und Kontrollstrukturen, die als zusammengesetzte Anweisungenihrerseits Anweisungsfolgen strukturieren und auf hherer Ebene zu einer logischen Einheitzusammenfassen.Eine besondere Anweisungsform stellen Compileranweisungen dar, denen das Zeichen # voran-geht (#If Then...#Else...#End If). Sie werden nicht erst zur Laufzeit, sondern bereits zurbersetzungszeit interpretiert und fhren dazu, dass bestimmte Teile des Codes gar nicht erstbersetzt werden. Ausdrcke in solchen Anweisungen drfen nur aus Literalen und Konstantenzusammengesetzt sein. Visual Basic definiert in diesem Zusammenhang die Boolean-KonstantenWin16 und Win32, deren (jeweils gegenstzlicher) Wahrheitswert ausdrckt, ob die bersetzungauf einer 16-Bit- oder 32-Bit-Plattform erfolgt.

    ...................................................Anwendung

    Anwendung

    Zu den einfachen Anweisungen zhlen Zuweisungsoperationen (Let, Set, LSet, RSet Mid), Pro-zeduren (vordefinierte und benutzerdefinierte), Deklarationen (Const, Dim, Private, Public,Declare) und Definitionen (Function, Sub) aller Art. Alles, was Visual Basic als einfache Anwei-sungen betrachtet, kann als eigenstndige Programmzeile stehen. berlange einfache Anweisun-gen lassen sich mittels des bertragsoperators _ (Unterstrich) in zwei oder mehrere Zeilen auf-teilen. Dabei muss der bertragsoperator durch ein Leerzeichen getrennt als letztes Zeichen inder Zeile notiert sein und darf insbesondere keine Zeichenfolgenliterale trennen. MehrereAnweisungen lassen sich in eine Zeile stellen, wenn zwischen den Anweisungen der Aneinan-derreihungsoperator : (Doppelpunkt) notiert ist.Eine Kontrollstruktur ist eine zusammengesetzte Anweisung, die sich ber mehrere Zeilen hin-weg erstrecken kann und eine Rahmung untergeordneter Anweisungsfolgen mittels Schlssel-wrtern vorsieht, entsprechend den die Kontrollstruktur geltenden syntaktischen Regeln. ImFalle der If-Anweisung akzeptiert Visual Basic sowohl die kompakte Zeilenform als auch einemehrzeilige Form.Rem-Anweisungen sind nur aus formaler Sicht Anweisungen. Eigentlich stellen sie Kommentaredar, da sie der Compiler bei der bersetzung ebenso ignoriert wie Kommentare, die durch einHochkomma ' eingeleitet sind.

  • Bezeichner und Namensraum

    34

    Beze

    ichn

    er u

    nd N

    amen

    srau

    m

    ##Bezeichner, Namensraum, Schlsselwrter

    Private, Public, Dim

    ...................................................Bes c hreibung

    Beschreibung

    Bezeichner fungieren in Visual Basic als formale Namen fr verschiedenen Gren: Konstanten,Variablen und Objekte, Funktionen und Prozeduren (Methoden) sowie Module. Bei der Wahleines Bezeichners fr eine bestimmte Gre geniet der Programmierer weitestgehende Freihei-ten. Er muss lediglich die formalen Regeln zur Bezeichnerbildung einhalten und auf Eindeutig-keit im jeweiligen Namensraum achten. Zudem verbietet sich die Verwendung der von VisualBasic reservierten Schlsselwrter, die von der Sprache selbst mit einer festen Bedeutung belegtsind.Die formalen Regeln fr die Bezeichnerbildung in Visual Basic sind:

    Bezeichner drfen zwischen ein und 255 Zeichen lang sein Bezeichner mssen mit einem Buchstaben beginnen, wobei auch deutsche Umlaute und

    Sonderzeichen (genau genommen sogar alle ANSI-Zeichen mit einem Code zwischen128 und 255) erlaubt sind.

    Fr alle weiteren Zeichen sind darber hinaus auch die Ziffern 0 bis 9 und derUnterstrich _ erlaubt.

    Visual Basic unterscheidet in der Notation von Bezeichnern nicht zwischen Gro- undKleinschreibung. MyVar und Myvar bezeichnen somit dasselbe. (Der Editor der integrier-ten Entwicklungsumgebung setzt allerdings auf Modulebene eine konsistente Schreib-weise durch, indem er jeweils die bei der Deklaration eines Bezeichners verwendeteSchreibweise erzwingt und bei implizit deklarierten Bezeichnern jeweils die zuletzt ver-wendete Schreibweise fr alle Vorkommen des Bezeichners bernimmt.)

    Als Namensraum eines Bezeichners wird der Bereich bezeichnet, innerhalb dessen ein Bezeich-ner bekannt ist. Der grte Namensraum ist der so genannte globale Namensraum oder dieProgrammebene. Bezeichner, die diesem Namensraum angehren, sind in allen Modulen einesProgramms bekannt und somit global ansprechbar. Jeweils kleinere Namensrume sind dieModulebene und Prozedurebene. Bezeichner, deren Namensraum auf die Modulebenebeschrnkt ist, sind nur innerhalb des Moduls bekannt, in dem sie deklariert wurden, undBezeichner, deren Namensraum auf die Prozedurebene beschrnkt ist, sind nur innerhalb derProzedur (bzw. Funktion) bekannt, in dem sie deklariert wurden.Bei Bezeichnerkonflikten, die durch die Wahl gleicher Bezeichner fr unterschiedliche Grenin berlappenden Namensrumen unterschiedlicher Stufe entstehen, ist im kleineren Namens-raum immer nur der in diesem Namensraum deklarierte Bezeichner sichtbar.

    ...................................................Anwendung

    Anwendung

    Whrend Modulbezeichner von vornherein dem globalen Namensraum angehren, mssenProzeduren, Funktionen und Methoden explizit mit dem Zusatz Public deklariert werden,damit ihr Bezeichner im globalen Namensraum sichtbar wird. Geschieht die Deklaration dage-gen mit dem Zusatz Private oder ohne Zusatz, ist ihr Bezeichner jeweils immer nur innerhalbdes Moduls bekannt, das den Quelltext enthlt. Die vielfltigsten Mglichkeiten fr die Gestal-tung des Namensraums bieten Konstanten, Variablen und Objekte. Bei impliziter oder explizi-ter Deklaration in einem Prozedur- oder Funktionskrper erstreckt sich der Namensraum desBezeichners ab Deklaration bis zum Endes des Krpers. Findet die Deklaration dagegen aufModulebene (im Bereich ALLGEMEIN) ohne Zusatz oder unter Angabe von Dim oder Privatestatt, ist der Bezeichner fortan im restlichen Teil des Modulkrpers bekannt und insbesondere

  • Bezeichner und Namensraum

    35

    Bezeichner und Namensraum

    auch in allen Funktionen und Prozeduren (bzw. Methoden) sichtbar. Whrend sich derNamensraum einer Konstanten grundstzlich nicht ber mehrere Module erstrecken kann, son-dern maximal auf die Modulebene beschrnkt bleibt, unterliegen Variablen und Objekte dieserEinschrnkung nicht. Damit eine Variable oder ein Objekt im globalen Namensraum bekanntwird, muss eine Public-Deklaration auf Modulebene erfolgen.

    ...................................................Warnung

    Warnung

    Visual Basic betrachtet es nicht als Fehler, wenn Sie ein und denselben Bezeichner in verschiede-nen Namensrumen vergeben. Solange die Namensrume nichts miteinander zu tun haben,wird dies keine allzu groe Verwirrung stiften, ja, vielfach sogar Vorteile bringen. Problema-tisch wird es allerdings, wenn ein Namensraum den anderen umfasst, wie etwa die Modulebeneeine Prozedurebene. In diesem Fall wird die auf Modulebene deklarierte Variable in der Proze-durebene unsichtbar, weil ihr Bezeichner durch die lokal in der Prozedur deklarierte Variableverdeckt ist. Dies ist meist zu verschmerzen, oft sogar auch gewollt. Fehlertrchtig wird esallerdings, wenn der Programmierer auf eine implizite Deklaration auf Prozedurebene setzt undunwissentlich oder fahrlssig den Bezeichner einer global deklarierten Variable erwischt. Sofhrt beispielsweise der folgende Code zu unangenehmen Nebeneffekten:

    Dim x As Single, y As Single...Sub BerechneMatrix(a(), b())... For x = 1 To 100 For y = 1 To 200 ... Next x, yEnd Sub

    Die Variablen x und y werden hier leichtfertig und im Vertrauen auf die implizite Deklarationals Zhlvariablen eingesetzt. Eine solche findet aber nicht statt, da unter diesen Bezeichnernglobale Variablen bekannt sind. Diese verlieren durch die Schleifen leider ihren Wert, was anvllig anderer Stelle seltsame Nebeneffekte hervorbringen kann. Deshalb immer fleiig dekla-rieren und auf globaler Ebene keine nichtssagenden 08/15-Bezeichner vergeben.

    ...................................................Tipp

    Tipp

    Wer die Wahl hat, hat die Qual. Dieser Spruch bewahrheitet sich insbesondere, wenn es darumgeht, sich immer wieder neue Bezeichner auszudenken. Eine gute Hilfe ist es, sich dabei von for-malen Kriterien leiten zu lassen und bei der Auswahl darauf zu achten, dass ein Bezeichnermglichst viel ber die Gre aussagt, fr die er steht. Um Konstanten, Variablen und Prozedu-ren besser auseinander halten zu knnen, folgen viele Programmierer daher bei der Bildung vonBezeichnern bestimmten Konventionen. So hat es sich beispielsweise bewhrt, Konstantenimmer in Groschreibung zu notieren, Variablen mit einem Kleinbuchstaben beginnen zu lassenund Prozeduren mit einem Grobuchstaben. Sehr verbreitet ist zudem die so genannte ungari-sche Notation, die durch Bezeichnerprfixe den zu einem Bezeichner gehrigen Datentyp zumAusdruck bringt. Variablen vom Typ Integer wrden mit einem i beginnen, Variablen vomTyp String mit einem s oder str usw. Der restliche Teil des Bezeichners kann dann noch ingemischter Gro- und Kleinschreibung notiert werden, um seine Funktion mnemonisch besserzum Ausdruck zu bringen. (Diese Schreibweise wird inzwischen der frher weit verbreitetenZusammensetzung mit Unterstrichen _ vorgezogen.) Bei sehr enger Verwandtschaft zweierGren leistet oft auch die Abzhlung durch Anhngen von Ziffern als Suffix gute Dienste.

  • Kontrollstrukturen

    36

    Kont

    rolls

    truk

    ture

    n

    ...................................................Beis piel

    Beispiel

    ' Unterscheidung der Notation durch Klein und GroschreibungConst MAXSIZE = 10 ' Konstanten in Groschreibung Private anzahl As Integer ' Variable in KleinschreibungPrivate ergebnis As Single, werte(MAXSIZE) As SingleFunction StandardAbweichung(a() As Single) As Single

    ' Ungarische Notation Const cMaxSize = 10 ' Prfix "c" fr KonstantePrivate iElemAnzahl As Integer ' Prfix "i" fr IntegerPrivate bChanging As Boolean ' Prfix "b" fr BooleanPrivate frmAnmeldung As Form1 ' Prfix "frm" fr FormularPrivate sErgebnis1 As Single ' Prfix "s" fr Single, AbzhlungPrivate sErgebnis2 As Single ' Prfix "s" fr Single, AbzhlungFunction sStandardAbweichung(a() As Single) As Single

    ...................................................Verwandte Befehle

    Verwandte Befehle

    DefType

    ...................................................Verwandte Themen

    Verwandte Themen

    Datentypen und ihre Operationen (S. 49); Typkennzeichen und Bezeichnerbereiche frTypen (S. 167); Geltungsbereiche von Variablen (S. 173)

    'Aufgabe einer Kontrollstruktur ist die Steuerung der Programmausfhrung in Abweichung vonder im Quelltext notierten Anweisungsfolge.

    ( ) *GoTo {Marke | Zeile}...Marke:

    GoSub SubRoutine...SubRoutine:...Return

    If Bedingung Then Anweisung [Else Anweisung]

    If Bedingung Then [ThenAnweisungsBlock][ElseIf Bedingung1 [ElseIfAnweisungsBlock]]...[Else [ElseAnweisungsBlock]]End If

  • Unbedingte und bedingte Verzweigung, Subroutinen

    37

    Kontrollstrukturen

    ...................................................Bes c hreibung

    Beschreibung

    Die einfachste (inzwischen aber verpnte) Mglichkeit, die Kontrolle einem anderen Pro-grammteil weiterzugeben, ist der unbedingte Sprung mittels GoTo zu einer Sprungmarke oderZeilennummer. Die Anweisung GoSub ermglicht den Aufruf eines Unterprogramms (auch ver-schachtelt), das an der Sprungmarke oder Zeilennummer SubRoutine beginnt und bis zur nchs-ten Return-Anweisung (auf gleicher Ebene) reicht. Sprungmarken und Zeilennummern mssenjeweils innerhalb der gleichen Funktion/Prozedur liegen und am Zeilenanfang stehen. EineSprungmarke ist ein beliebiger Bezeichner gefolgt von einem Doppelpunkt.Die wichtigste Kontrollstruktur zur Steuerung des Programmablaufs ist die bedingte Verzwei-gung in Form der If-Anweisung, fr die zwei unterschiedliche Notationen zulssig sind. In derkrzeren Schreibweise (Zeilenform) muss die Anweisung gegebenenfalls samt Else-Teil ineiner Zeile und ohne abschlieendes End If notiert sein. In der mehrzeiligen Schreibweise istdagegen das abschlieende End If unerlsslich. Die Syntax erlaubt in dieser Form zudemElseIf-Fallunterscheidungen. Die If-Anweisung fhrt den im Then-Zweig gelegenen ThenAnwei-sungsblock aus, wenn die meist als logischer Ausdruck formulierte Bedingung Bedingungeinen Wert ungleich 0 ergibt. Ist der Wert 0, kommt der ElseAnweisungsblock des Else-Zweigeszur Ausfhrung. Der Else-Zweig kann durch Einfgung von ElseIf-Zweigen weiter aufge-spreizt sein, wobei ein ElseIf-Zweig nichts anderes als die optimierte Form einer verschachtel-ten If-Anweisung im Else-Zweig ist. Ergibt sich fr die Bedingung eines ElseIf-Zweiges einWert ungleich 0, kommt der ElseIfAnweisungsblock zur Ausfhrung. Bei vorhandenen ElseIf-Zweigen kommt ein ElseAnweisungsblock nur zur Ausfhrung, wenn alle bis dahin geprftenBedingungen den Wert 0 ergeben haben.

    ...................................................Anwendung

    Anwendung

    Der unbedingte Sprung mit GoTo, aber auch die GoSub-Unterprogramme, zhlen zu den Erblas-ten von Basic, denen die Sprache in ihrer Anfangszeit das Attribut Spagetti-Code zu verdan-ken hatte. In der modernen, strukturierten Programmierung findet in seltenen Fllen nur nochdie GoTo-Anweisung Anwendung, nmlich im Zusammenhang mit der Fehlerbehandlung, woder Befehl im Zusammenspiel mit On Error gezielte Sprnge zu Fehlerbehandlungsroutinenermglicht. Anstelle von GoSub-Unterprogrammen benutzt man heute ausschlielich benutzer-definierte Funktionen und Prozeduren.Anders die If-Anweisung. Sie hat an Wichtigkeit im Laufe der Zeit nichts eingebt. In dermehrzeiligen Form eignet sie sich bei Verwendung von ElseIf-Zweigen fr umfangreichereFallunterscheidungen, auch wenn die Select-Anweisung hier oft die bessere Wahl darstellt. If-Anweisungen knnen natrlich auch vollstndig verschachtelt werden, von der Laufzeit hersind ElseIf-Formulierungen jedoch berlegen.

    ...................................................Warnung

    Warnung

    Aufrufe parameterloser Prozeduren und schlichte Sprungmarken kann Visual Basic von derNotation her nicht unterscheiden, wenn der Doppelpunkt-Operator zur Anreihung mehrererAnweisungen in einer Programmzeile ins Spiel kommt. Visual Basic zieht in diesem Fall dieInterpretation Sprungmarke der anderen vor. Setzen Sie parameterlose Prozeduraufrufedaher besser in eigene Zeilen (ohne nachfolgenden Doppelpunkt) oder benutzen Sie die Call-Anweisung fr den Aufruf.

    ...................................................Beis piel

    Beispiel

    Die folgenden Zeilen zeigen, wie die Logik fr die Berechnung der Sgn-Funktion aussieht:

  • Kontrollstrukturen

    38

    Kont

    rolls

    truk

    ture

    n

    If a > 0 Then a = 1ElseIf a < 0 Then a = -1End If ' fr den Fall a = 0 hat a bereits den richtigen Wert!

    ...................................................Verwandte Befehle

    Verwandte Befehle

    On Error, Select, On ... GoSub

    ...................................................Verwandte Themen

    Verwandte Themen

    Operatoren fr elementare Datentypen und logische Bedingungen (S. 54); Fallunterschei-dung (S. 38); Fehlerbehandlung (S. 43)

    +Select Case TestAusdruck[Case Fall1 [AnweisungsBlock1]]...[Case FallN [AnweisungsBlockN]][Case Else [ElseAnweisungsBlock]]End Select

    Function Switch(Ausdruck1, Wert1,[Ausdruck2, Wert2[, ...]]) As Variant

    Function Choose(Index As Integer, Wert1[, Wert2[,... WertN]]) As Variant

    On Ausdruck GoSub SprungzielListe

    On Ausdruck GoTo Sprungzielliste

    Function IIf(Kriterium As Boolean, ThenWert, ElseWert) As Variant

    ...................................................Bes c hreibung

    Beschreibung

    Die Select Case-Kontrollstruktur fhrt eine Fallunterscheidung auf Basis des Werts von Test-Ausdruck durch. Fr jeden zu unterscheidenden Fall ist ein Case-Zweig mit der AnweisungsfolgeAnweisungsblockN zustndig. Der Case-Ausdruck Fall kann als Konstante/Literal, Is-Vergleich(offener Bereich), To-Bereich (geschlossener Bereich) oder als Fall-Aufzhlung formuliert sein:

    Fall = Zahl | ZeichenfolgeFall = Is VglOperator VglWertFall = Fall1 To FallNFall = Fall1, ..., FallN

    In einer Select-Struktur kommt maximal ein, bei vorhandenem Else-Zweig genau ein Zweigzur Ausfhrung.Die Switch-Funktion fhrt eine Fallunterscheidung auf Basis ihrer in Paaren zu je einem Aus-druck und einem potentiellen Funktionswert organisierten Parameterliste durch. Den Funkti-onswert WertN eines solchen Paares gibt die Funktion zurck, wenn der Ausdruck AusdruckNvon links beginnend der erste Ausdruck ist, der einen von 0 verschiedenen Wert hat, also denWahrheitswert True besitzt. Falls keiner der Ausdrcke ungleich 0 ist, liefert die Funktion denWert Null.

  • Fallunterscheidung

    39

    Kontrollstrukturen

    Die Choose-Funktion liefert den an der Position Index in der Werteliste stehenden Wert derWert 1 whlt Wert1, der Wert 2 whlt Wert2 usw.Die On-Kontrollstruktur ermglicht eine Fallunterscheidung durch Auswahl eines Sprungzielsaus der Liste SprungzielListe in Abhngigkeit von Ausdruck. Der Wert von Ausdruck darf zwi-schen 0 und 255 liegen. Ist er 0 oder grer als die Anzahl der Sprungziele in der Liste, findetkein Sprung bzw. Unterprogrammaufruf statt, ansonsten benennt er die Listenposition desanzusteuernden Sprungziels. Als Sprungziele knnen wahlweise Zeilennummern oder Sprung-marken genannt sein, die in der gleichen Funktion/Prozedur definiert sind.Eine Fallunterscheidung der besonderen Art stellt die Funktion IIf dar. Sie wird mit drei Para-metern aufgerufen und liefert in Abhngigkeit vom Wahrheitswert des ersten Parameters denzweiten Parameter (erster Parameter ist True) oder dritten Parameter (erster Parameter ist False)als Funktionsergebnis.

    ...................................................Anwendung

    Anwendung

    Obwohl sich Fallunterscheidungen prinzipiell gesehen genauso gut ber If-Anweisungen (ver-schachtelt oder mit ElseIf-Zweigen) formulieren lassen, sind Select Case-Formulierungen imAllgemeinen eleganter und bersichtlicher vor allem, wenn viele Flle zu unterscheiden sind.Die Syntax fr die Formulierung der einzelnen Flle ist reichhaltig. Der Compiler nimmt aller-dings keine berprfung auf berlappung vor, so dass auf eine disjunkte Formulierung derFall-Ausdrcke geachtet werden sollte.In einfachen Fllen, wenn sich die Fallunterscheidung (wie bei Arrays) auf die indexorientierteAuswahl eines Werts aus einer Werteliste zurckfhren lsst, sollte die Choose-Funktion dasMittel der Wahl sein. Dieselbe Funktionalitt lsst sich allerdings mittels der Array-Funktionerzielen, wie das Beispiel am Ende des Abschnitts zeigt.Fr Fallunterscheidungen, die auf die Auswahl eines Werts in Abhngigkeit verschiedenerBedingungen hinauslaufen, ist die Switch-Funktion meist das eleganteste Mittel. Die Anwen-dung der Funktion widerspricht aber in gewisser Hinsicht der Intuition, da es grundstzlich zurAuswertung aller Ausdrcke kommt. In der Praxis hat das zwei Auswirkungen: Erstens mussjeder Ausdruck fr jeden Fall wohldefiniert sein (kein berlauf, keine Division durch 0 etc.),sonst kommt es zu einem Laufzeitfehler, und zweitens hat die Funktion unabhngig vom unter-schiedenen Fall immer die gleichen Seiteneffekte.Von einem Gebrauch der On-Anweisung (jenseits von On Error) ist abzuraten, weil GoTo-Sprngeund GoSub-Unterprogramme angesichts der reichhaltigen Ausstattung von Visual Basic fr diestrukturierte Programmierung nicht mehr zeitgem sind. Diese Befehle werden nur noch frdie Abwrtskompatibilitt untersttzt.

    ...................................................Warnung

    Warnung

    Da in Select-Strukturen immer nur ein Case-Zweig zur Ausfhrung kommt, ist im Falle derberlappung von Case-Ausdrcken die Reihenfolge der Case-Aufzhlung relevant.Visual Basic wertet bei Abarbeitung der Switch-Funktion immer alle Ausdrcke aus, so dasseventuelle Seiteneffekte vom Funktionswert unabhngig bleiben.

    ...................................................Beis piel

    Beispiel

    Der folgende Code zeigt die eine Select-Fallunterscheidung fr den von einem Textfeld gemel-deten Tastaturcode:

    Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyDelete, vbKeyBack ' wg. berschreibmodus Case vbKeyUp, vbKeyDown ' Nchste Zeile in Textfeld AktualisiereZeile(sZeile) ' nderungen zurckschreiben

  • Kontrollstrukturen

    40

    Kont

    rolls

    truk

    ture

    n

    Case vbKeyEscape List1_Click ' Ursprngliche Fassung holen Case vbKeyEnd Start = LineLen 1 Case vbKeyLeft Start = LinePos 1 Case vbKeyRight Start = LinePos + 1 Case vbKeyHome Start = 0 Case Else ' Sonstige Tasten VerarbeiteTaste(KeyCode, sZeile) End Select Text1.SelStart = Start ' Position in Puffer aktualisieren Text1.SelLength = 1 ' berschreibmodusEnd Sub

    Hier verschiedene Formulierungen fr die Zuordnung eines numerischen Werts zu einer Zei-chenfolge:

    sZahl = Choose(a + 1, "Null", "Eins", "Zwei", "Drei", "Vier", "Fnf")

    sZahl = Switch(a = 0, "Null", a = 1, "Eins", a = 2, "Zwei", a = 3, _ "Drei", a = 4, "Vier", a = 5, "Fnf")sZahl = Array("Null", "Eins", "Zwei", "Drei", "Vier", "Fnf")(a)

    IIf macht die Min-/Max-Berechnung leicht:

    Min = IIF(a < b, a, b)Max = IIF(a > b, a, b)

    ...................................................Verwandte Befehle

    Verwandte Befehle

    If, GoTo, GoSub

    ...................................................Verwandte Themen

    Verwandte Themen

    Unbedingte und bedingte Verzweigung, Subroutinen (S. 36)

    *!For CountVar = StartVal To EndVal [Step StepVal][Anweisungsfolge][Exit For][Anweisungsfolge]Next [CountVar[, CountVar1]]

    For Each IteratVar In Liste[Anweisungsfolge][Exit For][Anweisungsfolge]Next [IteratVar[, IteratVar1 ...]]

    While Bedingung[Anweisungsfolge][Exit While]

  • Schleifen

    41

    Kontrollstrukturen

    [Anweisungsfolge]Wend

    Do [{While | Until} Bedingung][Anweisungsfolge][Exit Do][Anweisungsfolge]Loop

    Do[Anweisungsfolge][Exit Do][Anweisungsfolge]Loop [{While | Until} Bedingung]

    ...................................................Bes c hreibung

    Beschreibung

    Schleifen sind Kontrollstrukturen, die es gestatten, einen Anweisungsblock oder Schleifenkr-per in Abhngigkeit eines Kriteriums einer logischen Bedingung oder dem Wert einer Zhlva-riablen mehrmals zu durchlaufen. Das klassische Programmiermodell unterscheidet zwischenabweisenden Schleifen, die das Schleifenkriterium im Schleifenkopf vor dem ersten Durchlaufendes Schleifenkrpers prfen (und selbst die einmalige Ausfhrung des Schleifenkrpers unter-binden knnen), und nicht abweisenden Schleifen, die ihr Kriterium nach Abarbeitung desSchleifenkrpers prfen. Visual Basic weicht diese Unterscheidung allerdings auf, indem essprachliche Mittel fr den Schleifenabbruch an beliebiger Stelle vorsieht. Darber hinaus lsstsich zwischen Schleifen unterscheiden, bei denen eine Berechnung der bentigten Schleifen-durchlufe noch vor dem ersten Eintritt in die Schleife mglich ist (Zhlschleifen), und solchen,bei denen diese Berechnung nicht mglich ist (Schleifen mit implizitem Abbruchkriterium).Schleifen, deren Kriterium sich nie erfllt, heien Endlosschleifen. Falls der Schleifenkrpereiner Schleife eine weitere Schleife enthlt, spricht man von verschachtelten Schleifen.

    ...................................................Anwendung

    Anwendung

    Der Einsatzbereich von Schleifen ist derartig breit, dass es wohl nur wenige auch nur halbwegsanspruchsvolle Programme geben wird, die ohne dieses Mittel auskommen. Abweisende Schlei-fen werden in Visual Basic als For-, While- oder Do-Schleifen und nicht abweisende Schleifenausschlielich als Do-Schleifen formuliert. Als Zhlschleife ist die starre Form der For-Schleifeam besten geeignet. Schleifen lassen sich beliebig verschachteln, solange gewhrleistet ist, dasseine uere Schleife den Schleifenkrper einer inneren Schleife jeweils vollstndig enthlt.

    Die For...Next- SchleifeEine For-Schleife kann in einer von zwei Formen benutzt werden. In der ersten Form verlangtsie die Bekanntgabe einer Zhlvariablen (CountVar) eines beliebigen numerischen Typs, einesStartwerts (StarVal), eines Endwerts (EndVal) und gegebenenfalls einer Schrittweite, wenn diesevon der standardmigen Schrittweite 1 abweicht. Der Ablauf ist:

    1. Beim ersten Eintritt der Programmausfhrung in den Schleifenkopf initialisiert die For-Schleife die Zhlvariable mit dem Startwert.

    2. Unmittelbar vor jedem Durchlaufen des Schleifenkrpers prft die Schleife, ob die Zhlvari-able den Endwert bereits berschritten hat. Falls ja, endet die Schleife, und die Ausfhrungberspringt den Schleifenkrper.

    3. Nach jedem Durchlaufen des Schleifenkrpers erfolgt automatisch die Aktualisierung derZhlvariablen unter Beachtung der geltenden Schrittweite.

  • Kontrollstrukturen

    42

    Kont

    rolls

    truk

    ture

    n

    Beachten Sie, dass Sie zwar den Wert der Zhlvariablen jederzeit ndern und somit das Verhal-ten der Schleife von innerhalb des Schleifenkrpers manipulieren knnen, nicht jedoch den gel-tenden Endwert oder die Schrittweite. Von einer solchen Manipulation ist aber generell eherabzuraten, da der Code dann nicht mehr bersichtlich ist. Um eine For-Schleife verfrht abzu-brechen, bedienen Sie sich besser des Befehls Exit For. Als Datentyp fr die Zhlvariable kom-men ganzzahlige Typen wie Integer oder Long in Betracht, ebenso aber auch Fliekommatypenwie Single oder Double. Das beste Laufzeitverhalten hat eine Schleife, wenn die Zhlvariablevom Typ Long ist. Um eine Schleife zum Rckwrtszhlen zu bewegen, geben Sie StepVal miteiner negativen Schrittweite an sowie einen Endwert, der kleiner als der Startwert ist.

    Dim i As Long For i = 10 to 2 Step -2 Print i, i+1 Next i

    In Form der For Each-Schleife ermglicht die For-Schleife das Durchlaufen aller Elemente einerAuflistung Liste. An die Stelle der Zhlvariable tritt die Aufzhlvariable IterateVar, die beijedem Schleifendurchlauf den Wert des jeweils nchsten Elements von Liste annimmt, bis dasEnde der Auflistung erreicht ist. Eine Modifikation der Aufzhlvariable innerhalb des Schleifen-krpers hat keine Auswirkung auf die Aufzhlung. Einzig der vorzeitige Abbruch mittels ExitFor ist mglich. Als Voraussetzungen fr die Anwendung dieser Form sind zu beachten: Listemuss eine Auflistung (Collection-Objekt) oder ein Array sein, und IterateVar muss den Daten-typ Variant oder einen Objektdatentyp tragen.

    Dim a(20) As IntegerDim i As Variant For Each i In a ' Array elementweise initialisieren i = 2 Next i

    Die Nennung der Zhl- bzw. Aufzhlvariablen nach dem Schlsselwort Next ist optional. AlsAbschluss verschachtelter For-Schleifen ist auch die Nennung mehrerer Zhl- bzw. Aufzhlvari-ablen nach dem Schlsselwort Next zulssig.

    Die While...Wend- SchleifeAls Standardlsung fr abweisende Schleifen bietet sich die While-Schleife an. Schleifen dieserArt prfen unmittelbar vor jedem Eintritt in den Schleifenkrper, ob das Kriterium Bedingungeinen Wert ungleich 0 hat. Falls dem so ist, bricht die Schleife ab und die Ausfhrung ber-springt den Schleifenkrper. While-Schleifen lassen sich jederzeit auch von innerhalb des Schlei-fenkrpers mittels einer Exit While-Anweisung abbrechen.

    While Not EOF(1) ' Zeilen aus Datei in Auflistung einlesen Line Input #1, a MyList.AddItem aWend

    Die Do...Loop- SchleifeAm meisten Flexibilitt bietet die Do-Schleife. Sie lsst sich als abweisende, als nicht abweisendeSchleife und als Endlosschleife formulieren. In der abweisenden Form wird das Schleifenkrite-rium mit einem While- oder Until-Zusatz hinter das Schlsselwort Do, in der nicht abweisendenForm hinter das Schlsselwort Loop gesetzt. Ein While-Kriterium bricht die Schleife ab, wenn esden Wert 0 hat, whrend ein Until-Kriterium mit einem Wert ungleich 0 den Abbruch bedingt.Wie die anderen Schleifen lsst sich auch die Do-Schleife jederzeit von innerhalb des Schl