11. juni 2007 - 17:11Der 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.?
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)
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
Synes godt om
Ny brugerNybegynder
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.