Syntaxunterschiede zu VBA

  • VB.NET

Es gibt 41 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonger96.

    Syntaxunterschiede zu VBA

    Hallo, folgendes Problem:

    (bzw folgende Probleme)^^
    ich hab einige Erfahrung mit VBA (Excel 2007 und 2010), für mein derzeitiges Projekt überlege ich aber, ob es nicht sinnvoll wäre gleich auf VB umzusteigen. Jetzt hab ich mir heute VB 2010 mal angesehen und bin dabei auf Eigenarten gestoßen, die mir nicht ganz klar sind:
    Zunächst einmal die Variablendeklarationen: wenn ich eine Variable oben im Modul als Public deklariere, bekomme innerhalb eines Userform-Subs die Fehlermeldung dass sie zu einem anderen Feld gehöre. Was bedeutet das?
    Außerdem scheint VB gängige Programmierkonventionen iwie implementiert zu haben, also zB eine Variable "lngXY as Long" bringt andere Fehlermeldungen als "XY as Long". Versteh ich nicht, ehrlich gesagt, warum das so ist. Wär cool, wenn mir das jemand erklären könnte.:)
    Und ich hab mal versucht, Steuerelemente zu erzeugen. "Me.Controls.Add(Panel1)" funktioniert, das hab ich rausgefunden, aber wie mach ich das dynamisch in einer Schleife? (Panel & CStr(XY))? Iwie klappt das nicht.

    Hilfe wär lieb :)

    LG SG
    VB.Net ist objektorientiert, was im genaueren bedeutet, dass so ziemlich alles anders läuft, als bei VBA. Tatsächlich ist das einzige, was überhaupt gleich ist, die Syntax, deswegen sehen die Sprachen zwar fast identisch aus, sie sind aber eigentlich grundverschieden.
    Es ist also umdenken angesagt, und zwar nicht zu knapp. Einen guten Einstieg vermittelt dir z.B. dieses Buch:
    microsoft.com/germany/msdn/akt…how.aspx?id=msdn_de_49057

    SG ;) schrieb:

    Ich nehme an, die Objektorientierung von VB ist dann auch nur entfernt mit den Klassen in VBA zu vergleichen?

    Ist schon das gleiche. VBA (ist ja eigentlich VB5/6 mit Spezialitäten) ist das ganze nur nicht so weit gegangen. Bei VBA KANN man Klassen usw machen, bei VB.Net ist es Pflicht (wobei man auch da Modules nutzen kann ... aber das wird Schweinkram).

    Guckste ma: msdn.microsoft.com/en-us/library/ms172618.aspx

    Ach so das wichtigste für VBA/VB6er: Es gibt keine Control-Arrays mehr! OH MEIN GOTT!!!!! Ruhig bleiben, Schluck Bier trinken. Dafür gibts was anderes. Ist gewöhnungsbedürftig, aber wenn man sich dran gewöhnt hat, dann hat man tausendmal mehr Möglichkeiten als mit den Control-Arrays.

    Finally ..
    Jetzt hab ich mir heute VB 2010 mal angesehen

    Nimm gleich VS2013. Die Sprachfeatures sind wie in 2012, also mit ultracoolem Async/Await, nur die IDE hat neue Features. Eins finde ich toll: Endlich setzt dieses blöde Mistteil automatisch die geschlossene Klammer gleich mit, wenn man die geöffnete eintippt ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()

    Ok, danke auf alle Fälle :)

    ich ahne, was Du meinst (jed erklärt das die seltsamen Fehlermeldungen). Hab mir das Ebook heruntergeladen, jetzt gilts zu forschen^^

    @picoflop: Ich versuchs jetzt erstmal mit der kostenlosen 2010er-Express-Version^^
    Keine Control-Arrays? Oh man, ich glaub ich brauch wirklich ein Bier :D

    LG SG

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „SG ;-)“ ()

    OOP besteht grob gesagt aus drei Elementen: Polymorphie, Vererbung und Kapselung. Wobei man bei Polymorphie zwischen Statischer und Dynamischer unterscheiden sollte. Statische Polymorphie wird zur Compilezeit generiert und durch Templates verwirklicht, hierbei wird ist die Performance um einiges besser doch bleibt Vererbung ungenutzt. Dynamische entsteht durch Vererbung, folglich spielt sich das Ganze zur Laufzeit ab, die Performance ist schlechter dafür ist die ausführbare Codegröße kleiner.

    Vergleicht man hier mal C++ und C# (oder. VB.Net) fällt auf, das C++ eher auf statischer Polymorphie basiert und C# auf Dynamischer. Der Nachteil in .Net ist, dass die statische Polymorphie nicht-schlecht möglich ist (da Templates hier ganz miserabel implementiert wurden), Dynamische ist in C++ allerdings kein Problem, hier wird einem sogar Mehrfachvererbung geboten. Wie das in VBA ist kann ich jedoch nicht sagen. Entschuldige falls ich wieder ausschweife ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gonger96“ ()

    Hallo SG,

    Ich kann dir sagen, dass die Umstellung von VBA zu VB.NET wie die von einer Seifenkiste zu einem Porsche. Ich habe ebenfalls mit VBA angefangen und bin dann nach zwei Monaten auf VB.NET umgestiegen. Ich dreh' jedesmal am Rad, wenn ich VBA benutze (Ich will VBA mit .NET-Unterstützung!!!). Keine List(of T), IO-Namespace, Bitmap, Interfaces, Structures und ein Sch*****-Regex :cursing:
    Es ist definitiv eine grosse Umstellung aber der richtige Schritt!!

    Grüsse

    Higlav
    Ich würde mit der 2012er/2013er sogar sagen, dass so gut wie kein Unterschied mehr zu den Professional-Versionen ist. Ich benutze beide (Prof über Dreamspark aufm PC und Express in allen VMs) und die zusätzlichen Features der Professional-Version wirst du im ersten Jahr höchstwarscheinlich eh nicht brauchen.
    Joa, Polymorphie ist eigentlich die Eigenschaft eines Objektes unterschiedliche Datentypen annehmen zu können.

    C-Quellcode

    1. interface xy {};
    2. class xz : public xy {};
    So ist ein Objekt vom Typ xz auch gleichzeitig vom Typ xy. Hierbei werden einem die Möglichkeiten über Vererbung (wie oben) oder über Templates geboten, mixt man die zwei kommen sehr schöne portable Architekturen raus. So kann man auch Typen deklarierter Objekte löschen und bspw. als Variant deklarieren, so ist dein Beispiel eine Struktur namens Type-Erasure

    SG ;) schrieb:

    Polymorphie = As Variant?
    Lies dringend das Buch. ;) Variant gibts bei .Net btw. gar nicht mehr, das widerspricht dem objektorientierten Prinzip.

    Gehe auf diese Seite:
    microsoft.com/visualstudio/deu/downloads
    Dann musst du ein bisschen runterscrollen zu "Visual Studio Express 2013" und dort nimmst du dann die Version für Windows Desktop.
    Mach mal.
    Aber Variant ist trotzdem nicht OOP-konform, egal was jetzt gleich kommt. Variant hat etwa das Verhalten von einer in Strict Off und ohne Typen deklarierten Variable, also man kann reinstecken und rausholen was man will und auch alle möglichen Methoden drauf aufrufen per Latebinding.