"Esben Kolind Laustrup" <ezben_fjern_dette_@tele2adsl.dk> wrote in message
news:1aRGc.1853$373.1291@news.get2net.dk...
> Jeg har et dokument med en række notater, som jeg gerne vil have
> indekseret/oprettet et stikordsregister over. Word XP kan oprette et
indeks,
> men man skal markere alle de ord som skal med i stikordsregisteret. Da
> dokumentet er langt, vil det tage meget langt tid at markere alle de ord,
> der skal indekseres, så jeg vil høre, om der er noget der ved, om man kan
> lave et _automatisk_ stikordsregister, hvor alle ord i dokumentet kommer
> med.
>
> Ord som "at", "men", "så" osv. vil selvfølgelig fremgå på utrolig mange
> sider, men dem kan man jo blot slette i indekset bagefter.
>
> Håber I kan hjælpe
Tjah. Jeg kan da prøve.
Nu ved jeg ikke hvor meget du ved om stikordsregistre i Word, men lidt basal
viden først.
Et stikordsregister er et felt { INDEX } som ud fra { XE Sitkord} felter
laver en liste over stikord med sidenummer.
Så hvert { XE }felt giver et stikord og sidenummer i listen. Hvis det samme
stikord optræder flere gange bliver det ikke gentaget i stikordsregistret
kun med et evt nyt sidenummer.
Der er nogle muligheder for at gøre indekset mere eller mindre fancy med
brug af switches. Læs onlinehjælpen for inspiration.
Et {XE} felt kan enten indsættes manuelt eller ved brug af en concordance
(konkordans ??) fil.
En concordance fil er en to-spaltet tabel med søgeord i venstre og stikord i
højre spalte. Når man så laver en automarkering bliver der lavet et { XE }
felt i dokumentet hver gang søgeordet optræder. Det er så vidt jeg husker
ganske hurtigt. Der bliver lavet nye XE felter hver gang man laver en
automarkering, uanset at der allerede er et XE felt.
At lave en liste over ord i et dokument kan sikkert lade sig gøre på flere
måder, men det bliver en tung opgave, særligt hvis det er et stort dokument.
Men her er en makro til inspiration
Sub CreateListOfWords()
Dim vArr() As String
Dim I As Long
Dim vStr As String
ReDim vArr(0)
For I = 1 To ActiveDocument.Words.Count
vStr = ActiveDocument.Words(I)
If Not InList(vArr, vStr) Then
vArr(UBound(vArr)) = vStr
ReDim Preserve vArr(UBound(vArr) + 1)
End If
Next I
For I = 0 To UBound(vArr)
Debug.Print I; vArr(I)
Next I
End Sub
Function InList(Tmparr() As String, vWord As String) As Boolean
Dim x As Long
InList = False
For x = 0 To UBound(Tmparr)
If Tmparr(x) = vWord Then
InList = True
Exit For
End If
Next x
End Function
Dette ikke løser dit problem, men måske kan finde ud af hvordan du vil
angribe at lave indekset. Og så er du velkommen til at spørge igen.
Mvh Mads