Montag, 25. September 2017

Home
Tipps
Bücher
Software
News / Links
Hilfe
Impressum

Sponsored by
QualityHosting

Tipp/Trick
Feldkopierer für Formulare
Mit Hilfe eines speziellen Zwischenablage-Assistenten können Sie sowohl einzelne Felder als auch die Reihenfolge der Felder auswählen, die in die Zwischenablage kopiert werden sollen.

Wenn Sie schon einmal eine Adresse in die Zwischenablage befördert und von hier aus in ein Textdokument eingefügt haben, dürften Sie sich wahrscheinlich auch schon einmal über die schlechte Funktionalität des Menüpunkts Bearbeiten/Kopieren geärgert haben. Es ist nämlich nur möglich, entweder einen einzelnen Feldinhalt oder gleich einen kompletten Datensatz (mit allen für die Adresse überflüssigen Feldern) in die Zwischenablage zu kopieren.

Für den Assistenten benötigen Sie zunächst einmal ein neues leeres Formular mit dem Namen Zwischenablage-Assistent. Platzieren Sie auf der linken Seite ein Listenfeld namens lstFeldliste und rechts daneben ein etwa gleich großes Textfeld mit dem Namen txtText. Unterhalb beider Steuerelemente ordnen Sie dann noch zwei Schaltflächen mit den Namen btnOK und btnAbbrechen an. 

Um dem Formular ein für Dialogfenster typisches Aussehen zu verleihen, stellen Sie folgende Formulareigenschaften entsprechend ein:

Eigenschaft Einstellungen
Standard-Ansicht Einzelnes Formular
Bildlaufleisten Nein
Datensatzmarkierer Nein
Navigationsschaltflächen Nein
Rahmenart Dialog
Beschriftung Zwischenablage-Assistent

Die linke Liste des Formulars soll die Namen aller Felder eines bestimmten Formulars auflisten. Stellen Sie zu diesem Zweck die HerkunftsTyp-Eigenschaften des Steuerelements lstFeldliste auf Feldliste ein. Auf welches Formular der Assistent beim Füllen der Liste zurückgreift, wird mittels einer VBA-Ereignisprozedur festgelegt, die Sie für die BeimÖffnen-Ereigniseigenschaft anlegen. Die Prozedur enthält lediglich die folgende Anweisung:

Me!lstFeldliste.RowSource = Forms(OpenArgs).RecordSource

Bei Start des Assistenten wird der Name des betreffenden Formulars als Öffnungsargument OpenArgs übergeben. Die obige Anweisung liest nun die Datenquelle des Formulars aus und weist sie der RowSource-Eigenschaft des Listenfeldes zu. Da die HerkunftsTyp-Eigenschaft auf Feldliste eingestellt ist, werden hier keine Datensätze, sondern lediglich die Feldnamen der Datenquelle aufgelistet.

Um den Benutzer des Assistenten die Möglichkeit zu geben, bestimmte Feldinhalte auzuwählen, soll er mit einem Doppelklick auf einen Feldnamen den aktuellen Feldinhalt in das rechte Textfeld befördern. Dies erledigt eine zweite Ereignisprozedur, die mit der BeimDoppelklicken-Eigenschaft der Feldliste verknüpft ist:

Private Sub lstFeldliste_DblClick(Cancel As Integer)

Dim Feldname As String
Dim Feldinhalt As Variant

    Feldname = Me!lstFeldliste
    Feldinhalt = Forms(OpenArgs)(Feldname)

    If IsNull(Feldinhalt) Then
        Beep
        MsgBox "Das ausgewählte Feld hat keinen Inhalt!"
    Else
        If Not IsNull(Me!txtText) Then
            Me!txtText = Me!txtText & vbCrLf & Feldinhalt
        Else
            Me!txtText = Feldinhalt
        End If
    End If

End Sub

Die Prozedur ermittelt den Namen des angeklickten Datenfeldes und fügt ihn zusammen mit einem Zeilenumbruch (Konstante vbCrLf) dem Textfeld hinzu.

Nachdem der Benutzer mehrere Feldinhalte auf diese Weise übernommen hat, muss der Inhalt des Textfeldes in die Zwischenablage kopiert werden. Dafür ist die BeimKlicken-Ereignisprozedur der OK-Schaltfläche zuständig:

Private Sub btnOk_Click()

    Me!txtText.SetFocus

    'Text markieren
    SendKeys "^{HOME}"
    SendKeys "+^{END}"

    'Bearbeiten>Kopieren auswählen
    DoCmd.DoMenuItem acFormBar, acEditMenu _
                ,acCopy, , acMenuVer70

    DoCmd.Close

End Sub

Die Ereignisprozedur der Abbrechen-Schaltfläche enthält nur eine einzelne Anweisung:

Private Sub btnAbbrechen_Click()

    DoCmd.Close

End Sub

Der Start des Zwischenablage-Assistenten erfolgt über die DoCmd.OpenForm-Methode:

DoCmd.OpenForm FormName:="Zwischenablage-Assistent" _
                                    ,WindowMode:=acDialog _
                                    ,OpenArgs:=Screen.ActiveForm.Name

Der Ausdruck übergibt dem Zwischenablage-Assistenten direkt den Namen des momentan aktiven Formulars. Sollte kein Formular aktiv sein, tritt hierbei allerdings ein Laufzeitfehler auf. Die folgende Prozedur zeigt, wie Sie Ihn abfangen können. Zusätzlich wird auch gleich der Datensatz des aktuellen Formulars gespeichert, damit der Assistent stets auf die aktuellen Daten zugreift:

Sub ZwischenablageKopieren()

On Error Resume Next

    DoCmd.DoMenuItem acFormBar, acRecordsMenu _
                    ,acSaveRecord, , acMenuVer70

     DoCmd.OpenForm FormName:="Zwischenablage-Assistent" _
                    ,WindowMode:=acDialog _
                    ,OpenArgs:=Screen.ActiveForm.Name

End Sub


Wenn Sie die Prozedur ZwischenAblageKopieren in ein Standardmodul platzieren, können Sie sie von jedem beliebigen Formular aus aufrufen. Legen Sie innerhalb des Formulars einfach eine Schaltfläche mit einer BeimKlicken-Ereignisprozedur an und rufen Sie von hier aus die Prozedur ZwischenAblageKopieren auf.

Bei einer Adresse ist es beispielsweise erforderlich, dass die Postleitzahl und der Ort in einer einzelnen Zeile erscheinen. Um dies zu bewerkstelligen, legen Sie dem Adressenformular einfach eine Abfrage zugrunde und definieren hier ein neues, berechnetes Feld, über das Sie die Postleitzahl mit dem Ort verknüpfen. Nach dem Start des Assistenten wird das berechnete Feld wie alle anderen Datenfelder in der Feldliste aufgeführt und steht zur Auswahl bereit. Das Anlegen eines Steuerelements für das berechnete Feld ist hierbei nicht erforderlich, da der Assistent direkt auf die Datenquelle zugreift.


Ein Service der TriniDat Software-Entwicklung GmbH - Am Wehrhahn 45 - 40211 Düsseldorf

  Suche
Suche starten
  Service
Leserbrief / Frage zu Access
Kontakt
  NewsLetter
NewLetter bestellen
NewsLetter abbestellen
  Partner-Seiten
HyperLink

www.trinidat.de


HyperLink

www.fulldotnet.de