Top-Themen

Aktuelle Themen (A bis Z)

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, 19832 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
VB for Applications
Excel VBA an PDF Formular anpassen
gelöst Frage von Detel1VB for Applications3 Kommentare

Hallo! Ich habe ein PDF Formular das aus Excel VBA beschrieben wird, per email versandt und per outlook zurueck ...

VB for Applications
Web-Formular (Auswahlliste) Wert per Excel-VBA auswählen und absenden
gelöst Frage von machohunkVB for Applications5 Kommentare

Hallo, ich bin bisher leider beim Versuch gescheitert per Excel-VBA auf einer Webseite den Wert in einer Auswahlliste von ...

Microsoft Office
Access (2010), Datensätze zählen via VBA und Wert in anderes Formular übergeben
gelöst Frage von d4shoerncheNMicrosoft Office11 Kommentare

Guten Morgen, ich komme bei meiner Access-Datenbank leider nicht weiter. Ich habe eine Datei in der zwei Tabellen und ...

Microsoft Office
Excelsortierung mit VBA
gelöst Frage von abuelitoMicrosoft Office8 Kommentare

Hallo an Alle, ich habe wieder mal ein riesen Problem: Ich habe eine Exceltabelle mit verschiedenen Spalten (Ort, Preis, ...

Neue Wissensbeiträge
Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 35 MinutenSicherheit2 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Sicherheit

Meltdown und Spectre: Die machen uns alle was vor

Information von Frank vor 59 MinutenSicherheit9 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Microsoft

Update KB4073578 für AMD CPU (Spectre und Meltdown Lücke)

Information von sabines vor 7 StundenMicrosoft

Wegen Problemen (BOSD, nicht startende PCs) wurde das Update KB4056897 und KB4056894 für AMD CPUs zurückgezogen. Dieses Update KB4073578 ...

Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 20 StundenMac OS X4 Kommentare

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser erreichbar sind. Leider fehlt ...

Heiß diskutierte Inhalte
Batch & Shell
Anmeldevorgang für Informatikraum (Schule) unter Windows
gelöst Frage von IngenieursBatch & Shell27 Kommentare

Hey zusammen, ich werde in naher Zukunft den Informatik Raum meiner jetzigen Schule von dem aktuellen Betreiber übernehmen (Vertrag ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von 92943Windows 1025 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
Frage von Windows10GegnerNetzwerkgrundlagen18 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...