{"id":55000002,"date":"2015-02-01T00:00:00","date_gmt":"2020-12-23T11:02:58","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=2"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Von_VBA_zu_C_Erste_Anwendung_und_Variablen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Von_VBA_zu_C_Erste_Anwendung_und_Variablen\/","title":{"rendered":"Von VBA zu C#: Erste Anwendung und Variablen"},"content":{"rendered":"<p><b>Wer von VBA zu C# wechselt, muss an einigen Stellen umdenken. Der Sprung von VBA zu Visual Basic unter .NET w&auml;re m&ouml;glicherweise etwas einfacher, allerdings ist C# wohl die weiter verbreitete Sprache. Das bedeutet nicht nur, dass es mehr Entwickler gibt, die damit entwickelte Anwendungen leichter weiterentwickeln oder Sie unterst&uuml;tzen k&ouml;nnen, sondern es existieren auch mehr Beispiele zu C# im Internet als zu Visual Basic. Im ersten Artikel der Kategorie &#8220;Von VBA zu C#&#8221; schauen wir uns an, wie Sie eine erste kleine Konsolenanwendung bauen und welche einfachen Datentypen es dort gibt.<\/b><\/p>\n<p>F&uuml;r die Beispiele dieser Artikelreihe wollen wir jeweils eine Konsolenanwendung verwenden. Damit k&ouml;nnen wir uns auf die Sprache selbst konzentrieren und m&uuml;ssen uns nicht mit zus&auml;tzlichen Elementen wie etwa der Benutzeroberfl&auml;che besch&auml;ftigen. Eine Konsolenanwendung erstellen Sie &uuml;ber den Men&uuml;befehl <b>Datei|Neu|Projekt<\/b>. Dies zeigt den Dialog <b>Neues Projekt <\/b>an, wo Sie das Zielverzeichnis und den Namen des Projekts angeben sowie die Projektvorlage ausw&auml;hlen &#8211; in diesem Fall <b>Vorlagen|Visual C#|Windows-Desktop|Konsolenanwendung<\/b>.<\/p>\n<p>Ein Klick auf die Schaltfl&auml;che <b>OK <\/b>legt dann ein neues Projekt an, das im Wesentlichen aus einem Klassenmodul namens <b>Program.cs <\/b>besteht. Klassenmodule sind Ihnen, wenn Sie bereits mit VBA programmiert haben, ein Begriff &#8211; dort gab es die zu Formularen oder Berichten geh&ouml;renden Klassenmodule oder alleinstehende Klassenmodule, die Sie &auml;hnlich wie Standardmodule angelegt haben.<\/p>\n<p>Unter VBA war der wesentliche Unterschied zwischen Klassenmodulen und Standardmodulen, dass Sie zun&auml;chst ein Objekt auf Basis des Klassenmoduls erstellen mussten, um auf die enthaltenen Elemente wie etwa Methoden oder Eigenschaften zuzugreifen, w&auml;hrend Sie die in Standardmodulen enthaltenen Prozeduren oder Funktionen direkt etwa &uuml;ber den Direktbereich des VBA-Editors aufrufen konnten.<\/p>\n<p>Von der Idee der Standardmodule k&ouml;nnen Sie sich nun verabschieden, denn unter C# gibt es nur noch Klassenmodule. In unserem neuen Projekt hei&szlig;t das aktuell einzige Exemplar <b>Program.cs<\/b> und sieht wie in Bild 1 aus. Was es mit den <b>using<\/b>-Anweisungen und den Elementen <b>namespace<\/b>, <b>class <\/b>und <b>static void <\/b>auf sich hat, schauen wir uns weiter unten an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_01\/pic_2_001.png\" alt=\"Standardm&auml;&szlig;ig vorhandenes Klassenmodul in einem neuen C#-Projekt\" width=\"500\" height=\"405,7882\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Standardm&auml;&szlig;ig vorhandenes Klassenmodul in einem neuen C#-Projekt<\/span><\/b><\/p>\n<p><b>Erster Test<\/b><\/p>\n<p>Die Konsolenanwendung hei&szlig;t so, weil die Ausgabe in der Konsole erfolgt, also in einem Fenster wie der Eingabeaufforderung. Um dort einen Text auszugeben und das Fenster durch Bet&auml;tigen der Eingabetaste wieder zu schlie&szlig;en, erg&auml;nzen Sie die Prozedur, die mit der Zeile <b>static void Main&#8230; <\/b>beginnt, durch zwei Zeilen, die Sie wie folgt zwischen den geschweiften Klammern einf&uuml;gen:<\/p>\n<pre>static void Main(string[] args)\r\n{\r\n     Console.WriteLine(\"Eingabetaste dr&uuml;cken!\");\r\n     Console.ReadLine();\r\n}<\/pre>\n<p>Ein Klick auf die Taste <b>F5 <\/b>oder die Auswahl des Men&uuml;eintrags <b>Debuggen|Debugging starten <\/b>sorgt f&uuml;r die Anzeige des Fensters aus Bild 2, das Sie durch Bet&auml;tigen der Eingabetaste wieder schlie&szlig;en.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_01\/pic_2_002.png\" alt=\"Anzeige der Konsole mit dem gew&uuml;nschten Text\" width=\"500\" height=\"152,5822\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Anzeige der Konsole mit dem gew&uuml;nschten Text<\/span><\/b><\/p>\n<p>Der erste Befehl, die Methode <b>WriteLine <\/b>des Objekts <b>Console<\/b>, hat also zun&auml;chst f&uuml;r die Anzeige des Textes in der Konsole gesorgt. Damit die Konsole danach nicht direkt wieder verschwindet, haben wir die <b>ReadLine<\/b>-Methode des <b>Console<\/b>-Objekts hinterhergeschickt. Diese unterbricht den Ablauf des Programms, bis der Benutzer die Eingabetaste bet&auml;tigt.<\/p>\n<p>Alternativ zu <b>ReadLine <\/b>h&auml;tten wir auch die Methode <b>ReadKey <\/b>nutzen k&ouml;nnen, die auf die Bet&auml;tigung einer jeden Taste reagiert:<\/p>\n<pre>Console.ReadKey();<\/pre>\n<p><b>Semikolon als Zeilenabschluss<\/b><\/p>\n<p>Sie haben es schon erkannt: Unter C# m&uuml;ssen Sie jede Anweisung mit einem Semikolon beenden. Es reicht nicht aus, wie unter VBA einfach die neue Anweisung in die n&auml;chste Zeile zu schreiben. Hier ist das Semikolon das Ma&szlig; aller Dinge bei der Kennzeichnung des Endes einer Anweisung. Daf&uuml;r k&ouml;nnen Sie unter C# auch mehrere Anweisungen in eine Zeile schreiben &#8211; Sie m&uuml;ssen diese nur durch das Semikolon voneinander trennen.<\/p>\n<p>Dies s&auml;he dann f&uuml;r unser Beispiel so aus:<\/p>\n<pre>Console.WriteLine(\"Eingabe...!\");Console.ReadLine();<\/pre>\n<p><b>Zeilen umbrechen<\/b><\/p>\n<p>Durch den zwingenden Zeilenabschluss per Semikolon k&ouml;nnen Sie Zeile im Gegensatz zu VBA etwas komfortabler aufteilen &#8211; zum Beispiel so:<\/p>\n<pre>Console.WriteLine(\r\n     \"Eingabetaste dr&uuml;cken!\");<\/pre>\n<p>Sie m&uuml;ssen also nicht etwa das Unterstrich-Zeichen angeben, um den Zeilenumbruch zu markieren. Leider gelingt das nicht mitten in einem Literal, also innerhalb von Anf&uuml;hrungszeichen. Folgendes f&uuml;hrt zu einem Kompilierfehler, der &uuml;brigens rot unterstrichen markiert wird:<\/p>\n<pre>Console.WriteLine(\"Eingabetaste \r\n     dr&uuml;cken!\");<\/pre>\n<p>Au&szlig;erdem k&ouml;nnen Sie sich bei dieser Gelegenheit gleich mit der Fehlerliste von Visual Studio bekanntmachen, die Sie sicher noch h&auml;ufiger konsultieren werden &#8211; und zwar mit dem Men&uuml;eintrag <b>Ansicht|Fehlerliste <\/b>oder der Tastenkombination <b>Strg + ^, E<\/b> (also erst <b>Strg + ^<\/b>, dann <b>E<\/b>).<\/p>\n<p><b>Ungewohnte Klammern<\/b><\/p>\n<p>Nicht nur, dass Sie sich mit geschweiften Klammern herumschlagen m&uuml;ssen, die einen Codeblock beispielsweise innerhalb eines Namespaces, einer Methode oder auch eines Konstrukts wie einer Schleife oder einer Bedingung markieren &#8211; C# verlangt auch nach allen m&ouml;glichen Methoden nach der Angabe eines Klammernpaares. Dies geschieht unabh&auml;ngig davon, ob Parameter zu &uuml;bergeben sind oder nicht. Sollten Ihnen also einmal ein Syntaxfehler &uuml;ber den Weg laufen, den Sie sich auf den ersten Blick nicht erkl&auml;ren k&ouml;nnen, pr&uuml;fen Sie, ob die Anweisung eventuell nach einem Paar abschlie&szlig;ender Klammern verlangt.<\/p>\n<p><b>Fehlerliste<\/b><\/p>\n<p>Diese sieht in diesem Fall wie in Bild 3 aus. Mehr Syntaxfehler kann man wohl kaum per Einzeiler provozieren. Sie k&ouml;nnen diese Anzeige jedoch zum Anlass f&uuml;r die erste Erkundung der Fehlerliste nutzen, die es im VBA-Editor ja gar nicht gibt: Diese zeigt genau, wo der Fehler vorliegt und um was f&uuml;r einen Fehler es sich handelt. Im Gegensatz zum VBA-Editor, wo etwa beim Debuggen nur ein Syntaxfehler nach dem anderen moniert wird, finden Sie hier gleich eine Liste aller aktuell vorliegenden Syntaxfehler.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_01\/pic_2_003.png\" alt=\"Fehlermeldungen\" width=\"650\" height=\"508,0765\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Fehlermeldungen<\/span><\/b><\/p>\n<p>Noch sch&ouml;ner ist, dass Sie per Doppelklick auf einen der Eintr&auml;ge direkt zu der fraglichen Stelle im Code springen k&ouml;nnen. Dar&uuml;ber hinaus zeigt die Fehlerliste auch die Datei (also in diesem Fall die Klasse), die Zeile und die Spalte des Fehlers an. Sie k&ouml;nnten sich also auch &uuml;ber die Zeilennummer den Fehler anschauen &#8211; vorausgesetzt, dass das Codefenster gerade die Zeilennummern anzeigt. Im Screenshot ist dies nicht der Fall, aber Sie blenden die Zeilennummern ganz einfach mit der Option <b>Zeilennummern <\/b>in den Visual Studio-Optionen (<b>Extras|Optionen<\/b>) im Bereich <b>Text-Editor|Alle Sprachen <\/b>ein (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_01\/pic_2_004.png\" alt=\"Einblenden der Zeilennummern\" width=\"650\" height=\"436,1603\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Einblenden der Zeilennummern<\/span><\/b><\/p>\n<p>Im vorliegenden Fall beheben Sie die knapp zehn Fehler &uuml;brigens, indem Sie den Zeilenumbruch innerhalb der Zeichenkette wieder entfernen.<\/p>\n<p><b>Gro&szlig; und klein<\/b><\/p>\n<p>Wenn Sie schnell einen Syntaxfehler provozieren m&ouml;chten, brauchen Sie nur einmal <b>WriteLine<\/b> mit ausschlie&szlig;lich kleinen Buchstaben zu schreiben. Visual Studio korrigiert dies nicht &#8211; zumindest dann nicht, wenn Sie die IntelliSense-Option nicht nutzen.<\/p>\n<p>Stattdessen zeigt die Fehlerliste den Fehler <b>&#8220;System.Console&#8221; enth&auml;lt keine Definition f&uuml;r &#8220;writeline&#8221;. <\/b>an.<\/p>\n<p>Die Gro&szlig;- und Kleinschreibung ist also wichtig &#8211; Visual Studio erkennt Elemente der Objektbibliothek nicht, wenn diese nicht hundertprozentig richtig geschrieben sind.<\/p>\n<p>Dies gilt &uuml;brigens auch f&uuml;r die Benennung von Objekten, Variablen et cetera: Sie k&ouml;nnen durchaus zwei Variablen namens <b>kundeid <\/b>und <b>KundeID <\/b>verwenden. Durch die unterschiedliche Gro&szlig;- und Kleinschreibung werden diese als verschiedene Variablen erkannt.<\/p>\n<p><b>Blockweise<\/b><\/p>\n<p>C#-Code ist, bis auf die oberste Ebene, immer in Bl&ouml;cke eingefasst. Ein Block wird durch eine &ouml;ffnende geschweifte Klammer vor dem Block und eine schlie&szlig;ende geschweifte Klammer hinter dem Block gekennzeichnet.  Bl&ouml;cke stehen meist in einem bestimmten Kontext, beispielsweise als Inhalt einer Methode, eines Namespaces, einer Schleife oder einer Bedingung.<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000002\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000002?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000002\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer von VBA zu C# wechselt, muss an einigen Stellen umdenken. Der Sprung von VBA zu Visual Basic unter .NET w&auml;re m&ouml;glicherweise etwas einfacher, allerdings ist C# wohl die weiter verbreitete Sprache. Das bedeutet nicht nur, dass es mehr Entwickler gibt, die damit entwickelte Anwendungen leichter weiterentwickeln oder Sie unterst&uuml;tzen k&ouml;nnen, sondern es existieren auch mehr Beispiele zu C# im Internet als zu Visual Basic. Im ersten Artikel der Kategorie &#8220;Von VBA zu C#&#8221; schauen wir uns an, wie Sie eine erste kleine Konsolenanwendung bauen und welche einfachen Datentypen es dort gibt.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012015,662015,44000001,44000022],"tags":[],"yst_prominent_words":[66062023,66062025,66062051,66062047,66062059,66062046,66062061],"class_list":["post-55000002","post","type-post","status-publish","format-standard","hentry","category-66012015","category-662015","category-CGrundlagen","category-Von_Access_zu_NET"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000002","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000002"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000002\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000002"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000002"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000002"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}