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