Erklärung Geheimsprache VBA

Liebe Gemeinde

Versuche der VBA Sprache mächtig zu werden.

Dabei geht eine Übung auf Variablen ein.

Sub Prozedur1()
Dim intValue As Integer
intValue = 42
Debug.Print "Prozedur1: " & intValue
End Sub

Sub Prozedur2()
Debug.Print "Prozedur2: " & intValue
End Sub

Leider wird nicht erklärt was nun Dim oder intValue oder As sowie Integer bedeutet.
Kann das mal jemand übersetzen?
Gibt es sowas wie ein Übersetzungsbuch wo jeder Begriff erklärt wird.
Was ins Modul einzutippen ohne zu wissen um was es geht ist wenig lehrreich :frowning: (Diese Easy-Bücher sind der reinste Etikettenschwindel)

Hallo Christian,

Versuche der VBA Sprache mächtig zu werden.

schön, daß Du zu uns gefunden hast. :smile:

Dabei geht eine Übung auf Variablen ein.

Sub Prozedur1()
Dim intValue As Integer
intValue = 42
Debug.Print "Prozedur1: " & intValue
End Sub

Sub Prozedur2()
Debug.Print "Prozedur2: " & intValue
End Sub

Leider wird nicht erklärt was nun Dim oder intValue oder As
sowie Integer bedeutet.
Kann das mal jemand übersetzen?

Aber klar, kein Problem.

Sub Prozedur1()

  • wir erfinden mal eine Prozedur, die man von wo anders aus aufrufen können und taufen die einfach mal Prozedur1, wir hätten jeden anderen namen nehmen können.
    Dim intValue As Integer
  • wir denken uns eine Variable aus und geben der einen Namen. Weil wir beabsichtigen, da nur kleine ganzzahlige Werte zu speichern nenne wir sie einfach intValue, jeder andere Mame wäre auch gegangen. Dann legen wir noch fest, daß die Variable nur Integer-werte, also ganzzahlige Werte aufnehmen kann, die in zwei Bytes passen.
    intValue = 42
  • In diese Variable schreiben wir nun den Wert ‚42‘
    Debug.Print "Prozedur1: " & intValue
  • Nun geben wir den Text 'Prozedur1: ’ gefolgt vom Wert der Variablen aus. Das führt nur deshalb nicht zum Fehler, weil VBA nicht konsequent ist, hier wird nämlich zu einem String eine Zahl hinzugefügt, das soll besser gar nicht gehen.
    End Sub
  • Prozedur zu Ende.

Das Selbe noch einmal und den Fehler entfernt, alles was selbst festgelegt ist, mit der Syntax nichts zu tun hat ersetze ich, um die Verständlichkeit zu verbessern …

Sub Test()
Dim a As Integer
a = 42
Debug.Print "Prozedur1: " & CStr(a)
End Sub

Debug.Print ist nur eine Ausgabe im Debugger, man kann den Wert auch in einer Messagebox ausgeben …

Sub Test()
Dim a As Integer
a = 42
MsgBox a
End Sub

Gibt es sowas wie ein Übersetzungsbuch wo jeder Begriff
erklärt wird.

Wie schreibst Du VBA? Markiere da mal einen Befehl wie z.B. MsgBox und drücke dann F1.

Was ins Modul einzutippen ohne zu wissen um was es geht ist
wenig lehrreich :frowning: (Diese Easy-Bücher sind der reinste
Etikettenschwindel)

*gg* ja. :smile: Aber Du hast ja jetzt eine Lösung.

Die nächste Frage bitte …

Gruß Rainer

Hallo,

anbei noch ein Klitzekleiner Hinweis *zwinker*

Da VB bis Version 6 oder VBA, nicht beim MouseOver ueber der Variable anzeigt welchen Typ sie hat ( bei .NET bekommt man das dann angezeigt *ggg*) sollte man sich bei der Namensgebung muehe geben.

Declariert man eine Variable als

Typ Syntax Bsp

Byte b bValue 
String str strValue
Integer int intValue 
Long lng lngValue 
Decimal dec decValue
Variant var varValue

somit kann man gleich bei einer Zuweisung oder beim abfragen einer variable erkennen, welchen Typ sie hat :smile:

Auch sollte man bei dem VariablenNamen oder auch Functions sowie Procedure Namen( ich machs aber selten :s) einen eindeutigen namen geben, damit wird das proggi leichter ueberschaubar.

Ein kleines Demo

'Was mache ich?
Function tt(vRet as Integer) as Boolean ' Gruss an Reinhard \*ggg\*
Dim i As Integer
tt = True
For i = 2 To Int(Sqr(vret))
 If (vret Mod i = 0) Then
 tt = False
 Exit For
 End If
Next i
End Sub

'Mal eine andere Schreibweise :wink:

Function IstPrimZahl(Zahl As Integer)
Dim intZaehler As Integer
IstPrimZahl = True
For intZaehler = 2 To Int(Sqr(Zahl))
 If (Zahl Mod i = 0) Then
 IstPrimZahl = False
 Exit For
 End If
Next i
End Function

Wie du siehst, wird allein durch die ordentlich Vergabe von Namen das ganze uebersichtlicher.

MfG Alex

Hallo Christian,

Servus Rainer. Besten Dank
Das mit dem intValue „jeder andere Name wäre auch gegangen“ verstehe ich nicht.

Wechsle ich intValue gegen IntValuf so kommt die Info Fehler beim Kompilieren.

Sub Prozedur3()
intValuf As Integer
intValuf = 42
Debug.Print "Prozedur3: " & intValuf
End Sub

Wechsle ich intValue gegen tinValue so kommt ebenso die Info Fehler beim Kompilieren.

Sub Prozedur3()
tinValue As Integer
tinValue = 42
Debug.Print "Prozedur3: " & tinValue
End Sub

Irgenwie will VBA doch klar definierte Variablennamen.
Die Hilfe (F1) kennt intValue nicht.
(Suche nach: „intValue“ Es wurden keine passenden Ergebnisse gefunden für „intValue“.)

VBA will sie aber dennoch haben.
Ich hingegen verstehe nicht was intvalue bedeutet…
Sollte das aber wissen, sonst brauche ich das nächste Kapitel gar nicht anzugehen.

Lg
Christian

Versuche der VBA Sprache mächtig zu werden.

schön, daß Du zu uns gefunden hast. :smile:

Dabei geht eine Übung auf Variablen ein.

Sub Prozedur1()
Dim intValue As Integer
intValue = 42
Debug.Print "Prozedur1: " & intValue
End Sub

Sub Prozedur2()
Debug.Print "Prozedur2: " & intValue
End Sub

Leider wird nicht erklärt was nun Dim oder intValue oder As
sowie Integer bedeutet.
Kann das mal jemand übersetzen?

Aber klar, kein Problem.

Sub Prozedur1()

  • wir erfinden mal eine Prozedur, die man von wo anders aus
    aufrufen können und taufen die einfach mal Prozedur1, wir
    hätten jeden anderen namen nehmen können.
    Dim intValue As Integer
  • wir denken uns eine Variable aus und geben der einen Namen.
    Weil wir beabsichtigen, da nur kleine ganzzahlige Werte zu
    speichern nenne wir sie einfach intValue, jeder andere Mame
    wäre auch gegangen. Dann legen wir noch fest, daß die Variable
    nur Integer-werte, also ganzzahlige Werte aufnehmen kann, die
    in zwei Bytes passen.
    intValue = 42
  • In diese Variable schreiben wir nun den Wert ‚42‘
    Debug.Print "Prozedur1: " & intValue
  • Nun geben wir den Text 'Prozedur1: ’ gefolgt vom Wert der
    Variablen aus. Das führt nur deshalb nicht zum Fehler, weil
    VBA nicht konsequent ist, hier wird nämlich zu einem String
    eine Zahl hinzugefügt, das soll besser gar nicht gehen.
    End Sub
  • Prozedur zu Ende.

Das Selbe noch einmal und den Fehler entfernt, alles was
selbst festgelegt ist, mit der Syntax nichts zu tun hat
ersetze ich, um die Verständlichkeit zu verbessern …

Sub Test()
Dim a As Integer
a = 42
Debug.Print "Prozedur1: " & CStr(a)
End Sub

Debug.Print ist nur eine Ausgabe im Debugger, man kann den
Wert auch in einer Messagebox ausgeben …

Sub Test()
Dim a As Integer
a = 42
MsgBox a
End Sub

Gibt es sowas wie ein Übersetzungsbuch wo jeder Begriff
erklärt wird.

Wie schreibst Du VBA? Markiere da mal einen Befehl wie z.B.
MsgBox und drücke dann F1.

Was ins Modul einzutippen ohne zu wissen um was es geht ist
wenig lehrreich :frowning: (Diese Easy-Bücher sind der reinste
Etikettenschwindel)

*gg* ja. :smile: Aber Du hast ja jetzt eine Lösung.

Die nächste Frage bitte …

Gruß Rainer

Hi Alex,

alles richtig.

Aber oben ging es noch um die Unterscheidung, was ist Syntax, was nicht.
Beim Einstieg hatte ich mit solchen Beispielen das Problem auch, ich habe am Anfang nicht verstanden, was ich ändern darf, was nur ausgedacht ist (warum auch immer) und was Syntax ist. Bei Variablennemen wie ‚intValue‘ sieht man das als Einsteiger nicht, egal wie sinnvoll das ist. An der Stelle machen solche Veriablennemen den Code für Einsteiger unlesbar, das Wesentliche wird nicht verstanden. c = a + b versteht dagegen Jeder. :smile:

Gruß Rainer

Hallo Christian,

Das mit dem intValue „jeder andere Name wäre auch gegangen“
verstehe ich nicht.

aber gleich.

Wechsle ich intValue gegen IntValuf so kommt die Info Fehler
beim Kompilieren.

Der Fehler sitzt in der Syntax, Du hast das ‚Dim‘ weg gelassen. :smile:
Du musst schon mit schreiben, daß Du die Variable deklarieren sollst, die Anweisung fehlt.

Als erstes führe ich mal pre-Tags ein, das macht Codes besser lesbar.

Sub Prozedur3()
 intValuf As Integer
 intValuf = 42
 Debug.Print "Prozedur3: " & intValuf
End Sub

Das klappt, wenn Du daraus das machst …

Sub Prozedur3()
 Dim intValuf As Integer
 intValuf = 42
 Debug.Print "Prozedur3: " & intValuf
End Sub

Irgenwie will VBA doch klar definierte Variablennamen.

Nein, VBA arbeitet auch ohne, aber besser ist mit. Die Deklaration hilft aber Tippfehler zu vermeiden. Das funktioniert aber nur, wenn die erste Zeile in Deinem Projekt …

Option Explicit

… lautet.

Die Hilfe (F1) kennt intValue nicht.

Das ist ja auch nur eine ausgedachte Variable, da kannst Du auch ‚bademantel‘ hin schreiben, wenn es Dir gefällt.

(Suche nach: „intValue“ Es wurden keine passenden Ergebnisse
gefunden für „intValue“.)

Das ist OK, ist halt nur eine belibeige Variable, hat nichts mit Syntax zu tun.

VBA will sie aber dennoch haben.

Nein, siehe oben. Der Fehler war das fehlende ‚Dim‘.

Gruß Rainer

Hallo Rainer,

er schrieb aber mal das er schon etliches studiert hat.
Auch hatte ich einmal ausführlich alles erklärt.

Sprich den Variablenamen, den Gültungsbereich und die AS Klausel!

Von daher sollte ihm das eigentlich nicht schwer fallen. Ok, wenn ich ehrlich bin, verstehe ich sowieso nicht, was man an Variablen net versteht kann *gruebel*

Aber mal auf das Bsp. mit den Primzahlen bezogen. Welche Variante ist da verstaendlicher , hmm *zwinker*
Auch stell dir mal vor, er gewöhnt sich den Stil an, alla

Dim WasWeissIchdenn as Long und irgendwo im Source bei seinem 128795 Zeilen steht dann

Public Function GuteFrageWasIchMache() as Boolean
GuteFrageWasIchMache=cbool(Val(text1)=WasWeissIch)
End Function

Mal abgesehen davon das das genau genommen schlicht weg falsch ist, aber dennoch geht, würde hier selbst ein gestander Mann in Sachen programmieren ins schleudern geraten :s

MfG Alex

Hi Alex,

lies einfach oben, genau das Problem hatte ich beim Einsieg auch, Variablennemen und syntax sind in den Beispielen nicht zu unterscheiden, deshalb sind die Beispiele unverständlich. Würde da statt ‚intValue‘ einfach nur ‚a‘ stehen, wäre alles klar.

Gruß Rainer

Hi Alex,

Hallo Rainer,

ich weiss schon was du meinst.
Nur was ist denn schwer daran zu verstehen

Gültigkeitsbereich Variablenname AS Typ

Gültigkeitsbereich = DIM, Private, Public ( Global) etc.
Variablenname = Frei waehlbarere Name
AS = AS
Typ = Welcher Datentyp

ein wenig muss man schon lernen und sich merken. Sonst kommt man nicht weit :wink:

Was will er denn machen, wenn er mal zu Klassen / Vererbung oder in einer anderen Hochsprache ( .NET) Polymorphie, InterFace ( Schnittstellen) kommt?

MfG Alex, der nun erst einmal sich ein Bier eingiesst :smiley:

Servus Rainer.
Ja geht auch mit Bademantel was mich sehr erstaunte.
Somit lautet die Zusammenfassung für den heutigen Tag:

  1. Immer dieses Option Explicit oben reinschreiben.
  2. Ein Variablename kann eigentlich selbst erfunden werden. Damit es auch von anderen gelesen werden kann, gibt es standartisierte Nennungen welche IntValue usw. lauten.
  3. Jede Variable muss mit Dim beginnen. Dann ist die Variable deklariert.

Mühsam ernährt sich das Eichhörnchen. (Wäre gut VBA Buchautoren solche Erkenntnisse auf Seite 1 schreiben würden)

Äh noch was: Was bedeutet der Begriff „pre-Tags“?

Christian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Christian,

Ja geht auch mit Bademantel was mich sehr erstaunte.
Somit lautet die Zusammenfassung für den heutigen Tag:

  1. Immer dieses Option Explicit oben reinschreiben.

ja, dann beschwert sich VBA über Tippfehler. :smile:
Beispiel: Wenn Du statt eier Null ein O (wie Otto) schreibst, siehst Du das nicht, VB aber schon und beschwert sich.

  1. Ein Variablename kann eigentlich selbst erfunden werden.

Ja.

Damit es auch von anderen gelesen werden kann, gibt es
standartisierte Nennungen welche IntValue usw. lauten.

Das habe ich noch nie getan. Persönliche Gewohnheiten tun es auch.
Der Index für Zählschleifen heißt bei mir z.B. immer ‚i‘ und ist nie global deklariert. Arbeite ich mit Zeilen und Spalten dann heißen die immer r wie Row und c wie Col. Das ist übersichtlich und bequem. :smile:

  1. Jede Variable muss mit Dim beginnen. Dann ist die Variable
    deklariert.

Die Deklaration kann mit Dim passieren, aber nicht nur. :smile:
Aber das will ich jetzt erst mal nicht ausweiten, das machen wir später.

Mühsam ernährt sich das Eichhörnchen. (Wäre gut VBA
Buchautoren solche Erkenntnisse auf Seite 1 schreiben würden)

*gg* Und mir das Brett hier weg nehmen? Da bin ich nicht einvertanden! :smile:

Äh noch was: Was bedeutet der Begriff „pre-Tags“?

Die Wirkung hast Du ja gesehen. Wenn Du Deinen nächsten Beitrag schreibst, sieh unter den Eingabe-Fenster mal nach dem Link ‚Hilfe zur Anwendung der HTML-Tags‘, klick den an und lies Dir das durch.
Fragen dazu kannst Du hier oder per Mail an mich stellen. Ich freue mich über jede Mail. :smile:

Gruß Rainer

Hi Alex,

ich weiss schon was du meinst.
Nur was ist denn schwer daran zu verstehen

in den Beispielen sind ausgadachte Variablennamen nicht von Syntax zu unterscheiden. Das macht die Beispiele unverständlich.

Gruß Rainer

Hi Christian,

in Corel Draw ist Vba integriert, in Outlook, Excel, Word und so 15 anderen Programmen auch, handelt dein Buch allgemein von Vba oder von einem speziellen Vba?
In den Grundlagen wie deinen Beispielen sind sie gleich, aber letztlich sind sie sehr unterschiedlich.

  1. Immer dieses Option Explicit oben reinschreiben.

Ja, bringt in der Summe auf die Dauer gesehen immer Zeitgewinn. Schreibfehler beim Variablennamen sind üblich, dies wird dadurch überwacht.
Normalerweise kannst du im Editor unter Extras–Optinen irgendwo „Variablendeklaration erzwingen“ o.ä. anhaken, dannn wird das automatisch immer schon reingeschrieben.

  1. Ein Variablename kann eigentlich selbst erfunden werden.

Jain, er ist zwar prinzipiell völlig frei wählbar, aber Namen die von Vba selbst benutzt werden sind tabu.
Dim Integer as Byte
oder
Dim As As String
geht nicht.

Damit es auch von anderen gelesen werden kann, gibt es
standartisierte Nennungen welche IntValue usw. lauten.

Was interessieren mich die Anderen :smile:, es ist für mich bei längeren Codes wichtig anhand von Präfixen sofort bei Variabelen erkennen zu können welchen Typ sie haben. Nennt sich auch ungarische Notation.

  1. Jede Variable muss mit Dim beginnen. Dann ist die Variable
    deklariert.

Ich sah schon Code wo das so gemacht wurde, also pro variable eine Dim Anweisung.
Ich mach das nicht. pro Dim Anweisung setze ich soviel Varaiablen dahinter das der Bildschirm voll wird, also die Breite. Dann nächste Dim Anweisung.

Äh noch was: Was bedeutet der Begriff „pre-Tags“?

Tue so als ob du mir antworten wolltest, unterhalb des Eingabefensters werden die Tags erklärt.

Gruß
Reinhard