2
www.ChF-Online.de  

Formularfelder kopieren (Details I)

   Neuigkeiten
   API-Aufrufe in VBA
   VBA2HTML
   Word
   Word-VBA
 Verschiedenes
 Feld-Arbeiten
 Form-Sachen
 Menü-/Symbolleisten
 VBA und Lotus Notes
 VBA und Mail
 Inside VBAIDE
 Von Word nach Outlook
aktiv aktiv Fix-und-Fertiges/Projekte
 Aufgaben in OL eintragen
 Einfacher Dateibrowser
 Formatvorlagen
 Formularfelder sichern
 Formluarfelder formatieren
aktiv  Formluarfelder formatieren 2
 Formluarfelder formatieren 3
 Formular-QuickInfos
 Kontextmenü erstellen
 Sicherheitskopien an bel. Orten
 Sicherheitskopien erstellen Word 2007/2010
 ToolTipps ändern
 Dokumenteigenschaften kopieren
 (Jahres-)Kalender erstellen
 Zeichen-Zähler
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
Getestet unter Word2000Getestet unter WordXPGetestet unter Word2003Einschränkungen unter (Word2007)Einschränkungen unter (Word2010)  
VBA-Code verfügbar: ja
Beispiel anzeigen
Makro/Datei speichern
Print

Da die Originalbefehle bei gesetztem Formularschutz nicht zur Verfügung stehen, die Funktion aber weiterhin per Tastenkombination zur Verfügung stehen soll (funktioniert bis Word2003 - Word2007 sperrt dann auch die Tastenkombination), muss zuerst der Originalbefehl abgefangen werden.
Für die Funktion "Fett" ist das die Prozedur: Sub Bold()

In dieser Prozedur wird zuerst überprüft, ob der Formularschutz gesetzt ist und in diesem Fall die neue Funktion BoldNeu aufgerufen. Ohne Formularschutz muss aber die Originalfunktion zur Verfügung stehen, was in diesem Fall entweder über die passende Dialogs(45)-Konstante oder durch Umschalten der Font-Eigenschaft .Bold = NOT CBool(.Bold) erreicht werden kann. Danach wird der Schaltflächenstatus in der neuen Symbolleiste gesetzt.

Sub Bold()  
' Originalbefehl: Fett  
If ActiveDocument.ProtectionType = wdAllowOnlyFormFields Then
  BoldNeu
Else
  Dialogs(45).Execute
  'Symbolleisten-Status setzen  
  cbar_CTL("Fett") = Selection.Font.Bold
End If
End Sub 

In der Formularfunktion BoldNeu wird dann wieder zuerst der Formularschutz überprüft und anschließend der markierte Text in einem Property gespeichert.

' Markierten Text speichern  
TextSelect = Selection.Range

Dazu wird der Wert über die Property Get- und Property Let-Prozeduren im Property "TextSelect" zwischengespeichert und wieder ausgelesen:

Property Let TextSelect(sText As Range)  
' Aktuelle Markierung speichern  
Set rngText = sText
End Property  
Property Get TextSelect() As Range ' Markierung wieder herstellen Set TextSelect = rngText End Property

Anschließend wird überprüft, ob Text markiert ist, da sich Word da mitunter unterschiedlich verhält: mal wird nur für die nächste Eingabe die Formatierung gesetzt, mal für das Wort, in dem die Eingabemarke steht.

    ' Fett umschalten  
    ' Wenn kein Text markiert ist das aktuelle Wort formatieren  
    If Len(TextSelect) = 0 Then
      Selection.Words(1).Font.Bold = Not CBool(Selection.Words(1).Font.Bold)
      bBold = CBool(Selection.Words(1).Font.Bold)
    Else
      Selection.Font.Bold = Not CBool(Selection.Font.Bold)
      bBold = CBool(Selection.Font.Bold)
    End If

Danach wird der Schaltflächen-Status (gedrückt/nicht gedrückt) über die Hilfsfunktion cbar_CTL(Tag) auf der Symbolleiste gesetzt:

    'Schaltflächen-Status setzen  
    cbar_CTL("Fett") = bBold

Achtung
Standardmäßig ist es in Formularfeldern aber so, dass immer das gesamte Feld markiert wird, wenn man in ein Formularfeld wechsel. Im normalen Textbereich erfolgt dieses Verhalten nicht, wodurch sich folgendes Problem ergibt:
Beim abschließenden Setzen der Markierung TextSelect wird zwar sowohl im Formularfeld als auch im normalen Text die Markierung korrekt wieder hergestellt, jedoch geht dabei im normalen Textbereich die Information über die Formatierung verloren, wenn kein Text markiert ist.

Aus diesem Grund muss für den ungeschützten Bereich überprüft werden, ob ein Text markiert ist Len(TextSelect) bevor ggf. die Markierung wieder gesetzt wird.
Versucht man dieses Verhalten auch auf den Text im Formularfeld anzuwenden, wird, wenn kein Text markiert ist, beim Einschalten des Formularschutzes wieder das gesamte Formularfeld markiert und die eigentliche Funktion (z.B. mit Fett weiterschreiben) deaktiviert. Aus diesem Grund ergibt sich z.Z. ein etwas unterschiedliches Verhalten der Formatierungsbefehle, je nachdem auf welchen Text sie angewandt werden.


<< Zurück

Weiter >>


 Besucher: 3 online  |  145 heute  |  2799 diesen Monat  |  1584598 insgesamt | Seitenaufrufe: 57   Letzte Änderung: 25.02.2011 © 2001-14 Christian Freßdorf
  Ein tiefer Fall führt oft zu höherem Glück.
Shakespeare
 powered by phpCMS and PAX