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.
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.
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.