30. maj 2004 - 23:52Der er
18 kommentarer og 1 løsning
VBA word: Find alle X typografier og indsæt tekst i form
Jeg har et dokument med masser af overskrifter, med typografien STOR1. Alle disse overskrifter, ville jeg gerne hente ind i en listboks på en form. Ved tryk på ét af overskrifterne i listboksen, springes der til det sted i dokumentet hvor overskriften forekommer.
Som jeg skriver: Overskrifterne skal hentes ind i en VBA form, i en listboks.
Dvs. at jeg vil lave en form der er tilgængelig uanset hvor jeg står i mit dokument.
Ved at benytte Index funktionen i Word, opretter jeg en indholdsfortegnelse der KUN er tilgængelig et bestemt sted i dokumentet, hvor jeg konstant skal gå tilbage til, for at vælge et nyt sted i mit dokument.
I dokumentoversigt kan jeg ikke teste, manipulere og sortere overskrifterne. Ved at hente dem ind i en listboks, kan jeg lave mine egne statistikker med mere.
Jeg ønsker blot kode eller forslag der fører til kode, der finder alle forekomster af OverskriftX og indsætter den i en listboks på en Userform.
Men har du i øvrigt et forslag til koden der indlæser overskrifterne i listboksen?
Her er mit umiddelbare forsøg, der ikke rigtig virker som jeg vil ha' det:
(Har selvfølgelig oprettet form og listboks.)
Sætter jeg ikke en begræsning på 5 (IF ...), får jeg fejl!
Sub test1() Dim indhold(10) Dim taeller taeller = 0 With ActiveDocument.Content.Find .Forward = True .Wrap = wdFindStop .ClearFormatting .Style = ActiveDocument.Styles("Overskrift 1") .Execute Do While .Found = True taeller = taeller + 1 If taeller = 5 Then GoTo videre indhold(taeller) = .Parent.Text .Execute Loop End With videre: UserForm1.Lst1.Clear
For go = 0 To taeller UserForm1.Lst1.AddItem indhold(go) Next UserForm1.Show End Sub
Nåja, det er nok dit array der ikke er stort nok. Prøv uden:
Sub test1() UserForm1.Lst1.Clear
With ActiveDocument.Content.Find .Forward = True .Wrap = wdFindStop .ClearFormatting .Style = ActiveDocument.Styles("Overskrift 1") .Execute Do While .Found = True UserForm1.Lst1.AddItem .Parent.Text .Execute Loop End With
With ActiveDocument.Content.Find .Forward = True .Wrap = wdFindStop .ClearFormatting .Style = ActiveDocument.Styles("Overskrift 1") Do While .Execute UserForm1.Lst1.AddItem .Parent.Text Loop End With
Jeg gik væk fra "Activedocument.find" og brugte i stedet "With selection.find". Det gjorde tricket.
Du ledte mig på vej - og tak for dét:-) ........ Hvis du opretter et svar, kan jeg give dig dine velfortjente point!
-------- ENDELIG KODE --------
With Selection.Find .ClearFormatting .Style = "Overskrift 1" Do While .Execute(FindText:="", Forward:=True, _ Format:=True) = True With .Parent UserForm1.List1.AddItem Selection.Text End With Loop End With UserForm1.Show
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.