jetzt weiß ich wieder, warum ich die Office-Produkte so liebe...
ok, anbei ein Code, der Dir hoffentlich ein wenig weiterhilft.
Anmerkungen:
* Seltsam ist, dass die Kontrollkästchen beide den gleichen Namen haben. Das sind auch andere Checkboxen, als wenn man sie mit den Entwicklertools in das Dokument einfügen würde. Da weißt Du sicherlich besser Bescheid als ich.
* Ich kann das geänderte Dokument auf meinem Rechner nicht speichern. Ich bekomme lediglich ein 'Befehl misslungen'. Das wird mit Sicherheit an diesem dusseligen Office Trust-Center liegen. Habe jetzt aber nicht den Nerv, mich da einzuarbeiten.
Code: Alles auswählen
IncludePath "COMatePlus" ; <- Muss Du auf Deine Bedürfnisse anpassen!
XIncludeFile "COMatePlus.pbi"
EnableExplicit
#wdFormatXMLDocument=12 ; XML document format.
Procedure ShowErrorIfAny()
If COMate_GetLastErrorCode()
Debug COMate_GetLastErrorDescription()
EndIf
EndProcedure
Define.COMateObject WordApplication
Define.COMateObject WordDocument
Define.COMateEnumObject FormFields
Define.COMateObject FormField
Define FormFieldName.s
Define FormFieldCheckBoxValue
Define.s SourceDoc = GetPathPart(ProgramFilename()) + "\setze_kontrollkästchen.docx" ; <- Muss Du auf Deine Bedürfnisse anpassen!
Define.s TargetDoc = GetPathPart(ProgramFilename()) + "\output.docx" ; <- Muss Du auf Deine Bedürfnisse anpassen!
WordApplication = COMate_CreateObject("Word.Application")
If WordApplication
WordApplication\SetProperty("DisplayAlerts = #False")
Debug "Open..."
WordDocument = WordApplication\GetObjectProperty("Documents\Open('" + SourceDoc + "')")
ShowErrorIfAny()
Debug "Enumeration..."
FormFields = WordDocument\CreateEnumeration("FormFields")
If FormFields
FormField = FormFields\GetNextObject()
While FormField
; Namen auslesen
FormFieldName = FormField\GetStringProperty("Name")
Debug "FormFieldName: " + FormFieldName
; Wert der Checkbox auslesen
FormFieldCheckBoxValue = FormField\GetIntegerProperty("CheckBox\Value")
Debug "FormFieldCheckBoxValue: " + FormFieldCheckBoxValue
; Neuen Wert setzen
FormField\SetProperty("CheckBox\Value=#True") ; ... oder #False
ShowErrorIfAny()
Debug "-----------------"
FormField\Release()
FormField = FormFields\GetNextObject()
Wend
FormFields\Release()
EndIf
; schlägt bei mir fehl
; Debug "ActiveDocument\SaveAs()..."
; WordApplication\Invoke("ActiveDocument\SaveAs('" + TargetDoc + "')")
; ShowErrorIfAny()
; schlägt bei mir fehl
; Debug "ActiveDocument\SaveAs2()..."
; WordApplication\Invoke("ActiveDocument\SaveAs2('" + TargetDoc + "', " + #wdFormatXMLDocument + " As Long)")
; ShowErrorIfAny()
Debug "Quit()..."
WordApplication\Invoke("Quit(0)")
ShowErrorIfAny()
WordApplication\Release()
ShowErrorIfAny()
Debug "ende"
EndIf
Wie geschrieben: Der Code soll als Inspiration dienen. Vielleicht enthält er genau die Informationen, die Dir zur erfolgreichen Bearbeitung noch gefehlt haben.
Grüße ... Peter