Avatar billede meiland Mester
11. maj 2009 - 12:37 Der er 8 kommentarer og
1 løsning

Et par makroer, der driller

Hej Alle !

Jeg har behov for lidt hjælp til 2 makroer.

Makro 1:
I menu.doc ligger et modul "SkabelonMacro", med en række makroer som jeg skal have kopieret over i normal.dot. Intet problem, med mindre modulet allerede er i normal.dot

Jeg har behov for hjælp til:
If modul "SkabelonMacro" eksisterer then..

Kopier og slet har jeg kode til.

Makro 2:
I menu.doc har jeg en menu (ikke værktøjslinie) som jeg skal have flyttet over i normal.dot
Hvordan kopieres man en menu, hvis man kan ?
og hvordan sletter man, hvis der er en i forvejen ?

Hvis jeg laver menuen som en værktøjslinie "Skabeloner" kan jeg godt via en macro kopiere den over i normal.dot og flytte den op i menubjælken, men mindre værktøjslinien allerede eksisterer i normal.dot

Jeg har behov for hjælp til:
If værktøjslinie "Skabeloner" eksisterer then..
Avatar billede Lene Fredborg Ekspert
11. maj 2009 - 17:41 #1
Hvis det, du er ved at lave, skal bruges af andre også (hvilket jeg gætter på er tilfældet), er det en langt bedre løsning af lade brugernes Normal.dot være i fred og i stedet lave det hele i en selvstændig skabelon, der placeres i brugernes Word Start-mappe. Se denne (engelske) artikel for mere info:
http://www.word.mvps.org/FAQs/MacrosVBA/DistributeMacros.htm

Du får dog alligevel svar på dine spørgsmål:

Vedr. Makro 1:

Prøv f.eks. følgende makro - hvis modulet allerede findes, vil fejlhåndteringen klare det:

Sub CopyMacroModule()

    On Error Resume Next
   
    'Forhindr visning af advarsel hvis modul findes
    Application.DisplayAlerts = wdAlertsNone
   
    Application.OrganizerCopy _
        Source:="IndsætFullNamePåDokumentMedModuletHer", _
        Destination:=NormalTemplate.FullName, _
        name:="SkabelonMacro", _
        Object:=wdOrganizerObjectProjectItems
   
    'Vis advarsler igen
    Application.DisplayAlerts = wdAlertsAll
   
End Sub

Hvis makroen indsættes i det dokument, som indeholder det modul, der skal kopieres, kan du i stedet for at indsætte navnet i "IndsætFullNamePåDokumentMedModuletHer" skrive:

Source:=ThisDocument.FullName


Vedr. Makro 2 (nederste linje i din post):

I VBA er en værktøjslinje (toolbar) en CommandBar. Prøv følgende:

Sub CheckWhetherToolbarFound()
    Dim oBar As CommandBar
    Dim bFound As Boolean
   
    bFound = False
   
    For Each oBar In CommandBars
        If oBar.name = "Skabeloner" Then
            bFound = True
            Exit For
        End If
    Next oBar
   
    If bFound = True Then
        '"Skabeloner" findes
        'Din kode her
    Else
        'Din kode her
    End If
           
End Sub


Vedr. dine to spørgsmål:
Hvordan kopierer man en menu, hvis man kan?
og hvordan sletter man, hvis der er en i forvejen?

Ja, det kan man godt, men det vil jeg undlade at forklare her, for hvis du stedet laver en skabelon med det hele i (værktøjslinje, makroer), er du ude over alle de problemer - og du har en langt bedre løsning. Det er generelt mere stabilt at lave en værktøjslinje end at føje en menu til Menulinjen (en sådan menu kan komme i konflikt med andre, hvis brugeren har installeret flere tilføjelsesprogrammer samtidig).

En vigtig tilføjelse: Hvis du via VBA opretter værktøjslinjer, føjer menuer til/sletter menuer fra Menulinjen el.lign., er det vigtigt, at du i VBA definerer, hvor ændringen skal gemmes. Det gøres ved først at sætte CustomizationContext. Hvis en ændring skal gemmes i Normal.dot:
CustomizationContext = Normaltemplate
Avatar billede meiland Mester
11. maj 2009 - 23:44 #2
Hej Lene !

Tak for dine svar.

Jeg kan godt se at løsningen med en menu.dot i startup-folderen er en rigtig god løsning.

En enkelt af mine brugere har installeret adobe acrobat, og har derfor nogle "ekstra" menuer. Havde det ikke været tilfældet, havde jeg bare distribueret en ny normal.dot hver gang.

Jeg vil nok bruge startup-løsningen, selvom jeg får lidt mere arbejde med distributionen. IT har lukket commandprompten samt adgangen til C-drevet.
Pt. har jeg brugt Inno Setup til at lave en installation. Måske kan den aflæse brugernavn, så kopier-til strengen kan genereres.
Avatar billede Lene Fredborg Ekspert
12. maj 2009 - 00:51 #3
De menuer, som Adobe Acrobat føjer til Menulinjen, oprettes automatisk af PDFMaker.dot, når man starter Word. De er ikke afhængige af den aktuelle Normal.dot - man de fungerer tit meget dårligt sammen med menuer fra andre add-ins. Jeg har set mange tilfælde, hvor den ene eller den anden menu forsvinder eller bliver forkert.

Men det er næsten heldigt, at det har afholdt dig fra at overskrive Normal.dot. Man bør aldrig, aldrig, aldrig overskrive brugernes Normal.dot. Den er beregnet til bl.a. at gøre livet lettere for den enkelte bruger og bør være fredet til brugeren selv. Brugeren kan gemme egne tastaturgenveje, indstillinger, autotekster osv. Alt hvad en bruger har lavet af den slags kasserer du uden videre, hvis du overskriver Normal.dot med en anden version. Det kan gå an at føje en makro eller to til Normal.dot - men ikke at slette den ;-) (jeg ved, at mange gør det, men det gør det ikke bedre).

Kan du ikke få IT til at lave om, så du kan få lov til at distribuere en .dot til Start-mappen? Det er det, Start-mappen er beregnet til - og IT må vel også være interesserede i, at tingene laves på en hensigtsmæssig måde. Alternativt kan du måske få IT til at lave et script, som automatisk kopierer .dot-filen til brugernes Start-mappe ved login. I artiklen "Distributing macros to other users" (link i min først post) er der anvisning på, hvordan et sådant script kan laves (det er ikke noget, jeg kan hjælpe med). Det er den allerenkleste løsning og burde være en smal sag for IT.

Stien til Start-mappen kan ændres om nødvendigt. Man kan evt. benytte en fælles Start-mappe på et fælles drev på en server, men det kan være upraktisk af diverse grunde. F.eks. betyder det, at alle brugere automatisk har de samme add-ins, men det er jo ikke sikkert, at det er hensigtsmæssigt. Det betyder også, at brugerne mister adgangen til deres add-ins, hvis de af en eller anden grund ikke har adgang til serveren.

Jeg har selv lavet installationsfiler i Inno Setup. Det er ikke helt enkelt i forhold til Start-mappen, fordi man ikke kan være sikker på, hvad stien er, med mindre man tjekker den - og stien findes f.eks. ikke i Registry, med mindre den er blevet ændret til noget andet end default. Stien kan let findes via VBA (Application.StartupPath).
Avatar billede meiland Mester
12. maj 2009 - 13:12 #4
Hej Lene !

Tak for dit indlæg... igen.

Nu tror jeg ikke der er mange af mine kolleger, der laver tilføjelser, makroer og lign. til brug i normal.dot, men alligevel har du ret.
Jeg tror at jeg vælger at kopier en enkelte brugers normal.dot fra mappen med de "gamle" skabeloner og over til mappen med de nye skabeloner, og så rette stien for brugerskabeloner til den nye mappe.

Login script var en mulig løsning med hensyn til kopiering af menu-skabelonen til Startup-mappen.

Grunden den stramme styring fra IT (Novell) er der check på brugernavne og derved også til stien C:\Documents and Settings\"brugernavn"\Application Data\Microsoft\Word\STARTUP

Nu er jeg hverken god til registreringsdatabase og Inno, men
jeg har en variabel HKEY_CURRENT_USER\volatile enviroment\APPDATA der er lig C:\Documents and Settings\"Brugernavn"\Application Data
Hvis appdata kan trækkes ud i en variabel i Inno Setup og hvis man så kan tilføje \Microsoft\Word\STARTUP er stien klar til kopiering af menu.dot
Avatar billede Lene Fredborg Ekspert
12. maj 2009 - 13:52 #5
Jeg ved ikke helt, om jeg forstår beskrivelsen i dit første afsnit. Vil du lade brugerne bruge en fælles Normal.dot? Gør ikke det! Normal.dot kan ikke deles mellem brugere.

Se: http://support.microsoft.com/Default.aspx?kbid=811468

Mht. til de ting, der gemmes i Normal.dot, drejer det ikke kun om makroer og mere avancerede ting - det drejer sig også om helt almindelige ændringer af indstillinger.
Avatar billede meiland Mester
12. maj 2009 - 13:57 #6
Nej, jeg skriver jo at du har ret.
Avatar billede Lene Fredborg Ekspert
12. maj 2009 - 14:32 #7
OK :-)

Det skyldes så, at jeg misforstod dit afsnit:

"Jeg tror at jeg vælger at kopier en enkelte brugers normal.dot ..."

Der står "en enkelte", og jeg troede, du mente "en enkelt" - men der skulle måske have stået "den enkelte"...
Avatar billede meiland Mester
12. maj 2009 - 15:18 #8
Ja, det danske sprog kan være en svær en en gang imellem, især når jeg glemmer at gennemlæse det, inden jeg klikker på opret :-)

Det afsnit var nok lidt kringlet skrevet og måske lidt for indforstået.

Det er sådan at IT har oprettet en mappe "Skabeloner" på hver brugers personlige drev P:  altså P:\Skabeloner, hvor normal.dot også ligger. Sti til brugerskabeloner i word er sat til P:\Skabeloner

Det installationsprogram jeg har fået lavet indtil nu, opretter en ny mappe på brugerens p-drev: P:\AF-skabelon, hvor de nye skabeloner kopieres ind på.

Derefter kopieres normal.dot fra P:\Skabeloner til P:\AF-skabeloner. Jeg ved at mappen P:\Skabeloner på et tidspunkt slettes, så jeg vil redde brugerens normal.dot.

Ved hjælp af winword.exe /t retsti.doc /mretsti ændres stien til brugerskabeloner til P:\AF-skabelon

Det sidste problem som vil være dejligt at få løst er at få Inno Setup til at læse APPDATA og tilføje "\microsoft\word\startup" og bruge den string som destdir, når menu.dot skal installeres (i startup folderen).

Hvis du smider et svar, sender jeg point den anden vej.
Avatar billede Lene Fredborg Ekspert
12. maj 2009 - 15:36 #9
OK. Nu forstår jeg.

Jeg vil ikke forsøge at kloge mig på detaljerne med Inno Setup - det er et stykke tid siden, jeg har brugt programmet.

Held og lykke med projektet.
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