Avatar billede hubertus Seniormester
06. september 2007 - 16:24 Der er 36 kommentarer og
1 løsning

automatisk opstart af en skabelon, når word åbnes

Kan man lave lidt kode som udføre følgende
1. aflæser brugernavn
2. laver forskellige indstillinger i word (skrift, størrelse mm)
  afhængig af brugeren.
3. sikre at værdierne sættes tilbage til standard, når brugeren forladder word.

Der er flere brugere som arbejder på samme maskine, og som har behov for forskellige opsætninger.
Hvem kan hjælpe?
Avatar billede word-hajen Nybegynder
06. september 2007 - 18:45 #1
Ja, det kan man godt. Men punkt 2 skal ikke kodes. Det bør være forskellige skabeloner, hvis der er tale om ændring af skrifttyper, margener osv.
Avatar billede hubertus Seniormester
06. september 2007 - 20:57 #2
Hvis ikke punkt 2 skal kodes, hvordan kan man så gør skabelonen afhængig af brugeren. Jeg mener at have set noget VBA kode der kan klar opgaven, jeg kan blot ikke huske hvor.
Avatar billede word-hajen Nybegynder
07. september 2007 - 15:20 #3
Keep it simple :-)

Det er rigtigt, at man selvfølgelig kan lave en skabelon, der - når den bliver smidt i luften - tjekker, hvem brugeren er og reagerer derefter. Men hvis der alene er tale om skrifttyper og margener (og der ellers ikke er anden fælles kode el.lign.), kan man jo lave en skabelon for hver person.

Brev_AH.dot
Brev_JJ.dot

osv. Men det kommer an på, hvad præcist du vil have skal ændres i skabelonerne. Hvis opsætningen betyder, at du skal 400 skabeloner igennem, hvis der er en eller anden ændring, er det selvfølgelig en tåbelig idé. Men gider du ridse scenariet op? Og hvad præcist det er for nogle ændringer ift. person?
Avatar billede hubertus Seniormester
07. september 2007 - 17:19 #4
Der ligger 2 ting i det.
1. jeg vil gerne lære tekninkken
2. der vil være tale om ganske mange skabeloner, det med skrifttyperne  og margen var blot eksempler.
Avatar billede word-hajen Nybegynder
07. september 2007 - 18:24 #5
Opret en skabelon. Gem den i Words startupfolder (kan sættes til en fælles folder). Åbn kodevinduet, placer følgende kode i skabelonen. Du kan nu for hver bruger kode, hvad der rent faktisk skal ske.

Da koden bliver kørt hver gang, Word åbnes, er der umiddelbart ingen grund til at forsøge at rydde op.

*********************
Public Sub AutoExec()
    Dim strBruger As String
    Dim lngSeparator As Long
   
    strBruger = Environ(28)
    lngSeparator = InStr(1, strBruger, "=")
    strBruger = Mid(strBruger, lngSeparator + 1)
   
    Select Case strBruger
        Case "Anders"
           
        Case "Hans"
           
        Case "Pia"
           
        Case "Bente"
       
    End Select
End Sub
*****************
Avatar billede hubertus Seniormester
08. september 2007 - 08:56 #6
Hvor anbringer du din kode? Jeg har anbragt den i Normal thisdocument - er det korrekt?
Strbruger får indholdet:  : strBruger : "1.0.22.20030804", som er en streng. Jeg skal bruge navnet på den som logger på maskinen. Hvsd går galt?
Avatar billede word-hajen Nybegynder
08. september 2007 - 09:19 #7
Du skal ikke anbringe din kode i Normal.dot. Du skal oprette en ny skabelon, hvor du anbringer koden - og så kan den får så vidt godt ligge i ThisDocument (følg min kommentar 07/09-07 18:24:18).

Hvis strBruger får det indhold, kunne det tyde på, at I sætter jeres miljø anderledes op.

Prøv at køre følgende kode:

Public Sub Miljø()
    Dim i As Integer
   
    For i = 1 To 50
        Debug.Print i & " - " & Environ(i)
    Next i
End Sub

som giver en liste i immediate-vinduet. Prøv at se, om der ikke er en af dem, der indeholder brugernavnet.
Avatar billede hubertus Seniormester
08. september 2007 - 09:40 #8
Jeg får følgende: 36 - USERNAME=hubertus i immediate vinduet, så brugernavnet er kendt. Det er blot ikke det som lægges i variablen strbruger
Avatar billede word-hajen Nybegynder
08. september 2007 - 13:55 #9
Så bruger du blot nummeret 36 i stedet for 28 i Environ(28). Det er nemlig 28 i min opsætning :-)
Avatar billede hubertus Seniormester
09. september 2007 - 08:34 #10
ja selvfølgelig - jeg fokuserede blot på variablen ikke på environ) - Godt at lære noget nyt.  :O)
Har du noget kode til at ændre opsætningen i Word? Jeg tænker her på skrifttype, størrelse, margen, og valg af printer?
Avatar billede word-hajen Nybegynder
09. september 2007 - 11:44 #11
Hvad vil du ændre? Typografierne? Er det standardtypografier (f.eks. Normal, Overskrift 1) eller egendefinerede typografier?

Hvorfor vil du ændre printer? Er brugerens profil ikke sat op, så vedkommende har en standardprinter? Eller gælder printerne for alle brugere på én gang? Hvis det er nødvendigt at sætte op, synes jeg, at du skal indspille en makro (jeg ved jo alligevel ikke, hvad jeres printere hedder) og så rette den til.
Avatar billede hubertus Seniormester
09. september 2007 - 19:56 #12
I første omgang vil jeg ændre font og skriftstørrelse, som skal sættes som standard for den pågældende bruger. ang. priterne, så har jeg behov for at fordele brugerne på vores printer, således at ikke alle bruger den samme. I dette tilfælde er det skoleelever i de små klasser som skal have en stor skriftstørrelse og en letlæselig font.
Avatar billede word-hajen Nybegynder
09. september 2007 - 20:23 #13
Godt så. Så skal du noget helt andet. Hver bruger har nemlig sin egen Normal.dot (hvis I altså ikke har ændret standardopsætningen) - det er således den, der bør rettes og ikke noget kode, som skal køre og holde styr på skrifttyper og størrelser mv.

Mht. printerne kan du vel styre hvilke(n) printer, der er installeret for hver bruger? Det må helt klart være måden at gøre det på og ikke at få Word til at forsøge at håndtere det.
Avatar billede hubertus Seniormester
09. september 2007 - 21:02 #14
hvad angår printerne, så har de flere printere til rådighed, derfor vil jeg gerne lære teknikken med at kunne vælge printer fra word. Vi anvender desvære office 97 lidt endnu, så hver bruger har ikke sin egen normal.dot. Det er derfor jeg gerne vil kunne styre opsætningen, afhængig af hvilken bruger der logger på. For mig handler det ligeså meget om at lære teknikken.
Avatar billede word-hajen Nybegynder
09. september 2007 - 21:26 #15
Det er sådan set lige meget, om det er Office 97 eller Office 2007; hver bruger har sin egen Normal.dot, medmindre I har lavet en opsætning, der peger på et fælles drev for brugerne. Hvis ikke I har ændret standardopsætningen, har hver bruger deres egen Normal.dot, og det er den, der skal rettes.

Mht. printervalg - så indspil en makro. Så kan du præcist se, hvad der skal til.
Avatar billede hubertus Seniormester
10. september 2007 - 06:28 #16
Vores opsætning er ganske rigtigt som du beskriver en, der peger på et fællesdrev for brugerne, da de små ikke har et personligt login.
Avatar billede word-hajen Nybegynder
10. september 2007 - 12:02 #17
Dette er en af mine kæpheste, som jeg kan tale passioneret og længe om, for man smadrer rent faktisk meningen med Normal.dot og Words opsætning på denne måde. Men jeg lader nu det ligge.

***kode til at ændre Normaltypografi, papirstørrelse og margen i aktivt dokument***
***samt vælge printer****************************

    With ActiveDocument
        With .Styles(wdStyleNormal)
            .Font.Name = "Comic Sans MS"
            .Font.Size = 14
        End With
        With .PageSetup
            .PaperSize = wdPaperA4
            .LeftMargin = CentimetersToPoints(2)
            .RightMargin = CentimetersToPoints(2)
            .TopMargin = CentimetersToPoints(3.5)
            .BottomMargin = CentimetersToPoints(1.5)
        End With
    End With
    ActivePrinter = "Navn på printer"

*************************************************

Vær opmærksom på, at da der ikke bliver ændret i skabelonen, gælder dette alene for det aktuelle dokument. Da du er kommet med nye oplysninger, kan jeg nu se, at du bør gå væk fra løsningen med den globale skabelon og i stedet placere koden i Document_New-eventet i Normal.dot (ellers kører koden kun når Word bliver åbnet). Da der formentlig er tale om ændringer til alle nye dokumenter og ikke kun, når Word bliver åbnet, skal koden altså afvikles HVER gang, der bliver lavet et nyt dokument (baseret på Normal.dot - det kommer ikke til at gælde for evt. andre skabeloner).
Avatar billede hubertus Seniormester
12. september 2007 - 20:48 #18
Du skriver: placer koden i Document_New-eventet i Normal.dot. Jeg har kun to muligheder i normal.dot  (new macros og thisdocuments). Kan du uddybe lidt? (er novise i vba og word.
Avatar billede word-hajen Nybegynder
12. september 2007 - 21:04 #19
Dobbeltklik på ThisDocument. Vælg Document i den første rulleliste (der står sikkert (General) i den) og derefter New i den anden rulleliste, hvis den ikke selv har skiftet over. Du får nu Document_New i kodevinduet. Her placerer du koden.
Avatar billede hubertus Seniormester
12. september 2007 - 21:32 #20
Jeg har prøvet at lægge den i document_new, men kodne afvikles ikke. når jeg starter word op. Hvad gør jeg forkert?
Avatar billede word-hajen Nybegynder
12. september 2007 - 21:52 #21
Du er faktisk nødt til at have den 2 steder.

1. I Document_New for at du får den til at køre, når du laver et nyt dokument baseret på Normal.dot EFTER at Word er starter.
2. I en makro, der bliver auto-eksekveret, når Word starter. For selv om det er et nyt dokument, baseret på Normal.dot, bliver Document_New ikke afviklet.

Tilføj derfor følgende kode (du kan blot indsætte den efter Document_New eventet).

Public Sub Autoexec()
    Call Document_New
End Sub
Avatar billede hubertus Seniormester
12. september 2007 - 21:58 #22
indsætter jeg ovennævnte kode får jeg: Kommandoen er ikke tilgængelig, da der ikke er åbnet noget dokument.
Avatar billede word-hajen Nybegynder
12. september 2007 - 22:09 #23
Hvad har du gjort efter at du har indsat koden? Gemt Normal.dot, lukket Word ned og åbnet igen?

Jeg har testet koden og den fungerer fint hos mig, både når Word skal åbnes og når jeg laver et nyt dokument baseret på Normal.dot.
Avatar billede hubertus Seniormester
13. september 2007 - 17:54 #24
Hvis jeg stepper gennem koden med F8, så får jeg det ønskede resultat, men når Word selv skal udføre det, så sker der intet.

Min kode ser således ud:
Private Sub Document_New()
With ActiveDocument
        With .Styles(wdStyleNormal)
            .Font.Name = "Comic Sans MS"
            .Font.Size = 20
        End With
        With .PageSetup
            .PaperSize = wdPaperA4
            .LeftMargin = CentimetersToPoints(2)
            .RightMargin = CentimetersToPoints(2)
            .TopMargin = CentimetersToPoints(3.5)
            .BottomMargin = CentimetersToPoints(1.5)
        End With
    End With

End Sub
Public Sub AutoExec()
    Dim strBruger As String
    Dim lngSeparator As Long
   
    strBruger = Environ(36)
    lngSeparator = InStr(1, strBruger, "=")
    strBruger = Mid(strBruger, lngSeparator + 1)
   
    Select Case strBruger
        Case "admin"
            Call Document_New
        Case "Hans"
           
        Case "Pia"
           
        Case "Bente"
       
    End Select
End Sub

og den ligger i thisdocument i normal.dot.
Avatar billede word-hajen Nybegynder
13. september 2007 - 18:12 #25
Læs lige min kommentar 12/09-2007 21:52:31 igen.

AutoExec skal kun indeholde Call Document_New. Resten af koden skal være i Document_New. Og så skal du lave en procedure med opsætningen for hver enkelt bruger, som du så kalder i Select Case.

***************************
Private Sub Document_New()
    Dim strBruger As String
    Dim lngSeparator As Long
   
    strBruger = Environ(36)
    lngSeparator = InStr(1, strBruger, "=")
    strBruger = Mid(strBruger, lngSeparator + 1)
   
    Select Case strBruger
        Case "admin"
            Call admin_opsætning
        Case "Hans"
           
        Case "Pia"
           
        Case "Bente"
       
    End Select
End Sub

Public Sub AutoExec()
    Call Document_New
End Sub

Public Sub admin_opsætning
    With ActiveDocument
        With .Styles(wdStyleNormal)
            .Font.Name = "Comic Sans MS"
            .Font.Size = 20
        End With
        With .PageSetup
            .PaperSize = wdPaperA4
            .LeftMargin = CentimetersToPoints(2)
            .RightMargin = CentimetersToPoints(2)
            .TopMargin = CentimetersToPoints(3.5)
            .BottomMargin = CentimetersToPoints(1.5)
        End With
    End With
End sub
Avatar billede hubertus Seniormester
13. september 2007 - 18:27 #26
Jeg har prøvet at lægge din kode ind i normal.dot, men den virker stadig ikke. Hvis jeg opretter et nyt dokument, efter at word er åbnet, så får jeg de ønskede ændringer.
Avatar billede word-hajen Nybegynder
13. september 2007 - 18:54 #27
Som sagt så virker det 100% hos mig.

Prøv at skrive Stop i linjen lige efter Public Sub AutoExec. Gem Normal.dot fra kodevinduet. Luk Word. Åbn Word (nu åbner du Word helt normalt, ikk'?)

Har du/I nogle globale skabeloner indlæst?
Avatar billede word-hajen Nybegynder
13. september 2007 - 18:56 #28
Ellers prøv lige at maile din Normal.dot til mig (skal gøres, mens Word er lukket). Send til lemontree snabelting jubii dot dk (udskift snabelting med det lille berømte tegn og dot med .)
Avatar billede hubertus Seniormester
13. september 2007 - 19:00 #29
Den stopper fint, stepper jeg resten af koden igennem, så får jeg en fejl i linien: With activedocument i public sub admin_opsætning. I en box står der: Kommandoen er ikke tilgængelig, da der ikke er åbnet noget dokument
Avatar billede word-hajen Nybegynder
13. september 2007 - 19:10 #30
Hvilket som udgangspunkt er noget pladder (ikke at du siger, men at Word reagerer sådan), for Word danner et tomt dokument, når den bliver fyret i luften (jeg tror, at der er en add-in el.lign. i jeres Word, men never mind).

Har du ikke normalt et tomt word-dokument til rådighed, når du starter Word? Hvis du ikke har, er det ret nemt, for så burde du bare kunne fjerne hele proceduren med AutoExec (den er nemlig ikke nødvendig, hvis ikke du har et tomt dokument til rådighed, når du starter Word).

Ellers smider du følgende kode ind i Document_New (som det første i proceduren):

If Documents.Count = 0 then Documents.Add
Avatar billede hubertus Seniormester
13. september 2007 - 19:38 #31
Jeg har hidtil haft et dokument når jeg starter word, så det er ikke der problemet ligger.
Lægger jeg din linie ind, så virker det, men koden gennemløbes 2 gange. Vi har kun finereader og acrobat converter indlæst som add-in.
Avatar billede hubertus Seniormester
13. september 2007 - 19:40 #32
Fjerner jeg koden, så starter word normalt om med et dokument åben.
Avatar billede word-hajen Nybegynder
13. september 2007 - 20:08 #33
Men du har da ikke 2 dokumenter åbne, når koden er færdig, vel?
Avatar billede hubertus Seniormester
13. september 2007 - 20:34 #34
Nej, der er kun et dokument åben, men da jeg har sat en msgbox ind, for at se om den kommer igennem koden, så fremkommer den 2 gange.
Avatar billede word-hajen Nybegynder
13. september 2007 - 20:39 #35
Det skal den så også. For hvis der ikke er et tomt dokument, så tilføjer du/jeg et via kode, hvilket så fyrer Document_New i luften igen.

Er vi så enige om, at du nu får det ud af det, som du ønsker?
Avatar billede hubertus Seniormester
13. september 2007 - 21:27 #36
ja, opgaven er løst. Jeg søgte bare en forklaring. Tilbage er bare at sige tusinde tak for hjælpen - :O)
Lægger du et svar?
Avatar billede word-hajen Nybegynder
13. september 2007 - 21:39 #37
Velbekomme :-)
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