09. juli 2008 - 15:27Der er
4 kommentarer og 1 løsning
Slette CommandBars i Word
Funktionen herunder sletter alle CommandBars med navnet "BTReport" for dernæst at oprette én CommandBar med samme navn. På denne måde sikrer jeg mig, at jeg kun har en CommandBar med dette navn og når funktionen bliver kørt, opdateres denne til at have de nyeste knapper.
Hvis jeg genstarter Word, viser det sig, at CommandBar ikke er blevet slettet. Det lader til, at kun oprettelse af CommandBars gemmes i Normal.dot og ikke sletningen, hvilket resulterer i, jeg nu har 30 identiske CommandBars :-(
Hvis jeg manuelt sletter CommandBars (Tools -> Customize -> Toolbars), har det samme effekt - de slettede CommandBars vises efter Word genstartes.
Word 2003 (11.8215.8202) SP3
Const BAR_NAME = "BTReport" Function installBTReport() Dim item As CommandBar For Each item In CommandBars If item.name = BAR_NAME Then item.Delete End If Next
Dim customBar As CommandBar
Set customBar = CommandBars.Add(BAR_NAME) With customBar.Controls.Add(msoControlButton) .Caption = "Create BT Report" .Style = Office.MsoButtonStyle.msoButtonCaption .OnAction = "createBTReport" End With customBar.Visible = True customBar.Position = msoBarTop End Function
I forbindelse med sletning og oprettelse af commandbars og controls i commandbars er det meget vigtigt, at du først fortæller Word via din kode, hvor ændringerne skal laves. Det gør du ved at sætte CustomizationContext. Eksempel:
Hvis ændringerne skal laves i Normal.dot, så indsæt denne line _før_ den kode, der ændrer noget:
CustomizationContext = NormalTemplate
Du kan læse mere om CustomizationContext i hjælpen i VBA.
...og lige en ting mere: Det er også klogt aktivt at sørge for, at dine ændringer bliver gemt. De problemer, du ser, kunne tyde på, at dette ikke sker. Du kan gemme via VBA. F.eks. vil:
Normaltemplate.Save
gemme Normal.dot
Hvis det f.eks. er en anden skabelon, "MyTemplate.dot", ville det være:
Templates("MyTemplate.dot").Save
Synes godt om
Slettet bruger
09. juli 2008 - 16:42#3
Jeg prøvede dette uden held:
Const BAR_NAME = "BTReport" Function installBTReport() CustomizationContext = NormalTemplate
Dim item As CommandBar For Each item In CommandBars If item.name = BAR_NAME Then item.Delete End If Next
Dim customBar As CommandBar
Set customBar = CommandBars.Add(BAR_NAME) With customBar.Controls.Add(msoControlButton) .Caption = "Create BT Report" .Style = Office.MsoButtonStyle.msoButtonCaption .OnAction = "createBTReport" End With customBar.Visible = True customBar.Position = msoBarTop
NormalTemplate.Save End Function
Ved at søge på CustomizationContext, har jeg fundet frem til, hvor jeg får slettet de toolbars: Tools -> Template and Add-Ins... -> Organizer -> Toolbars.
Jeg optog en macro, da jeg slettede dem, og er nået frem til denne fremgangsmåde: Do While True On Error GoTo errorHandler Application.OrganizerDelete NormalTemplate, BAR_NAME, wdOrganizerObjectCommandBars Loop errorHandler: On Error Resume Next
Tak for hjælpen. Jeg havde stadig tåget rundt på google, hvis jeg ikke havde haft noget at gå efter, så læg et svar.
Godt at du fandt en løsning. Min forklaring var ikke så detaljeret, som den kunne have været. Når man skal slette noget, vil det kun virke at sætte CustomizationContext til NormalTemplate hvis det, der skal slettes, hører til Normal.dot - hvis det er gemt i en anden skabelon, er det den, der skal sættes som CustomizationContext.
Når du først har fået ryddet op i sagerne og har fjernet alle de commandbars, der var havnet rundt omkring, skulle du kunne styre det.
Når du opretter commandbars mm., bliver de gemt i den aktuelle CustomizationContext, og hvis du ikke selv sørger for at sætte den, kan det være hvad som helst af tilgængelige dokumenter og skabeloner - det afhænger at, hvad du ellers har foretaget dig.
Synes godt om
Slettet bruger
30. juli 2008 - 15:38#5
Endnu engang tak for hjælpen.. Jeg glemte at lukke spørgsmålet.
Synes godt om
Ny brugerNybegynder
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.