Microsoft Excel

Excel und VBA: Formeln, Programmierung, Lösungen

Die Excel/VBA-Beispiele

VBA-Begriff: Get-Anweisung

Liest Daten aus einer geöffneten Datenträgerdatei in eine Variable ein.

Syntax

Get [#]Dateinummer, [Satznummer], Variablennummer

Die Syntax der Get-Anweisung besteht aus folgenden Teilen:

Teil Beschreibung
Dateinummer Erforderlich. Eine beliebige gültige Dateinummer.
Satznummer Optional. Wert vom Typ Variant (Long). Datensatznummer (Dateien im Modus Random) oder Byte-Nummer (Dateien im Modus Binary), an der der Lesevorgang beginnt.
Variablennummer Erforderlich. Name einer gültigen Variablen, in die die Daten eingelesen werden.

Bemerkungen

Daten, die mit der Get-Anweisung gelesen werden, sind normalerweise mit der Put-Anweisung in die Datei geschrieben worden.

Das erste Datenelement (Datensatz oder Byte) in einer Datei beginnt an Position 1, das zweite Datenelement an Position 2 usw. Wenn Sie Satznummer nicht angeben, liest die Anweisung das nächste Datenelement (Datensatz oder Byte) im Anschluß an die vorhergehende Get- oder Put-Anweisung (oder das Datenelement, auf das der Rückgabewert der letzten Seek-Funktion verweist). Sie müssen Listentrennzeichen angeben, zum Beispiel:

Get #4,,Dateipuffer

Für Dateien, die im Modus Random geöffnet werden, gelten die folgenden Regeln:

  • Unterschreitet die Länge der zu lesenden Daten die im Len-Abschnitt der Open-Anweisung festgelegte Länge, so liest Get nachfolgende Datensätze trotzdem immer ab der Datensatzgrenze, die durch die Datensatzlänge festgelegt ist. Der freie Raum zwischen dem Ende eines Datensatzes und dem Anfang des nächsten Datensatzes wird mit dem bestehenden Inhalt des Dateipuffers aufgefüllt. Da die Länge der Fülldaten nicht mit Sicherheit bestimmt werden kann, sollten die Datensatzlänge und die Länge der eingelesenen Daten immer übereinstimmen.

  • Wird eine Zeichenfolge variabler Länge in die Variable eingelesen, so liest Get zunächst einen 2-Byte-Deskriptor mit der Länge der Zeichenfolge und dann den eigentlichen Inhalt der Variablen. Daher muß die im Len-Abschnitt der Open-Anweisung festgelegte Datensatzlänge mindestens 2 Bytes größer sein als die tatsächliche Länge der Zeichenfolge.

  • Wenn die Zielvariable ein Wert vom Typ Variant mit einem numerischen Typ ist, liest Get zunächst 2 Bytes, die den VarType-Typ der Variant-Variablen festlegen, und dann die eigentlichen Daten dieser Variablen. Bei einer Variant-Variablen mit dem VarType 3 liest Get zum Beispiel 6 Bytes: 2 Bytes legen die Variant-Variable als VarType 3 (Long) fest, und 4 Bytes enthalten die Daten vom Typ Long. Die im Len-Abschnitt der Open-Anweisung angegebene Datensatzlänge muß also mindestens 2 Bytes größer sein als die aktuell zum Speichern der Variablen benötigte Anzahl an Bytes.

    Anmerkung Sie können mit der Get-Anweisung ein Variant-Datenfeld vom Datenträger lesen, aber Sie können Get nicht verwenden, um einen skalaren Variant-Wert zu lesen, der ein Datenfeld enthält, oder um Objekte von einem Datenträger zu lesen.

  • Wenn die Zielvariable ein Wert vom Typ Variant mit dem VarType 8 (String) ist, liest Get zunächst 2 Bytes, die den VarType-Typ festlegen, dann 2 Bytes, die die Länge der Zeichenfolge anzeigen, und anschließend die Daten der Zeichenfolge. Die im Len-Abschnitt der Open-Anweisung angegebene Datensatzlänge muß also mindestens 4 Bytes größer sein als die tatsächliche Länge der Zeichenfolge.

  • Wenn die Zielvariable ein dynamisches Datenfeld ist, so liest Get einen Deskriptor, dessen Länge 2 plus 8 mal der Anzahl der Dimensionen entspricht, also 2 + 8 *AnzahlDimensionen. Die durch den Len-Abschnitt in der Open-Anweisung angegebene Datensatzlänge muß größer oder gleich der Summe aller Bytes sein, die erforderlich sind, um die Daten des Datenfeldes und den Datenfelddeskriptor zu lesen. Die folgende Datenfelddeklaration erfordert z.B. 118 Bytes, wenn das Datenfeld auf einen Datenträger geschrieben wird.
    Dim Datenfeld(1 To 5,1 To 10) As Integer
    

    Die 118 Bytes werden folgendermaßen verteilt: 18 Bytes für den Deskriptor (2 + 8 * 2), und 100 Bytes für die Daten (5 * 10 * 2).

  • Wenn die Zielvariable ein Datenfeld fester Länge ist, liest Get nur die Daten. Es wird kein Deskriptor gelesen.

  • Wenn die Zielvariable einen anderen Typ (weder Zeichenfolge variabler Länge, noch Variant) hat, liest Get nur die eigentlichen Daten. Die im Len-Abschnitt der Open-Anweisung angegebene Datensatzlänge muß also mindestens so groß sein wie die Länge der eingelesenen Daten.

  • Get verhält sich beim Lesen der Elemente eines benutzerdefinierten Typs so wie beim separaten Lesen der einzelnen Elemente, ohne aber die Leerräume zwischen den Elementen aufzufüllen. Auf dem Datenträger wird einem dynamischen Datenfeld eines benutzerdefinierten Typs (das mit Put geschrieben wurde) ein Deskriptor vorangestellt, dessen Länge sich aus der Summe von 2 und dem Achtfachen der Anzahl an Dimensionen ergibt, also 2 + 8 *AnzahlDimensionen. Die im Len-Abschnitt der Open-Anweisung angegebene Datensatzlänge muß mindestens so groß sein wie die Summe aller Bytes, die zum Lesen der einzelnen Elemente, einschließlich aller Datenfelder und ihrer Deskriptoren, erforderlich sind.

Für Dateien, die im Modus Binary geöffnet wurden, gelten dieselben Regeln wie für Dateien im Modus Random, mit den folgenden Ausnahmen:

  • Der Len-Abschnitt der Open-Anweisung hat keine Wirkung. Get liest alle Variablen nacheinander vom Datenträger, ohne Zwischenräume zwischen Datensätzen aufzufüllen.

  • Bei jedem Datenfeld, das kein Datenfeld eines benutzerdefinierten Typs ist, liest Get nur die Daten. Es wird kein Deskriptor gelesen.

  • Get liest Zeichenfolgen variabler Länge, die keine Elemente eines benutzerdefinierten Typs sind, ohne den 2 Bytes großen Längendeskriptor zu benötigen. Daher entspricht die Anzahl gelesener Bytes der Zeichenanzahl in der Zeichenfolge. Die folgenden Anweisungen lesen zum Beispiel 10 Bytes aus der Datei mit der Dateinummer 1:
    VarString = String(10," ")
    Get #1,,VarString