Avatar billede lsskaarup Nybegynder
17. oktober 2006 - 12:13 Der er 11 kommentarer og
1 løsning

Skifte mellem optionbutton der udfylder sidefod i dokument

Jeg har følgende stump kode, der udfylder nogle bogmærker i sidefoden af et dokument.

Private Sub dansk_Click()
    Me.att = "Att.:"
    Me.hilsen = "Med venlig hilsen"
    Me.side = "Side"
    Me.sideaf = "af"
    Me.sprog = "dansk"
    Me.direkte = "Direkte:"
    Me.mobil = "Mobil:"
    ActiveDocument.Bookmarks("side").Select
    Selection.TypeText Text:="Side"
   
   
    ActiveDocument.Bookmarks("sideaf").Select
    Selection.TypeText Text:="af"
   
    ActiveDocument.ActiveWindow.View.Type = wdPrintView
   
End Sub

Private Sub engelsk_Click()
    Me.att = "Att.:"
    Me.hilsen = "Best regards"
    Me.side = "Page"
    Me.sideaf = "of"
    Me.sprog = "engelsk"
    Me.direkte = "Direct:"
    Me.mobil = "Mobilephone:"
    ActiveDocument.Bookmarks("side").Select
    Selection.TypeText Text:="Page"
   
   
    ActiveDocument.Bookmarks("sideaf").Select
    Selection.TypeText Text:="of"

   
    ActiveDocument.ActiveWindow.View.Type = wdPrintView
End Sub

Private Sub tysk_Click()
    Me.att = "Z.Hd.:"
    Me.hilsen = "Mit freundlichen Grüssen"
    Me.side = "Seite"
    Me.sideaf = "von"
    Me.sprog = "tysk"
    Me.direkte = "Direkt:"
    Me.mobil = "Mobilephone:"
    ActiveDocument.Bookmarks("side").Select
    Selection.TypeText Text:="Seite"
   
   
    ActiveDocument.Bookmarks("sideaf").Select
    Selection.TypeText Text:="von"
   
    ActiveDocument.ActiveWindow.View.Type = wdPrintView
End Sub

Problemet er så, hvis brugeren kommer til at vælge det forkerte sprog, så fejler koden hvis de vælger et andet, nok fordi bogmærkerne er blevet overskrevet.

Hvordan kan jeg lige løse det nemmest, også gerne så der er mulighed for at et sprog er valg som standard fra starten af.
Avatar billede rvm Nybegynder
17. oktober 2006 - 15:09 #1
Jeg fandt engang denne makro på nettet og bruger den ofte, når jeg skal indsætte noget i et bogmærke - den sletter nemlig ikke bogmærket:

Public Sub SkrivTilBogmaerke(bmkName As String, bmkNyText As String)
    If ActiveDocument.Bookmarks.Exists(bmkName) = True Then
        ActiveDocument.Bookmarks(bmkName).Select
        If Not ActiveDocument.Bookmarks(bmkName).Range.Text = "" Then
            Selection.Range.Delete
        End If
       
        If Not bmkNyText = "" Then 'Indsætter tekst (og sletter bokmærke)
            '**** Sletter evt. overflødige linieskift.
            While Asc(Right(bmkNyText, 1)) = 13 Or Asc(Right(bmkNyText, 1)) = 10
                bmkNyText = Left(bmkNyText, Len(bmkNyText) - 1)
            Wend
            Selection.TypeText "." 'Bruges til at bevare bogmærket
            Selection.MoveLeft wdCharacter, 1, wdExtend
            Selection.Bookmarks.Add bmkName
            Selection.MoveLeft wdCharacter, 1
            Selection.TypeText bmkNyText
            Selection.Range.Delete
        Else
            Selection.Bookmarks.Add bmkName
        End If
    End If
End Sub
Avatar billede lsskaarup Nybegynder
18. oktober 2006 - 09:49 #2
If Not bmkNyText = "" Then 'Indsætter tekst (og sletter bokmærke)

Citat: Sletter ikke bogmærket... ?-|

Nå men jeg vil da lige prøve den, bmkName er navnet på bogmærket og bmkNyText er selve teksten der skal indsættes, ikke?
Avatar billede rvm Nybegynder
18. oktober 2006 - 12:02 #3
Det er nemlig rigtigt :-)

Rent teknisk bliver bogærket slettet, men det bliver sat på igen som noget af det sidste i funktionen
Avatar billede lsskaarup Nybegynder
20. oktober 2006 - 10:52 #4
Hvordan fa.... skal jeg kalde den funktion?

Jeg kan åbenbart ikke bare skrive SkrivTilBogmaerke(side, Side)
Avatar billede lsskaarup Nybegynder
20. oktober 2006 - 11:58 #5
Ahhh, det hjalp da jeg f.eks. skrev SkrivTilBogmaerke "side", "Side "
Avatar billede rvm Nybegynder
20. oktober 2006 - 12:17 #6
nej - du kan enten skrive

SkrivTilBogmaerke side, Side

eller

Call SkrivTilBogmaerke(side, Side)

og så skal side være en stregvariabel, der indeholder en streng - ellers skal det se således ud:

Call SkrivTilBogmaerke("side", "Side")
Avatar billede rvm Nybegynder
20. oktober 2006 - 12:17 #7
Fik ikke lige opdateret :-)
Avatar billede lsskaarup Nybegynder
20. oktober 2006 - 13:11 #8
Helt i orden, måske kan du hjælpe mig med 2 detajler.

Jeg har lavet, så dokumentet ikke vises men kun userformen indtil dokumentet bliver oprettet, men word starter jo stadigvæk op, for så at forsvinde, kan man gør noget så word ikke synligt starter op?

og fordi jeg roder rundt med sidefødderne, så går den også i sidefodsvisning, det vil jeg ikke have, kan jeg undgå det på en eller anden måde, eventuelt ved at lukke denne visning?
Avatar billede rvm Nybegynder
20. oktober 2006 - 20:51 #9
Jeg tror ikke du kan undgå at Word vises, når du vil vise en userform også.

Du kan ikke undgå at den går i sidefodsvisning, når du programmerer til sidefoden. Du skal i det tilfælde programmere at du lukker sidefoden igen (hver gang).

Application.Screenupdating = false virker ikke i dette tilfælde, da Word bruger skærmopdateringen til at opdatere sidefoden :-( Jeg kender dog en anden metode, der gør Word lidt roligere:

Skriv følgende i toppen af et modul:
Declare Function LockWindowUpdate Lib "user32" _
      (ByVal hwndLock As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
      (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long

Når du skal vil slå skærmopdaterinen fra, så skriver du følgende:
    hwnd = FindWindow("OpusApp", 0&)
    LockWindowUpdate (hwnd)

Når du vil slå skærmopdateringen til igen, skriver du følgende:
    LockWindowUpdate (0&)
Ovenstående skal altid også placeres i fejlhåndteringesrutinen - ellers ser du ikke fejlene og Word er låst
Avatar billede lsskaarup Nybegynder
21. oktober 2006 - 12:53 #10
Hvornår skal jeg så henholdsvis tænde og slukke skærmopdateringen?

Sluk inden jeg programmere til sidefoden og tænd når jeg skal ud a fdet igen, eller omvendt?
Avatar billede rvm Nybegynder
22. oktober 2006 - 17:39 #11
Sluk, når du laver noget som brugeren ikke må se - tænd igen bagefter.

D.v.s. Sluk inden du åbner sidefoden med din kode og tænd igen når du er færdig.
Avatar billede lsskaarup Nybegynder
23. oktober 2006 - 19:31 #12
Det vil jeg lige kigge på, men måske kan det løses på en anden måde.

Det eneste der egentlig generer mig, at værktøjslinien til sidefoden, hvis jeg kan lukke den, så er problemet der jo ikke.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Tag et kursus i Word og øg effektiviteten

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester