Formuliervelden in Word

Status
Niet open voor verdere reacties.

mulderwme

Gebruiker
Lid geworden
12 dec 2014
Berichten
232
Hallo allemaal,

Ik gebruik een keuzelijst met velden uit de oude besturingselementen. Ik wil de gebruiker laten kiezen uit de symbolen voor een lachebekkie, een huilebalk en een neutrale, dus :) :( :|. Het gaat dus om de normale symbolen uit Word. Staan in Wingdings.

Maar die velden zijn natuurlijk beveiligd. Ik wil hiervoor een macro maken. Uit de keuzelijst kunnen ze dan kiezen uit tevreden, neutraal en ontevreden. Dan moeten ze ook nog in groen, blauw en rood komen en 15 pts.

Mij lukt dat niet :( Ik heb iets geprobeerd met macro uitvoeren bij kiezen van veld en bij verlaten van veld, maar ik kom er niet uit.

Wie kan mij helpen?

alvast bedankt
Willem
 
Laatst bewerkt:
Je geeft vermoedelijk zelf al het probleem, en daarmee de oplossing. Als je document beveiligd is, en je in de beveiligde sectie iets veranderd wilt hebben met je macro, moet je in de macro eerst de beveiliging uit zetten, dan de aanpassingen uitvoeren, en dan de beveiliging weer aan zetten.
 
Laatst bewerkt:
Hallo Michel,

Bedankt voor je reactie. Het gaat mij om een stukje VBA code waarmee de beveiliging wordt uitgezet, het symbool geplaatst en vervolgens de beveiliging er weer wordt opgezet.

groet
willem
 
Ik zou zeggen: laat je code maar zien :). Maar om een voorbeeldje te geven, zo doe ik het:
Code:
        If .ProtectionType = wdAllowOnlyFormFields Then
            bProtected = True
            .Unprotect Password:=sPassword
        End If
....
Hier komt de code die ik laat uitvoeren
....
        If .ProtectionType = wdNoProtection And bProtected = True Then
            .Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=sPassword
        End If
Ik gebruik een boolean variabele om vast te leggen wat de status van het document is; bij een niet-beveiligd document wil ik niet achteraf alsnog de beveiliging instellen. Dus dat gebeurt alleen als bProtect de waarde True heeft.
 
Hallo OctaFish,

Ik weet niet precies hoe ik jouw code moet gebruiken. Ik kan wel mijn probeersel tonen.

Mijn idee was als volgt.
Ik laat de gebruiker kiezen uit Tevreden, Neutraal of Ontevreden.
Bij de Opties voor vervolgkeuzelijst, laat ik een macro uitvoeren bij het kiezen van het veld. Ik laat dan de beveiliging verwijderen.

ActiveDocument.Unprotect "1234"

Dan moet iemand kiezen uit de keuzelijst.

Bij het verlaten van het veld wil ik de tekst laten omzetten naar een teken.

Sub IngevoerdeTekstSelecteren()

Inhoud = Selection

If Selection = "tevreden" Then
Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4022, Unicode:=True
Selection.Font.Color = -704593921
ElseIf Selection = "neutraal" Then
Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4021, Unicode:=True
Selection.Font.Color = -654245889
ElseIf Selection = "L" Then
Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4020, Unicode:=True
Selection.Font.Color = wdColorRed
End If

End Sub

Vervolgens de beveiliging er weer op.

ActiveDocument.Protect wdAllowOnlyFormFields, , "1234"


Maar mijn logica klopt niet, want het werkt niet.

Groet
Willem
 
Je hebt mijn opmerking in bericht #2 niet helemaal goed begrepen/uitgevoerd. Komt wellicht doordat er in de tekst een 'e' ontbrak in 'de'. In ieder geval: zou zou de code er uit moeten zien (inclusief CODE opmaak, die code een stuk leesbaarder maakt ;) ).
Code:
Sub IngevoerdeTekstSelecteren()
    ActiveDocument.Unprotect "1234"
    Inhoud = Selection
    Select Case Selection
        Case Is = "tevreden"
            Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4022, Unicode:=True
            Selection.Font.Color = -704593921
        Case Is = "neutraal"
            Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4021, Unicode:=True
            Selection.Font.Color = -654245889
        Case Is = "L"
            Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4020, Unicode:=True
            Selection.Font.Color = wdColorRed
    End Select
    ActiveDocument.Protect wdAllowOnlyFormFields, , "1234"
End Sub
 
FormFields

Ha OctaFish,

Je hebt me goed op weg geholpen. Hij bleek nog niet perfect, maar onderstaande code werkt prima. Er is 1 maar... Zodra ik InsertSymbol heb gedaan, wordt het veld omgezet naar tekst. Dat betekent dat de gebruiker het symbool niet meer kan wijzigen wanneer hij zich vergist heeft.

Mijn nieuwe idee was, om de dropdown om te zetten naar een wdFieldFormTextInput en daar het symbool in te zetten. Hebben ze dan een fout gemaakt, dan kunnen ze handmatig via Invoegen, Symbool een Wingdings 74, 75 of 76 invoeren.

Mijn concrete vraag is hoe ik zo'n symbool in een wdFieldFormTextInput kan zetten.

Ik hoor graag van jou (en anderen).

groet
Willem

___________________

Code:
Sub Vervangen()

ActiveDocument.Bookmarks.Add Name:="Dropdown1"

Waarde = Selection.FormFields(1).Result

    ActiveDocument.Unprotect "1"
    Select Case Waarde
        Case Is = "tevreden"
            Selection.GoTo What:=wdGoToBookmark, Name:="Dropdown1"
            With Selection.Font
                .Color = -704593921
                .Size = 18
                .Bold = True
            End With
            Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4022, Unicode:=True
                    
        Case Is = "neutraal"
            Selection.GoTo What:=wdGoToBookmark, Name:="Dropdown1"
        
            With Selection.Font
                .Color = -654245889
                .Size = 18
                .Bold = True
            End With
            Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4021, Unicode:=True

        Case Is = "ontevreden"
            Selection.GoTo What:=wdGoToBookmark, Name:="Dropdown1"
            
            With Selection.Font
                .Color = wdColorRed
                .Size = 18
                .Bold = True
            End With
            Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4020, Unicode:=True
    
    End Select

    ActiveDocument.Protect wdAllowOnlyFormFields, NoReset = False, "1"

End Sub
 
Laatst bewerkt:
Ik zie dat je de CODE knop nog niet gevonden hebt :). Zou je die nog even op kunnen sporen, en je code met terugwerkende kracht goed kunnen opmaken? De knop ( # ) krijg je als je naar het <Ga Geavanceerd> venster gaat.
 
Waarvoor dank! Overigens had je nog een berichtje met code :).
Ik snap je probleem niet helemaal; wat gebeurt er dan met de keuzelijst? En kun je die dan niet laten staan i.p.v. omzetten naar tekst?
 
Formfields

Het is ook wat lastig om uit te leggen. Je ziet het duidelijk wanneer je de macro uitvoert.

In de bijlage vind je een document met 2 formfields en 2 dropdownfields.

Probeer maar.

groet
willem
 

Bijlagen

En wat is het wachtwoord?
 
Laat maar, staat in je code :).
 
Formuliervelden in Word (opgelost)

Hallo meedenkers,

De uitdaging van de Formuliervelden in Word heb ik op een andere manier opgelost. I.p.v. een keuzelijstje heb ik een gewoon invoerveld gebruikt. De gebruiker kan nu met een sneltoets aangeven wat zijn mening is en dan verschijnt een symbool in de juiste kleur. Dat zijn 3 macro's. Ik heb ook nog een 4e macro gemaakt om het veld weer naar standaard te zetten. De macro werkt namelijk op elk veld. Dus wanneer ze per ongeluk een lachebekkie invoeren is dat weer te herstellen.

Hier onder de code en bedankt voor het meedenken.

Groet,
Willem

Code:
Sub Macro1()

'Shift+Ctrl+T = groen, tevreden

ActiveDocument.Unprotect "1"

    Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4022, Unicode:=True
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    With Selection.Font
        .Color = 5287936
        .Size = 18
        .Bold = True
    End With

ActiveDocument.Protect wdAllowOnlyFormFields, NoReset = False, "1"

End Sub
Sub Macro2()

'Shift+Ctrl+N = gelig, neutraal

ActiveDocument.Unprotect "1"

    Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4021, Unicode:=True
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    With Selection.Font
        .Color = -654245889
        .Size = 18
        .Bold = True
    End With

ActiveDocument.Protect wdAllowOnlyFormFields, NoReset = False, "1"

End Sub
Sub Macro3()

'Shift+Ctrl+O = rood, ontevreden

ActiveDocument.Unprotect "1"

    Selection.InsertSymbol Font:="Wingdings", CharacterNumber:=-4020, Unicode:=True
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    With Selection.Font
        .Color = wdColorRed
        .Size = 18
        .Bold = True
    End With

ActiveDocument.Protect wdAllowOnlyFormFields, NoReset = False, "1"

End Sub
Sub Macro4()

'Shift+Ctrl+S = terug naar standaard

ActiveDocument.Unprotect "1"
        
    With Selection.Font
        .Color = wdColorAutomatic
        .Size = 11
        .Bold = False
    End With
    
    Selection.FormFields.Add Range:=Selection.Range, Type:= _
        wdFieldFormTextInput

ActiveDocument.Protect wdAllowOnlyFormFields, NoReset = False, "1"

End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan