Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Variablen Werte zuweisen

Variablen Werte zuweisen
26.01.2008 02:09:00
Moni
Hallo!
Ich bin gerade dabei VBA für eine Prüfung zu lernen und verstehe folgendes nicht:
1.)
Wann benutzt man: Set Variable = ....
und wann kann man "Set" weglassen?
Folgendes Beispiel zur Veranschaulichung:
Dim NewWB As Workbook
Set NewWB = Workbooks.Add
'ein neues Workbook wird geöffnet und Referenz dazu in NewWb gespeichert

ABER:
Dim FileName As String
FileName = Application.GetOpenFilename("Excel Dateien *.xls, *.xls")
Workbooks.Open(Filename)

2.)
Ist die Dim-Anweisung nur für die Prozedur, in der man die jeweilige Variable deklariert , gültig oder für das gesamte Modul, oder etwa für alle Module? (Unterschied zu Public bzw. Private?)
Was bedeutet in diesem Zusammenhang:
Option Explicit
Dim NewWb As Workbook

Danke schon mal für eure Hilfe!

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variablen Werte zuweisen
26.01.2008 09:14:00
Hajo_Zi
Hallo Moni,
zu 2 die Variable ist mit Dim Definiert und so wie es aussieht innerhalb des Makro. Damit gilt die Variable nur in diesem Makro, nicht Modulweit und auch nicht Projektweit. Bei Modulweit hätte Sie zu Beginn des Modul nicht in einem Makro definiert werden müssen. Für Ürojektweit hätte Sie an gleicher Stelle mit Public definiert werden müssen. Nur noch ein Hinweis alle mit set definierten Variablen sollten auch mit set wieder auf Nothing gesetzt werden.
OPtion Explicit ist ein einzelner Befehl und sollte in jedem Modul verwendet werden. Er bedeutet das jede Variable vor der esten verwendung Definiert sein muss. Ist ein Klasse Befehl, bei schreibfehler bei Variablen läuft das Makro nicht.
zu 1 bei 1 erstellst Du eine neue Arbeitsmappe und schreibst das Objek auf eine Variable und kannst mit dieser Variablen alle Eigenschaften bearbeiten
bei 2 öffnest Du eine Arbeitsmappe, in der Variablen hast Du aer den kopmpletten Namen der Arbeitsmappe einschl. Pfad. Falls Du weitere Dateien öffnest oder neu mach mußt du aus dieser Variablen den Dateinamen abtrennen um die Arbeitsmappe anzusprechen.

Anzeige
AW: Variablen Werte zuweisen
27.01.2008 10:55:48
Moni
Hi!
Zu 1.)
Aber wann kann ich SET weglassen und wann nicht? Ich hab beim ersten Beispiel das SET weggelassen und dann ging es nicht.
Andererseits funktioniert es nicht, wenn ich im 2. Beispiel ein Set hinzufüge.
Das verwirrt mich. Ich kann also SET NewWB = Workbooks.Add schreiben,
aber nicht SET Filename = Application.GetOpenFilename... ?!

Anzeige
AW: Variablen Werte zuweisen
27.01.2008 11:03:00
Hajo_Zi
Hallo Moni,
soweit ich Dein Beitrag noch in Erinnerung habe hast Du bei 1 mit Set das Objekt auf die Variable geschrieben und im zweiten Fall nicht mit Set gearbeitet sondern nur die Datei geöffnet.
Jetzt schreibst Du das Du im zweiten Fall auch mit Set arbeiten möchtest, das geht, wenn Du als Variable keinen VBA Befehl oder Eigenschaft benutzt.
Ich habe das jetzt nicht nachgebaut.
Gruß Hajo

Anzeige
AW: Variablen Werte zuweisen
27.01.2008 16:28:04
Holger
Hallo Moni,
vielleicht ist das klarer:
Mit Set werden Objekt-Variablen festlegt (genauer genommen: einer Variablen, die als Object deklariert wurde, ein Verweis auf von der Anwendung erzeugte Objekt zugewiesen) . Dagegen werden fast alle anderen Variablen mit Let oder ohne einen besonderen Befehl festgelegt.
Workbook ist eine Objekt. Workbooks eine Objekt-Auflistung und selbst ein Objekt. Ein Objekt hat Eigenschaften und es können Methoden angewendet werden. Diese werden durch ein Punkt vom Objekt getrennt. Add ist eine Methode des Workbooks-Objektes. Mit Workbooks.Add erzeugst du eine neues Workbook und fügst ein neues Objekt der Workbooks-Auflistung zu. Achte auf den Plural! :.
Filename ist "nur" eine String-Variable. Sie enthält nur einen Wert, hat aber keine sonstigen Eigenschaften. Es ist nichts anderes als a=1, nur dass du bei FileName = Application.GetOpenFilename("Excel Dateien *.xls, *.xls") auf das Objekt "Application" die Methode "GetOpenFileName" anwendest, die wiederum Variablen hat, die bei der Methode festlegen, was sie genau tun soll, und denen beim Aufruf Werte zugewiesen werden können, teilweise auch müssen. (Anmerkung: Objekte der höchsten Stufen in der Objekthierachie wie Application, ActiveWindow, ActiveSheet, ActiveCell, ActiveDocument,... brauchen nicht explizit deklariert zu werden. Wenn man es tut, kann sogar ein fehler auftreten.)
Nehmen wir ein einfacheres Objekt, z.B. ein Steuerelement auf einer UserForm. Dieses ist ein fertiger Code, der durch Zuweisung bestimmter Eigenschaften (s.a. das Eigenschaftsfenster des VBA-Bildschirmes) den Bedürfnissen des Anwenders angepasst werden kann, z.B.:
Höhe des Label1 festlegen: Label1.Height=20
Höhe des Label1 bestimmen und in die Variable Höhe schreiben: Höhe=Label1.Height
Ich hoffe, dir geholfen zu haben. viel Erfolg bei der Prüfung
Holger
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Variablen Werte zuweisen in Excel VBA


Schritt-für-Schritt-Anleitung

  1. VBA-Variable definieren: Um eine Variable in VBA zu definieren, verwendest Du die Dim-Anweisung. Beispiel:

    Dim NewWb As Workbook
  2. Wert zuweisen: Um einer VBA-Variablen einen Wert zuzuweisen, benutze:

    Set NewWb = Workbooks.Add

    Hier wird ein neues Workbook erstellt und der Variable NewWb zugewiesen.

  3. String-Variable definieren: Bei der Definition einer String-Variable sieht es wie folgt aus:

    Dim FileName As String
    FileName = Application.GetOpenFilename("Excel Dateien *.xls, *.xls")
  4. Wichtiges zu Set: Verwende Set, wenn Du einer Objekt-Variablen (z.B. Workbook, Range) einen Wert zuweist. Bei einfachen Datentypen wie String, Integer oder Boolean brauchst Du Set nicht.

  5. Gültigkeitsbereich: Beachte den Gültigkeitsbereich Deiner Variablen. Ist eine Variable mit Dim innerhalb einer Prozedur definiert, gilt sie nur dort. Möchtest Du eine globale Variable definieren, verwende Public:

    Public MyVariable As String

Häufige Fehler und Lösungen

  • Fehler bei der Verwendung von Set: Wenn Du versuchst, Set bei einer String-Variable zu verwenden, erhältst Du einen Fehler. Beispiel:

    ' Falsch
    Set FileName = Application.GetOpenFilename(...)
  • Variable nicht gefunden: Wenn Du Option Explicit verwendest, stelle sicher, dass Du jede Variable vor der ersten Verwendung deklarierst. Andernfalls erhältst Du einen Kompilierungsfehler.


Alternative Methoden

  • Globale Variablen: Um eine Variable in mehreren Modulen zu verwenden, definiere sie als Public in einem Modul. So kannst Du die Variable in jedem anderen Modul verwenden:

    Public GlobalVar As String
  • Konstante Variablen: Wenn Du sicher bist, dass sich der Wert einer Variablen nicht ändern soll, kannst Du eine Konstante definieren:

    Const Pi As Double = 3.14

Praktische Beispiele

  1. Neues Workbook erstellen:

    Sub CreateNewWorkbook()
       Dim NewWb As Workbook
       Set NewWb = Workbooks.Add
    End Sub
  2. Datei öffnen und Namen speichern:

    Sub OpenFileAndStoreName()
       Dim FileName As String
       FileName = Application.GetOpenFilename("Excel Dateien *.xls, *.xls")
       Workbooks.Open(FileName)
    End Sub
  3. Öffnen einer bestehenden Datei:

    Sub OpenExistingWorkbook()
       Dim wb As Workbook
       Set wb = Workbooks.Open("C:\DeinPfad\DeineDatei.xls")
    End Sub

Tipps für Profis

  • Verwende Option Explicit: Immer am Anfang eines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Tippfehler zu vermeiden.

  • Verwende aussagekräftige Variablennamen: Nutze klare und beschreibende Namen für Deine Variablen, um den Code lesbarer zu machen.

  • Setze nicht verwendete Objekt-Variablen auf Nothing: Um den Speicher effizient zu nutzen, setze am Ende Deiner Prozeduren nicht mehr benötigte Objekt-Variablen auf Nothing:

    Set NewWb = Nothing

FAQ: Häufige Fragen

1. Wann benutze ich Set?
Du verwendest Set, wenn Du einer Objekt-Variablen einen Wert zuweist, z.B. bei einem Workbook oder Range.

2. Was bedeutet Option Explicit?
Option Explicit zwingt Dich, alle Variablen zu deklarieren, bevor Du sie verwendest. Dies hilft, Tippfehler zu vermeiden und verbessert die Codequalität.

3. Wie kann ich eine globale Variable definieren?
Um eine globale Variable zu definieren, benutze die Public-Anweisung am Anfang eines Moduls:

Public MyGlobalVar As String

4. Was ist der Unterschied zwischen Dim, Public und Private?
Dim deklariert eine Variable für den aktuellen Gültigkeitsbereich (z.B. Prozedur). Public deklariert eine Variable für das gesamte Projekt, während Private sie auf das Modul beschränkt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige