Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2018.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Die MSForms-Textbox

Die MSForms-Bibliothek beherbergt einige Steuer­elemente, die unter Access ein stiefmütterliches Dasein erleben. Es gibt jedoch Einsatzzwecke, welche die dort enthaltenen Steuer­elemente ans Tageslicht kommen lassen. Eines dieser Steuer­elemente ist die MSForms-Textbox. Sie bietet gegenüber dem eingebauten TextBox-Steuerelement unter anderem den Vorteil, dass auch Texte mit mehr als 64.000 Zeichen angezeigt werden können. Die übrigen Vor- und Nachteile liefert der vorliegende Beitrag.

Problem Bearbeitung langer Texte

Ein Problem herkömmlicher Textfelder ist, dass Sie damit keine Texte bearbeiten können, die länger als 64.000 Zeichen sind. Dies können Sie reproduzieren, indem Sie eine Tabelle namens tblTexte mit den beiden Feldern Text­ID und Inhalt (Datentyp: Langer Text/Memo) anlegen.

Erstellen Sie dann ein Formular mit der Tabelle tblTexte als Datenherkunft und fügen Sie die beiden Felder aus der Feldliste zum Formularentwurf hinzu. Nun legen wir einen Text von knapp 64.000 Zeichen im ersten Datensatz der Tabelle an:

Public Sub EinLangerText()
     Dim db As DAO.Database
     Dim rst As DAO.Recordset
     Dim strText As String
     Set db = CurrentDb
     Set rst = db.OpenRecordset("SELECT * FROM tblTexte", _
         dbOpenDynaset)
     rst.AddNew
     strText = String(63995, "A")
     rst!Inhalt = strText
     rst.Update
End Sub

Wechseln Sie dann zum Formular in der Formularansicht und fügen Sie noch ein paar Zeichen zum Text hinzu. Nach dem Hinzufügen von fünf Zeichen werden Sie keine neuen Zeichen mehr hinzufügen können – das Limit von 64.000 ist dann erreicht. Sie können auch nicht mehr als 64.000 Zeichen über eine INSERT INTO-Anweisung hinzufügen. Die einzige Möglichkeit ist der Einsatz der oben verwendeten Prozedur mit den DAO-Methoden AddNew und Update des Recordset-Objekts.

Das Ändern des Textes ist weder in der Datenblattansicht der Tabelle noch im Formular möglich.

Lange Texte in der MSForms-TextBox

Damit kommt der Einsatz der MSForms-TextBox. Diese fügen Sie hinzu, indem Sie im Ribbon zum Tab Entwurf wechseln und das Menü unter Steuer­elemente aufklappen und den Eintrag ActiveX-Steuerelemente auswählen (s. Bild 1).

Öffnen des Dialogs zum Hinzufügen von ActiveX-Steuerelementen

Bild 1: Öffnen des Dialogs zum Hinzufügen von ActiveX-Steuerelementen

Daraufhin erscheint der Dialog aus Bild 2, mit dem Sie den Eintrag Microsoft Forms 2.0 TextBox selektieren und dieses per Mausklick auf die OK-Schaltfläche zum Formularentwurf hinzufügen können. Das neue Steuer­element wird dann relativ klein in der linken, oberen Ecke des Formulars angelegt – Sie dürften das vom TreeView-Steuerelement her kennen.

Der Dialog zur Auswahl von ActiveX-Steuerelementen

Bild 2: Der Dialog zur Auswahl von ActiveX-Steuerelementen

Die weiteren offensichtlichen Unterschiede zwischen diesem Steuer­element und dem eingebauten TextBox-Element sind das fehlende Bezeichnungsfeld sowie der 3D-Effekt für den Rahmen (s. Bild 3).

Das herkömmliche Textfeld und sein MSForms-Bruder

Bild 3: Das herkömmliche Textfeld und sein MSForms-Bruder

Wenn wir uns die Eigenschaften dieses Steuerelements ansehen, finden wir auf den meisten Registerseiten eine vergleichsweise geringe Menge an Eigenschaften vor. Die spezifischen Eigenschaften des Steuerelements finden wir in englischer Sprache auf der Registerseite Andere (s. Bild 4). Bevor wir uns die Eigenschaften unter VBA ansehen, benennen wir das Steuer­element noch schnell in txtMSForms um.

Eigenschaften der MSForms-TextBox

Bild 4: Eigenschaften der MSForms-TextBox

Danach können wir zum VBA-Editor wechseln, mit dem Menübefehl Ansicht|Objektkatalog (oder F2) den Objektkatalog öffnen und uns die Eigenschaften des TextBox-Objekts der Bibliothek MSForms ansehen (s. Bild 5). Hier finden Sie noch einige weitere Einträge gegenüber denen im Eigenschaftsfenster.

Eigenschaften unter VBA

Bild 5: Eigenschaften unter VBA

Aus eins mach zwei

Das ActiveX-Steuerelement besteht aus einem Container des Typs CustomControl sowie dem darin enthaltenen Steuer­element TextBox. Den Container referenzieren wir direkt über den Namen des Elements, das enthaltene Steuer­element über die Eigenschaft Object.

Dies verdeutlichen die folgenden beiden Codezeilen, mit denen wir den Typ der beiden Elemente im Direktbereich ausgeben:

Debug.Print TypeName(Me!txtMSForms)
Debug.Print TypeName(Me!txtMSForms.Object)

Diese liefern nämlich:

CustomControl
TextBox

Eigenschaften per IntelliSense

Wenn Sie einfach Me!txtMSForms.Object und den Punkt im VBA-Editor eingeben, würden Sie vermutlich gern eine Liste der Eigenschaften und Methoden präsentiert bekommen.

Das ist aber nicht der Fall. Eine Alternative wäre es, eine Objektvariable für das TextBox-Element zu deklarieren und diese im Form_Load-Ereignis des Formulars zu füllen. Hier ist die Deklaration:

Dim objMSForms As MSForms.TextBox

Und so stellen Sie die Objektvariable ein:

Private Sub Form_Load()
     Set objMSForms = Me!txtMSForms.Object
     With objMSForms
     '...        
     End With
End Sub

Ereignisse

Die Menge der über das Eigenschaftsfenster verfügbaren Ereigniseigenschaften ist mit Bei OLE Aktualisierung, Beim Hingehen, Beim Verlassen, Bei Fokuserhalt und Bei Fokusverlust überschaubar. Der Grund für diese wenigen Ereignisse ist, dass dies die Ereignisse des CustomControl-Elements sind, das als Container für das eigentliche Steuer­element dient – diese Ereignisse finden Sie also auch bei den übrigen Steuerelementen der MSForms-Sammlung.

Wenn Sie die Ereignisse des eigentlichen Steuerelements nutzen wollen, müssen Sie den VBA-Editor zum Anlegen bemühen. Hier wählen Sie aus dem linken Kombinationsfeld den Namen des Steuerelements aus, hier txtMSForms. Im rechten Kombinationsfeld erscheinen dann die verfügbaren Ereignisse (s. Bild 6). Das Ereignis txtMSForms_Change wird hier automatisch bei Auswahl des Eintrags im linken Kombinationsfeld angelegt. Erfreut stellen wir hier fest, dass das TextBox-Element der MSForms-Bibliothek offensichtlich über Drag and Drop-Funktionalität verfügt, was wir uns weiter unten noch ansehen werden.

Anlegen von Ereignisprozeduren für MSForms-Steuerelemente

Bild 6: Anlegen von Ereignisprozeduren für MSForms-Steuerelemente

Ein wesentlicher Unterschied zum herkömmlichen TextBox-Element ist, dass es kein Before­Update und AfterUpdate-Ereignis gibt, sondern nur ein Updated-Ereignis.

Beim Eingeben eines Zeichens werden beispielsweise die folgenden Ereignisse in dieser Reihenfolge ausgelöst:

KeyDown
KeyPress
Updated
Updated
Change
KeyUp

Datenbindung

Eine der wichtigeren Fragen für uns als Access-Benutzer ist natürlich: Können wir das Steuer­element an ein Feld der an das Formular gebundenen Datenherkunft binden? Die Antwort lautet ja – das TextBox-Element der MSForms-Bibliothek liefert mit Steuerelementinhalt genau die gleiche Eigenschaft für diesen Zweck wie das eingebaute TextBox-Element. Also binden wir das Steuer­element doch gleich einmal an das Feld Inhalt, an das wir auch das Textfeld im gleichen Formular gebunden haben.

Nun können wir uns auch direkt davon überzeugen, was geschieht, wenn wir versuchen, einen Text mit mehr als 64.000 Zeichen zu bearbeiten. Das Erste, was uns auffällt, ist die unterschiedliche Darstellung des Textes. Das eingebaute TextBox-Element bricht die Zeilen des anzuzeigenden Textes um, die MSForms-TextBox zeigt nur eine Zeile an.

Auch das Einfügen von Zeilenumbrüchen macht es nicht besser – diese werden im Standardzustand in Form eines entsprechenden Symbols angezeigt (s. Bild 7).

Anzeige des gleichen Textes in den beiden TextBox-Elementen

Bild 7: Anzeige des gleichen Textes in den beiden TextBox-Elementen

Zeilenumbruch

Wir können aber durch Einstellen der Eigenschaft MultiLine auf den Wert Ja (im Eigenschaftsfenster) oder True (per VBA) dafür sorgen, dass die Inhalte in der MSForms-TextBox mit Zeilenumbruch ausgegeben werden. Wenn MultiLine auf Ja eingestellt ist, werden die Zeilenumbrüche ausgeführt und nicht als Icon dargestellt.

Nun kommt noch die Eigenschaft WordWrap ins Spiel: Stellen Sie diese auf Nein ein, werden Zeilen nur umbrochen, wenn Sie einen Zeilenumbruch eingefügt haben. Anderenfalls reichen die Zeilen über den rechten Rand des Steuerelements hinaus. Dies können Sie ändern, indem Sie WordWrap auf Ja einstellen. Dann werden die Zeilen an Leerzeichen umbrochen oder, wenn eine Zeile kein Leerzeichen aufweist, an der Stelle vor dem Erreichen des rechten Randes des Steuerelements.

Neue Zeilen

Wenn Sie mit der Eingabetaste neue Zeilenumbrüche hinzufügen wollen, können Sie dies immer bei gedrückter Strg-Taste erledigen – das allerdings nur, wenn die Eigenschaft Multiline auf den Wert True eingestellt ist. Erst wenn Sie die Eigenschaft EnterKeyBehavior auf den Wert True einstellen, erzeugt auch das reine Drücken der Eingabetaste (ohne Strg) einen Zeilenumbruch.

Anpassen an das Layout der eingebauten TextBox

Damit wir das gleiche Look and Feel wie mit dem eingebauten TextBox-Steuerelement erhalten, legen wir als Erstes die Schriftart fest. Das können wir nicht im Eigenschaftsfenster erledigen, da die entsprechende Eigenschaft dort nicht aufgeführt wird.

Stattdessen legen wir die notwendigen Codezeilen in der Form_Load-Ereignisprozedur des Formulars an:

Set objMSForms = Me!txtMSForms.Object
With objMSForms
     .Font.Name = "Calibri"
     .Font.Size = 11
     .ScrollBars = fmScrollBarsHorizontal
End With

Hier stellen wir auch gleich die Bildlaufleiste am rechten Rand ein. Es gibt übrigens vier Werte für die Eigenschaft ScrollBars:

  • fmScrollBarsBoth
  • fmScrollBarsHorizontal
  • fmScrollBarsNone
  • fmScrollBarsVertical

Ausrichtung einstellen

Die Ausrichtung des Textes legen Sie mit der Eigenschaft TextAlign ein. Diese erwartet einen der folgenden Werte:

  • fmTextAlignLeft (1): Ausrichtung links
  • fmTextAlignCenter (2): zentrierte Ausrichtung
  • fmTextAlignRight (3): Ausrichtung rechts

Automatische Größe

Eine interessante Eigenschaft heißt AutoSize. Wenn Sie diese auf Ja einstellen, erhalten Sie ein Textfeld, das beim Öffnen des Formulars auf die Länge der längsten Zeile des Inhalts eingestellt wird und das beim Eingeben von Text nach unten wächst (aber nicht in die Breite). Ich konnte noch keinen Sinn ausmachen, aber wer weiß ...

MaxLength und AutoTab

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.