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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.