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, 19602 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 ..
Ähnliche Inhalte
JavaScript
gelöst Jquery Formular absenden (1)

Frage von tobmes zum Thema JavaScript ...

Entwicklung
gelöst Daten aus Formular sicher übertragen (2)

Frage von schneerunzel zum Thema Entwicklung ...

PHP
Formular ausfüllen, speichern und editierbar machen (7)

Frage von wescraven07 zum Thema PHP ...

VB for Applications
gelöst VBA . PasteSpecial (8)

Frage von Actares zum Thema VB for Applications ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Server-Hardware
HP DL380 G7: Booten vom USB via USB 3.1-PCI-e Karte möglich? (24)

Frage von Paderman zum Thema Server-Hardware ...

Windows 7
Bluesreens unternehmensweit (18)

Frage von SYS64738 zum Thema Windows 7 ...

LAN, WAN, Wireless
IP Adressen - Modem - Switch - Accesspoint (17)

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

Festplatten, SSD, Raid
gelöst Raid-Controller (Areca) Datenverlust trotz R5 (16)

Frage von sebastian2608 zum Thema Festplatten, SSD, Raid ...