06. september 2007 - 16:24Der 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?
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
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.
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?
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.
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
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?
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.
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?
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.
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.
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.
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.
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.
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).
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.
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.
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).
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
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
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
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.
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 .)
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
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):
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.
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.