Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Formulare und VBA

Frage Microsoft Microsoft Office

Mitglied: thommy75

thommy75 (Level 1) - Jetzt verbinden

01.02.2008, aktualisiert 06.03.2008, 19204 Aufrufe, 7 Kommentare

Kontrollkästchen und Textformularfelder automatisch ausfüllen

Hallo im IT-Forum,

bin gerade dabei, ein Word-Formular zu erstellen. In dem gibt es haufenweise Kontrollkästchen und Textformularfelder, die auch ineinander greifen sollen. D.h.:
1. Wird in ein Textfeld etwas eingegeben, soll es beim Verlassen (des Textfeldes via Tab-Taste) automatisch den eingegebenen Text in ein weiteres Textfeld innerhalb des Dokuments schreiben (sind einfach doppelte Einträge im Dokument)
2. Wird ein bestimmtes Kontrollkästchen aktiviert, sollen automatisch weitere Kästchen mitaktiviert werden.

Hab schon einige Lösungsansätze versucht, aber noch nichts gefunden, das funktioniert.
Leider sind meine VBA-Kenntnisse derzeit noch etwas bescheiden.

Kann mich jemand bei meinem Problem unterstützen?

Gruss, thommy75
Mitglied: RDiller
02.02.2008 um 12:20 Uhr
Hallo Thommy,

das ist eigentlich sehr einfach.
In den Optionen für die Formularfelder vergibst Du erst einmal eindeutige Namen für die Felder.
Im Mittleren Bereich findest Du die Einträge für "Makro ausführen bei"
"Ereignis" --> das ist das Makro, das Ausgeführt werden soll, wenn in das Formularfeld hineingegangen wird.
"Beenden" --> das ist das Makro, das Ausgeführt werden soll, wenn das Formularfeld verlassen wird.
Bevor Du hier ein Makro zuordnen kannst, musst Du es natürlich erst einmaö im VisualBasic Editor von Word in diesem Dokument erstellen.

Normale Textfelder spricht man mit:

ActiveDocument.FormFields("<Hier der Name des Formularfelds>").Result an.

Z.b. Nach Verlassen des Feldes "FELD1" soll die EIngabe in "FELD2" geschriben werden:

Public Sub Feld1() 'Der Name des Makros sollte sprechend sein!

ActiveDocument.FormFields("FELD2").Result = ActiveDocument.FormFields("FELD1").Result

end sub

Dem Formularfeld1 "FELD1" weist Du dann das Makro Feld1 für Beenden zu.


Kontrollkästchen sprichst Du am besten mit:

ActiveDocument.FormFields("<Kontrollkästchen-name").Checkbox.value

an, da hier aus irgend einem Grund Result nicht immer Funktioniert.


Bei Textfeldern hast Du leider die Beschränkung von 255 Zeichen beim kopieren.
Hier musst Du dann den Feldinhalt über das Clipboard in das andere Feld kopieren.


Gruß

Ralf
Bitte warten ..
Mitglied: RDiller
04.02.2008 um 13:38 Uhr
Hallo Thommy,

hier noch die Deklartionen, die Funktion und der Funktionsaufruf um Texte > 256 Zeichen in ein Formularfeld zu bekommen.


'
'Deklarationen zur Benutzung des Clipboards

'Ist notwendig, da in Word ein BUG ist, der nicht zulässt Zeichenfolgen > 256 Char direkt in ein
'Textformularfeld zu bringen
'


Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) _
As Long
Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) _
As Long
Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
ByVal dwBytes As Long) As Long
Declare Function CloseClipboard Lib "User32" () As Long
Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) _
As Long
Declare Function EmptyClipboard Lib "User32" () As Long
Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _
ByVal lpString2 As Any) As Long
Declare Function SetClipboardData Lib "User32" (ByVal wFormat _
As Long, ByVal hMem As Long) As Long

Public Const GHND = &H42
Public Const CF_TEXT = 1
Public Const MAXSIZE = 4096


'Funktion um Texte > 256 Char über die Zwischenablage in ein Formularfeld zu bringen
'

Function ClipBoard_SetData(MyString As String)
Dim hGlobalMemory As Long, lpGlobalMemory As Long
Dim hClipMemory As Long, x As Long

' Allocate moveable global memory.
'-------------------------------------------
hGlobalMemory = GlobalAlloc(GHND, Len(MyString) + 1)

' Lock the block to get a far pointer
' to this memory.
lpGlobalMemory = GlobalLock(hGlobalMemory)

' Copy the string to this global memory.
lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString)

' Unlock the memory.
If GlobalUnlock(hGlobalMemory) <> 0 Then
MsgBox "Could not unlock memory location. Copy aborted."
GoTo OutOfHere2
End If

' Open the Clipboard to copy data to.
If OpenClipboard(0&) = 0 Then
MsgBox "Could not open the Clipboard. Copy aborted."
Exit Function
End If

' Clear the Clipboard.
x = EmptyClipboard()

' Copy the data to the Clipboard.
hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)

OutOfHere2:

If CloseClipboard() = 0 Then
MsgBox "Could not close Clipboard."
End If

End Function


'
' Aufruf um den Inhalt in das Formularfeld zu bringen
'

ClipBoard_SetData <Textstring>
Bitte warten ..
Mitglied: RDiller
04.02.2008 um 13:44 Uhr
Sorry,

habe noch etwas vergessen! Du mußt natürlich nach Füllen des Clipboards mit

"ClipBoard_SetData <Text>"

den kopierten Text auch noch in das Feld bringen!!


Der Aufruf muß heissen:

'1. Die Kurzbeschreibung in die Zwischenablage kopieren
ClipBoard_SetData <Text>

'2. Den Cursor im Dokument in das Feld setzten
Selection.GoTo What:=wdGoToBookmark, Name:="<Feldname>"

'3. Den Inhalt der Zwischenablage in das Feld kopieren
Selection.Paste
Bitte warten ..
Mitglied: thommy75
04.02.2008 um 23:24 Uhr
Hallo Ralf,

Super-ausführliche Antwort, vielen Dank!
Habe soeben Deinen Lösungsvorschlag in die Tat umgesetzt - genauso wollte ich es haben.
Mit den 255 Zeichen bin ich bisher gut bedient, aber man weiss ja nie... Und das Dokument wird ständig ausgebaut, da kann es doch mal vorkommen, dass ich darauf zurückgreifen werde.

Eigentlich wäre mein Problem gelöst, aber vielleicht hast Du noch einen Tipp:
Ich möchte teilweise Kontrollkästchen bzw. Textfelder ausblenden - geht das überhaupt?
Habe schon etliches ausprobiert (alla .....Visible o.ä.), konnte aber noch keine Lösung finden.

Grüsse, Thomas
Bitte warten ..
Mitglied: RDiller
05.02.2008 um 16:58 Uhr
Hi Thommy,

das kannst Du mit den Formularfeldern in Word leider nicht.
Du kannst aber eine Userform in VBA erstellen und das dort realisieren.
Ich habe soetwas auch schon mal realisiert - kleiner Tipp, benenne die Felöder im Wordformular und die entsprechenden in der Userform identisch, so kannst Du mit einem einfachen Loop alle Userform-inhalte in die Formularfelder bringen.

Gruß

Ralf
Bitte warten ..
Mitglied: thommy75
27.02.2008 um 00:33 Uhr
Hallo Ralf (oder auch die Anderen...),

ist schon eine Weile her, seit wir über dieses Thema gesprochen haben...
Hab mir inzwischen ein wenig Lektüre besorgt un mich eingelesen (VBA-Programmierung von Bernd Held), aber noch nicht ganz das gefunden, was ich suche.
Ich möchte Deinen Vorschlag umsetzen, und mit Userform arbeiten. Sieht bisher ganz gut aus, nur verstehe ich das mit dem "Loop" nicht ganz.
In jedem meiner Userforms stecken ca. 30-60 Textfelder, Kontrollkästchen usw., die ich bisher einzeln in das Dokument übertrage, z.B.:
01.
TextSTANDORT1.Value = ActiveDocument.FormFields("STANDORT1").Result 
So wie Du angedeutet hast, müsste es einfacher gehen (einfach alle gleichnamigen Elemente in das Word-Dokument schreiben bzw. auch auslesen). Hast Du da auch eine Lösung parat?

Mir ist auch aufgefallen, dass das Übertragen vom Userform ins Dokument (nicht umgekehrt) ewig dauert. Ist das normal?

Gruss, Thomas
Bitte warten ..
Mitglied: RDiller
06.03.2008 um 13:45 Uhr
Hallo Thomas,

hier der Code, mit dem ich die Felder aus dem Word-Formular in die Userform bringe:

Set docu = ActiveDocument
For Each FormField In docu.FormFields
Feld_name = FormField.Name
If FormField.CheckBox Then
Me.Controls(FormField.Name) = FormField.CheckBox.Value
Else
Me.Controls(FormField.Name) = FormField.Range
End If
Next

ich hoffe, das hilft Dir

Gruß

Ralf
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
Excel VBA Sortierung von Daten (4)

Frage von easy4breezy zum Thema VB for Applications ...

Microsoft Office
gelöst Excel-Formel oder VBA (7)

Frage von nicki01 zum Thema Microsoft Office ...

VB for Applications
gelöst VBA-Makro verschwindet nach Speichern (5)

Frage von lupi1989 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (19)

Frage von patz223 zum Thema Windows Userverwaltung ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (15)

Link von Penny.Cilin zum Thema Viren und Trojaner ...