24. oktober 2004 - 18:21Der er
7 kommentarer og 1 løsning
Hvordan laver jeg en ordliste?
Findes der en metode, hvorpå man let kan lave en ordliste bagest i bogen, sådan à la stikordsregister, bare ikke med henvisning til den side, ordet står på, men en forklaring af ordet?
Hvis jeg kunne undgå at kigge 250 A4-sider igennem, kopiere og indsætte ord i ordlisten, og derefter sortere den i alfabetisk form, ville jeg være meget, meget glad ;-)
Jeg skal bruge Word, men i dette tilfælde vil jeg kunne bruge funktionen i et andet program, hvis det findes, og bagefter konvertere dokumentet tilbage i Wordl-format.
I Word har jeg i øvrigt også forsøgt mig med Fodnote/slutnote-funktionen, men den er ikke tilstrækkelig, da den dels sætter et tegn ved ordet, som kun skal være markeret med fed, dels ikke gentager ordet sidst i dokumentet.
Der kunne måske konstrueres en løsning ved makering af et ord - dialogboks vises - forklaring indtastes - gemmes i en database eller lignende. Kan sorteres og indsættes i Word format igen.
Nu er det ikke et måske - har faktisk udarbejdet det nødvendige:
Når et ord ønskes optaget på ordlisten - dobbeltklik på ordet - aktiver en makro med en genvejstast. Hvis ordet findes i listen i forvejen - markeres dette med fed - hvis ikke åbnes en dialogboks, hvor ordet vises og hvor der kan indtastes en ordforklaring. Når OK knappen aktiveres - opdateres ord+forklaring i en database, der indeholder 2 felter:-ORD, som primær nøgle og FORKLARING som et notatfelt. Ordet markeres med fed i dokumentet.
Når man er færdig - aktiveres en anden genvejstast - programmet leder efter det bogmærke, der indleder ordlisten i dokumentet. Findes dette - altså hvis ordlisten er genereret i forvejen - så slettes ordlisten.
Der positioneres til slutning af dokumentet - indsættes sideskift - oprettes bogmærke - databasen søges igennem - alle ord sorteres og udskrives sammen med den tilhørende forklaring.
(fylder ca. 150 linier i VBA) + en enkel Userform
Spørgsmål: skal forekomster af de optagne ord alle markeres med FED - uden manuel indsats?
======================== VBA-kode til formularen: ======================== Private Sub CommandButton1_Click() 'opret ordet opretOrdet ord, forklaring Unload UserForm1
CommandButton1.Visible = False
NewMacros.markerOrdet End Sub Private Sub CommandButton2_Click() 'annuller Unload UserForm1 End Sub Private Sub forklaring_Change() 'forklaring If Len(ordet) > 1 And Len(forklaring) > 1 Then CommandButton1.Visible = True End If End Sub Private Sub UserForm_activate() NewMacros.openDB
UserForm1.Caption = "OrdListe: Antal ord " + CStr(ordTab.RecordCount) ordet.Value = NewMacros.ord
If NewMacros.findesOrd(ordet) = True Then Exit Sub End If
forklaring.SetFocus End Sub Private Sub opretOrdet(ord, forklaring) With NewMacros.ordTab .AddNew .Fields(0) = ord .Fields(1) = forklaring .Update End With End Sub
=================== VBA-kode til modul: =================== Public db, ordTab, xdoksti Public ord, sortOrd_$(), antalOrd Sub main() ord = LCase(RTrim(LTrim(WordBasic.[getbookmark$]("\Sel"))))
If ord <> "" Then openDB If findesOrd(ord) = False Then Load UserForm1 UserForm1.Show Else markerOrdet End If lukDB End If End Sub Public Sub openDB() xdoksti = ActiveDocument.Path If Right(xdoksti, 1) <> "\" Then xdoksti = xdoksti + "\" End If
Set db = opendatabase(xdoksti + "ordliste.mdb") Set ordTab = db.openrecordset("ordliste") End Sub Public Sub lukDB() ordTab.Close db.Close End Sub Public Function findesOrd(ord) ordTab.Index = "primarykey" ordTab.Seek "=", ord
If Not ordTab.NoMatch Then findesOrd = True Exit Function End If findesOrd = False End Function Public Sub markerOrdet() Selection.Font.Bold = True WordBasic.charright 1 End Sub Sub bygOrdforklaring() Dim f openDB
For f = 1 To antalOrd With ordTab sortOrd_$(f - 1, 0) = .Fields(0) sortOrd_$(f - 1, 1) = .Fields(1) .MoveNext End With Next f
WordBasic.sortarray sortOrd_$, 0, 0, antalOrd - 1
If findesOrdListe = True Then findbogmærke "ordliste" WordBasic.endofdocument 1 Selection.Delete Else WordBasic.endofdocument Selection.InsertBreak Type:=wdPageBreak ActiveDocument.Bookmarks.Add Name:="ordliste" End If
For f = 0 To antalOrd - 1 Selection.Font.Bold = True WordBasic.Insert sortOrd_$(f, 0) + Chr(13) Selection.Font.Bold = False WordBasic.Insert sortOrd_$(f, 1) + Chr(13) + Chr(13) Next f
lukDB
End Sub Private Function findesOrdListe() Dim bm For Each bm In ActiveDocument.Bookmarks If bm.Name = "ordliste" Then findesOrdListe = True Exit Function End If Next bm findesOrdListe = False End Function Private Sub findbogmærke(bm) Selection.GoTo What:=wdGoToBookmark, Name:=bm Selection.Find.ClearFormatting With Selection.Find .Text = "" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With End Sub
Send en mail til pb@skivehs.dk - så sender jeg hele "pakken" så kan du se, hvordan det fungerer i modellen - det er nok det nemmeste - i forlængelse af den korte indlæg pr. 12-11-04.
MVH
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.