Avatar billede jan_amdi Nybegynder
11. juni 2007 - 17:11 Der er 4 kommentarer og
1 løsning

Gemme felter i dokumentet

Hejsa

Jeg har lavet en VBA applikation, hvor jeg udskifter nogle flettefelter i et dokument, med forskellige tekster.
Nu har brugeren fundet ud af, at hun vil kunne fortryde en eller flere af de tekster der sættes ind, og dermed få feltet tilbage.
Problemet er bare, at det kan ske flere dage senere, så jeg kan ikke bruge fortryd knappen.

Jeg vil derfor gemme feltet før jeg indsætter teksten, så når brugeren fortryder, kan jeg indsætte feltet som det stod før.

Jeg har prøvet at gemme flettefeltet som en Custom Document Property, men her går de bagvedligende feltkoder tabt.
Jeg kan heller ikke gemme feltet som en autotekst, da det skal gemmes i selve dokumentet og ikke i skabelonen.
Har været ude i at gemme feltet i sidehovedet og samtidig gøre skriften hvid, så den ikke kan ses. Bevares det virker, men er bestemt ikke nogen køn løsning.

Så mit spørgsmål er - hvor, i et dokument, kan jeg gemme et felt, så jeg senere kan få fat på det - uden det midster sin formatering.?

På forhånd tak.

Med venlig hilsen
Jan Amdi
Avatar billede word-hajen Nybegynder
12. juni 2007 - 19:07 #1
Gem dem som autotekster.

I øvrigt - er det meningen, at brugeren selv skal bestemme hvad det er for nogle felter, der skal sættes ind igen og hvor?
Avatar billede supertekst Ekspert
19. juni 2007 - 15:21 #2
Hvilke slags flettefelter er der tale om?
Avatar billede jan_amdi Nybegynder
20. juni 2007 - 08:08 #3
De kan ikke gemmes som autotekster, da der laves en masse breve, som alle har samme skabelon. Og felterne/teksterne er unikke for hvert brev.

Felterne ligger allerede i brevet, og afhængig af nogle valg brugeren træffer, så bliver nogle af de felter erstattet med tekstblokke.
Når brugerne så finder ud af, at de har truffet et forkert valg tidligere i brevet, skal de kunne fortryde de tekstblokke der er sat ind, træffe det rigtige valg og kører videre derfra.

De felter jeg benytter mig af er almindelige flettefelter (erstattes automatisk med faste tekstblokke) samt AutoTextList felter (stiller brugeren et spørgsmål, hvor svaret danner baggrund for hvilken tekstblok der indsættes)
Avatar billede supertekst Ekspert
20. juni 2007 - 09:05 #4
Har du mulighed for at sende en kopi af en skabelon til: pb@supertekst-it.dk ?
Avatar billede supertekst Ekspert
21. juni 2007 - 09:53 #5
Forslags-kode i dokumentet (ThisDocument):

Public listeNavn As String
Dim feltListe As String
Sub AutoOpen()
Rem =======================
    listeNavn = "FeltListe"      'navn på dok.variabel - kan modificeres
Rem =======================

Rem Test - slet feltliste
'    ActiveDocument.Variables(listeNavn).Delete
   
Rem Test om fejl-liste findes indlejret
    With ActiveDocument
        If .Variables.Count > 0 Then
            If findesFeltliste = False Then
                opretFeltListe
            End If
        Else
            opretFeltListe
        End If
    End With
End Sub
Private Function findesFeltliste()
    For Each dv In ActiveDocument.Variables
        If dv.Name = listeNavn Then
            findesFeltliste = True
            Exit Function
        End If
    Next dv
    findesFeltliste = False
End Function
Private Sub opretFeltListe()
Dim felt As Field, feltListe As String
    feltListe = ""
    For Each felt In ActiveDocument.Fields
        tekst = felt.Result.Text
        feltListe = feltListe + tekst + "|"
    Next felt
   
    ActiveDocument.Variables.Add Name:=listeNavn, Value:=feltListe
End Sub
Public Sub ResetFelt()
    If Selection.Fields.Count > 0 Then
        kode = Selection.Fields(1).Code
        st = Selection.Fields(1).Result.Text
        opr = findOpr(kode)
        Selection.Fields(1).Result.Text = opr
    End If
End Sub
Private Function findOpr(kode)
Dim fListe
Rem Indlæsning af feltliste
    fListe = ActiveDocument.Variables(listeNavn).Value

    While InStr(fListe, "|") > 0
        p = InStr(fListe, "|")
        If p > 0 Then
            part = Left(fListe, p - 1)
            cpart = Trim(Left(part, Len(part) - 3))
            If InStr(kode, cpart) > 0 Then
                findOpr = part
                Exit Function
            End If
            fListe = Mid(fListe, p + 1)
        Else
            Stop
        End If
    Wend
End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Tag et kursus i Word og øg effektiviteten

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester