[VBA] Anfängerhilfe

mi2g

Lieutenant
Dabei seit
Apr. 2003
Beiträge
1.016
ein paar vba fragen

wir haben momentan in der schule vba und habe dazu ein paar fragen:
kennt ihr gute internetseiten wo vba gut erklärt wird?
wann muss ich eine sub prodezur verwenden, wann eine function?
für was verwende ich dim und was ist es überhaupt?
für was muss ich konstandten deklarieren und was ist es überhaupt?
was ist dim variablenname as datentyp? für was brauch ich das?
was ist ein array? und für was brauch ich es?
wie geht das mit case genau?
wie funktioniert eine zählergesteuerte wiederhlung?
wie funktioniert eine bedingte wiederholung?
ich habe irgendwo aus einem code gelesen:
msgbox(ausgabe, vbOKonly + vbExclamation, _
was bedeutet das genau. z.b. vb0konly/vbexclamation?
ich danke schonmal recht herzlich.
 

FreddyMercury

Commodore
Dabei seit
Dez. 2002
Beiträge
5.021
Re: ein paar vba fragen

Also. Ich hab heute VBA Arbeit geschrieben und die ist mindestens 1-

Sub Verwendest du, wenn du ein Makro starten möchtest. Ganz klar oder?
Eine Funktion verwendest du, wenn du etwas machen möchtest (ist dumm ausgedrückt ich weiß)

Mit dim deklarierst du eine Variable. Beispiel: Dim mi2g As Single
Eine Konstante deklarierst du, wenn sich ein Wert nicht ändern soll
Beispiel: Const MwSt As Single = 16

Somit hat die Constante Single immer den Wert 16. Egal wo in dem Modul.

Und Variablen brauchst du IMMER, wenn du in einem "Modul" arbeitest.

Ein Array ist eine Variable, in der mehrere Variablen ihren Wert reinpacken können.
Beispiel: dim Bestand(100) as Long
Wozu du es brauchst, kannst du dir ja jetzt denken.

Case funktioniert so
Select Case
Case 1 to 100
Anweisung um die Werte 1 to 100 zu verarbeiten
Case 200 to 300
Anweisung um die Werte 200 to 300 zu verarbeiten.
End Select

So geht das mit Case. Du kannst statt den Zahlen in manchen Fällen auch Variablen nehmen.

Eine Zählergesteuert wiederholung funktioniert, indem du dem Programm sagst, wievielmal der Code wiederholt werden soll.

for i = 1 to 50
beep
next i

Der computer piept jetzt 50 mal.


Die bedingte geht so

Do while variablenname > 0

Dein Code den du schreiben sollst

Loop

oder

Do

Der Code den du geschrieben hast

Ende = MsgBox("Weiter?",4,"weiter")
Loop Until Ende = 7

Und das vbOKonly und so weiter sind zusatzfunktionen für deine MsgBox. Die brauchst du nicht unbedingt.
 

mi2g

Lieutenant
Ersteller dieses Themas
Dabei seit
Apr. 2003
Beiträge
1.016
Re: ein paar vba fragen

danke vielmal.
"Dim mi2g As Single" was kann ich z.b. damit anfangen?
 

FreddyMercury

Commodore
Dabei seit
Dez. 2002
Beiträge
5.021
Re: ein paar vba fragen

Du gibst "Bim mi2g As Single" an
mi2g ist jetzt die Variable, die den Wert Single bekommen hat. Du kannst diesen Wert jetzt beschreiben lassen.

mi2g = InputBox("Gib den Wert ein")

Dann kommt ein Fenster, das dich nach dem Wert fragt (das was oben geschrieben steht)

Dann wenn du den Wert eingegeben hast, bekommt mi2g den Wert zugewiesen, den du eingegeben hast.

Statt mi2g kannst du auch keks oder irgendwas anderes nehmen.
 

mi2g

Lieutenant
Ersteller dieses Themas
Dabei seit
Apr. 2003
Beiträge
1.016
Re: ein paar vba fragen

danke, heisst das, wenn man mi2g eingibt, es richtig ist, oder wenn man etwas eingibt eine meldung mit mi2g kommt? sorry bin völliger noob.
 

Nossi

Captain
Dabei seit
Okt. 2002
Beiträge
3.893
Variablen Deklaration:

Variablen sind "Platzhalter" für Werte. man kann ihnen (Per eingabe oder automatisch vom Programm) einen Wert zuweisen, einen Wert speichern und mit ihnen Rechnen. Du könntest z.B. die Körpergrösse vom User eingeben lassen, der Wert wird dann in einer Variable gespeichert.

Es gibt 3 Typen von Variablen:
Lokale
Modulweite
Globale

1.Lokale Variablen werden mit
Code:
Dim name as Datentyp
deklariert.
Lokale Variablen gelten nur in der jeweiligen Funktion spprich zwischen "Sub" und "End Sub" bzw "function. Deklariert werden sie am Anfang einer Funktion.

2. Modulweite Variablen werden mit
Code:
Private name as Datentyp
deklariert.
Modulweite Variablen gelten in einem Modul/Userform etc, bei VBA meistens eine Tabelle, jede Funktion innerhalb eines Moduls kann so eine Variable nutzen. Deklariert werden sie ganz am Anfang eines Moduls

3. Globale Variablen werden mit
Code:
Public name as Datentyp
deklariert.
Globale Variablen gelten übergreifend in sämtlichen Modulen eines Programms, zum deklarieren muss man sie in ein eigenständiges Modul einfügen.

Konstaten:
Konstanten werden folgendermassen deklariert:
Code:
const name = wert
(oder const name as Datentyp = Wert, bin mir grad nicht sicher).
Konstanten können weder vom User noch vom Programm verändert werden.
Der Vorteil ist, das Konstanten im gegensatz zu variablen weniger Speicher verbrauchen und schneller griffbereit sind für das Programm. Ein Idealer Kanidat für Konstanten ist z.B. die Kreiszahl Pi.

Kurz etwas zu den Namen der Variablen:
Du solltest wirklich sinnvolle namen für die Variablen wählen. Wenn du irgendwann einmal Code mit 300 verschiedenen Variablen hast und sie einfach nur durchnummeriert hast, wie willst du dir merken, was in Variable 245 Gespeichert wird ? Wenn du Sinnvolle Namen vergibst, wie z.B. koerpergroesse, ist direkt klar, wozu diese variable gut ist.

Datentypen:
Boolean = Ja/nein (1/0)
Integer = Ganzzahlen (1;2;3;-1,-2;-3....)
Long = Ebenfalls ganzzahlen, kann aber höhere Werte aufnehmen
Single = Fliesskommazahlen (1,56546)
Double = Ebenfalls Flieskommazahlen, kann aber höhere Werte aufnehmen
String = Zeichenketten (Haus, 02364, rh7843rh345ß7....)
Date = Datum
Variant = Ein VB eigener Datentyp, das Programm versucht selbst den Wert zu Interpretieren, das kann gut gehen, aber muss es nicht, ich gehe später noch drauf ein.

(Hab bestimmt was vergessen, das sind aber die wichtigsten)

Eine Körpergrösse in cm würde so, z.B. als Integer gespeicher (185), eine Körpergrösse in Metern als Single (1,85) und wenn du noch die Masseinheit mit speichern willst, musst du String benutzen (185cm ; 1,85 m).

If Anweisung / Select Case anweisung


Eine sehr wichtige Funktion bei allen Programmiersprachen ist - neben den Schleifen - die If-Anweisung. Eine If-Anweisung lässt ein Programm einen Wert überprüfen und wird je nach Wert reagieren. Beispiel:
Du könntest vom User die Körpergrösse eingeben lassen und je nach grösse eine Nachricht ausgeben
Code:
   If koerpergroesse > 190 then
   	   MsgBox ("Du bist sehr gross")
   ElseIf koerpergroesse > 170 then
   	   MsgBox ("Du bist normal gross")
   Elseif koerpergroesse < 169 then
   	   MsgBox ("Du bist klein")
   Endif
Hierbei überprüft er die Variable "Koerpergroesse" auf einen bestimmten Wert, er üperprüft erst, ob der Wert über 190 liegt, wenn ja springt er zu der Codezeile "MsgBox ("Du bist sehr gross")" und beendet danach die If-Anweisung. Wenn der Wert nicht über 190 liegt, überprüft er ob er über 170 liegt, springt in dem Falle zu der Textzeile "MsgBox ("Du bist normal gross")" und beendet danach die If-Anweisung.

Die Select Case anweisung hat im Grunde eine ähnliche funktion, wird aber vorallem bei vielen verschiedenen Werten, die überprüft werden müssen angewendet.
Code:
   Select Case koerpergroesse
   
   		 Case 190
   		 MsgBox ("190")
      
   		 Case 189
   		 MsgBox("189")
     
   		 Case 188
   		  MsgBox("188")
   End Case
Ich denke das muss ich nicht näher erläutern, es ist im Grunde das selbe wie die If-Anweisung.

Die MsgBox ist im übrigen einfach ein Fenster das Aufpoppt und den ihr zugeteilten Wert ausgib. Wenn dieser Wert in "" steht (z.B. "Bob"), dann gibt er genau das aus, was zwischen den "" steht. Wenn du die "" weglassen würdest und einfach schreiben würdest "MsgBox(Bob), dann würde er die Variable "Bob" suchen und den Wert in Bob ausgeben.
Wenn du das Mischen willst, sprich eine Vordefinierte Zeichenkette ausgeben und dazu einen Wert einer Variable, dann funktioniert das so:
Code:
  MsgBoX("Ihre Körpergrösse beträgt " & koerpergroesse)
Er gibt nun zuerst den String "Ihre Körpergrösse beträgt " (Ohne "") aus und hängt dann den Wert der Variable koerpergroesse hinten dran.

Option Explicit

Du solltest über Jedes Modul ganz oben die zeile "Option Explicit" schreiben, sie bewirkt folgendes:

Normalerweise ist eine Variablendeklaration von Excel aus nicht nötig du könntest einfach irgendwo hinschreiben i = 5, dann würde Excel die Variable "i" anlegen, ihr den Datentyp Variant den Wert 5 zuweisen. Das solltest du aber nicht tun, da Excel dann selbst versucht, den inhalt zu interpretieren und das kann gewaltig in die Hose gehen. Deshalb solltest du Variablen immer mit dem richtigen Datentyp deklarieren um so von vorneherein Fehler auszuschliessen.

Mit der Zeile "Option Explicit" am Anfang deines Codes wird eine Variablendekleration erzwungen, d.h. er würde dir, wenn du irgendwo die variable "i" benutzt, ohne sie vorher deklariert zu haben eine Fehlermeldung ausgeben. Das ganze ist auch sehr nützlich, um Rechtschreibfehler in Variablen zu finden. Angenommen du hast folgenden Code geschrieben, mit einem Rechtschreibfehler bei den Variablen:
Code:
  [color=Magenta]zahl1[/color] = 5
  [color=DarkOrange]zahl2[/color] = 3
  
  [color=SeaGreen]ergebnis[/color] = [color=DarkRed]zal1[/color] + [color=DarkOrange]zahl2[/color]
Excel würde in diesem Fall 4 Variablen anlegen Zahl1, Zahl2, Zal1 und ergebnis. Jetzt würdest du ein falsches Ergebnis erhalten, weil excel zal1 und zahl2 verrechnen würde, zal1 wurde kein Wert zugewiesen, sprich ist 0 und du würdest als ergebnis 3 erhalten.

Besser, du machst es so:
Code:
  Option Explicit
  
  Dim [color=Magenta]zahl1[/color] as integer
  Dim [color=DarkOrange]zahl2[/color] as integer
  Dim [color=SeaGreen]ergebnis[/color] as integer
  
   [color=Magenta]zahl1[/color] = 5
   [color=DarkOrange]zahl2[/color] = 3
   
   [color=SeaGreen]ergebnis[/color] = [color=DarkRed]zal1[/color] + [color=DarkOrange]zahl2[/color]
Excel würde jetzt eine Fehlermeldung ausgeben, das zal1 nicht deklariert wurde und du findest ganz leicht den Fehler. Ich gebe zu, das klingt bei diesem Beispiel sehr banal, aber wenn du erstmal komplixierten Code hast, der nichtmehr so leicht überschaubar ist, dann überliesst man solche Fehler sehr sehr schnell.

Soviel erstmal von mir, wenn etwas unklar ist oder du mehr wissen willst, einfach schreien ;)
 
Zuletzt bearbeitet:
Top