Microsoft Excel

Excel und VBA: Formeln, Programmierung, Lösungen

Die Excel/VBA-Beispiele

VBA-Begriff: Put-Anweisung

Schreibt Daten aus einer Variablen in eine Datenträgerdatei.

Syntax

Put [#]Dateinummer, [Satznummer], Variablennummer

Die Syntax der Put-Anweisung besteht aus folgenden Teilen:

Teil Beschreibung
Dateinummer Erforderlich. Eine beliebige gültige Dateinummer.
Satznummer Optional. Wert vom Typ Variant (Long). Datensatznummer (für Dateien im Modus Random) oder Byte-Nummer (für Dateien im Modus Binary), bei der der Schreibvorgang beginnt.
Variablenname Erforderlich. Name der Variablen, die die auf den Datenträger zu schreibenden Daten enthält.

Bemerkungen

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

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

Put #4,,Dateipuffer

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

  • Unterschreitet die Länge der zu schreibenden Daten die im Len-Abschnitt der Open-Anweisung festgelegte Länge, so beginnen mit Put geschriebene nachfolgende Datensätze trotzdem immer an der durch die Datensatzlänge festgelegten Grenze. 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, sollte die Datensatzlänge und mit der Länge der geschriebenen Daten immer genau übereinstimmen. Wenn die Länge der geschriebenen Daten die im Len-Abschnitt der Open-Anweisung festgelegte Länge überschreitet, tritt ein Fehler auf.

  • Wenn Put eine Variable mit einer Zeichenfolge variabler Länge schreibt, wird zunächst ein 2-Byte-Deskriptor mit der Länge der Zeichenfolge und dann die Variable geschrieben. 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.

  • Ist die geschriebene Variable ein Variant mit einem numerischen Typ, so schreibt Put zunächst 2 Bytes, die den VarType-Typ der Variant-Variablen festlegen, und dann die eigentliche Variable. Bei einer Variant-Variablen mit dem VarType-Typ 3 schreibt Put 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 tatsächlich zum Speichern der Variablen benötigte Anzahl an Bytes.

    Anmerkung Sie können mit der Put-Anweisung ein Variant-Datenfeld auf den Datenträger schreiben, aber Sie können Put nicht verwenden, um einen skalaren Variant-Wert, der ein Datenfeld enthält, auf den Datenträger zu schreiben. Sie können Put auch nicht verwenden, um Objekte auf den Datenträger zu schreiben.

  • Wenn die geschriebene Variable ein Wert vom Typ Variant des VarType 8 (String) ist, schreibt Put zunächst 2 Bytes, die den VarType-Typ kennzeichnen, 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, schreibt Put einen Deskriptor, dessen Länge 2 plus 8 mal der Anzahl der Dimensionen entspricht, also 2 + 8 * AnzahlDimensionen. Die durch den Len-Abschnitt 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 schreiben. Die folgende Datenfelddeklaration erfordert z.B. 118 Bytes, wenn das Datenfeld auf den Datenträger geschrieben wird.
    Dim Datenfeld(1 To 5,1 To 10) As Integer
    
  • Die 118 Bytes sind 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, schreibt Put nur die Daten. Es wird kein Deskriptor auf den Datenträger geschrieben.

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

  • Put verhält sich beim Schreiben benutzerdefinierter Typen genauso wie beim separaten Schreiben der einzelnen Elemente, ohne jedoch 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ß also mindestens so groß sein wie die Summe aller Bytes, die zum Schreiben der einzelnen Elemente, einschließlich aller Datenfelder und ihrer Deskriptoren, nötig sind.

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

  • Der Len-Abschnitt der Open-Anweisung bleibt ohne Wirkung. Put schreibt alle Variablen nacheinander auf den Datenträger, ohne Zwischenräume zwischen Datensätzen aufzufüllen.

  • Bei jedem Datenfeld, das kein Datenfeld eines benutzerdefinierten Typs ist, schreibt Put nur die Daten. Es wird kein Deskriptor geschrieben.

  • Put schreibt Zeichenfolgen variabler Länge, die keine Elemente eines benutzerdefinierten Typs sind, ohne den 2 Bytes großen Längendeskriptor. Daher entspricht die Anzahl geschriebener Bytes der Zeichenanzahl in der Zeichenfolge. Die folgenden Anweisungen schreiben z.B. 10 Bytes in die Datei mit der Dateinummer 1:
    VarString$ = String$(10," ")
    Put #1,,VarString$