19. april 2007 - 11:38Der er
21 kommentarer og 1 løsning
Menu i Word
Hejsa
Jeg har fundet følgende kode der opretter et nyt menupunkt i Word. Men hvordan definerer jeg mit punkt 2 til at være en controlpopup, dvs. et punkt når man holder musen over som kommer alle underpunkterne frem ???
Nogen som kan hjælpe.
Option Explicit Public cbMenu As CommandBar Public cbPopMenu As CommandBarPopup Public cbSubMenu As CommandBarPopup Public Const strMyMenuName As String = "Min menu"
Sub AutoExec() '************************ Fjern_MyMenu 'Sætter cbMenu = den nuværende menu Set cbMenu = CommandBars.ActiveMenuBar
'cbPopMenu bliver tilføjet til den nuværende menu Set cbPopMenu = cbMenu.Controls.Add(Type:=msoControlPoup, Temporary:=True) cbPopMenu.Caption = strMyMenuName
'************************ 'Sæt menupunkter på menu\'en 'MakroKald,PunktNavn,MakroKald,Face,Index,Streg før MyPopMenu "&Punkt 1", "Item01", 85, 1, False MySubMenu "&Punkt 2" MyPopMenu "&Et underpunkt", "Item02", 85, 1, False End Sub
Private Sub MyPopMenu(MyCaption, MyOnAction As String, MyFaceId, iIndex As Integer, bGroup As Boolean) Dim MyMenuItem As CommandBarButton Set MyMenuItem = cbPopMenu.Controls.Add(Type:=msoControlButton, ID:=iIndex) With MyMenuItem .Caption = MyCaption '.TooltipText = MyToolTip .Style = msoButtonIconAndCaption .OnAction = MyOnAction .FaceId = MyFaceId .BeginGroup = False End With End Sub Private Sub MySubMenu(MyCaption) Dim MyMenuItem As CommandBarPopup Set MyMenuItem = cbSubMenu.Controls.Add(Type:=msoControlPopup) With MyMenuItem .Caption = MyCaption
End With End Sub
Sub Fjern_MyMenu() Dim cbMenu As CommandBar On Error Resume Next
'Sletter menuen Set cbMenu = CommandBars.ActiveMenuBar cbMenu.Controls(strMyMenuName).Delete End Sub
Private Sub Item01() Documents.Add Template:="c:\skbelon.dot", _ NewTemplate:=False, DocumentType:=0 End Sub Private Sub Item02() Documents.Add Template:="c:\skbelon.dot", _ NewTemplate:=False, DocumentType:=0 End Sub
Du kan ikke løse det - det er en fejl i Word fra 97 versionen og til og med 2003. Den work arround de omtaler virker heller ikke.
Du kan stadig putte den i skabelon. Placer din menu i en .dot fil og placer den i brugernes words opstartsbibliotek (findes under Funktioner/Indstillinger)
Jeg kan sagtens lave et nyt menupunkt i Word via funktioner/tilpas. Jeg kan også gemme som en skabelon. Jeg kan gemme skabelonen i et bibliotek (startup) og pege på dette bibliotek via funktioner/indstillinger i Word.
Men menuen kommer ikke når jeg starter Word automatisk.
Jeg synes jeg har store problemer med at få dette til at virke.
Det er lykkedes mig at oprette en menu og tildele nogle makroer til mine menupunkter. Dette er placeret i en skabelon i word/startup-biblioteket.
Men når jeg efterfølgende skal redigerer i menuen og lignende kan jeg ikke komme til det. Enten forsvinder min menu (og den kan jeg slet ikke få tilbage - selvom jeg ikke har ændret i min dot-fil) ellers får jeg alle mulige fejlmeddelelser.
Er dette virkelig den måde det skal gøres på når man vil dele en menu med andre "maskiner" via en "global" skabelon.
I Excel fungerer det jo upåklageligt via næsten den selvsamme kode som jeg først postede.
Ja - i Excel virker det upåklageligt.. bortset fra at opretter du em menu i en exce-fil, så bliver menuen ikke lukket/slettet, når du lukker filen - den bliver nemlig overført til person.xls, når du åbner filen - så derfor skal man altid i Excel have en makro i filen, der sletter menuen efter sig, når filen lukkes.
Er du sikker på du gemmer menuen i skabelonen og ikke i Normal.dot? Word er nemlig sat op til at gemme i Normal.dot. Det kan godt være lidt uigennemskueligt, hvorfor jeg faktisk i de sidste mange projekter er begyndt at lave værktøjslinier i stedet for menuer - værktøjslinier er meget nemmere at styre.
Den version jeg har til Excel sletter også menuen når man lukker. Men derudover har jeg ikke forstand på dette. Den virker i hvert fald.
Med hensyn til Word, synes jeg bestemt jeg holdte øje med at gemme i min skabelon. Til gengæld har jeg fundet nedenstående. Det virker upåklageligt. Men mener du at det fejler på et tidspunkt ???
'Create Menu Dim existingMenuBar As CommandBar Dim newMenu As CommandBarPopup Dim subMenu As CommandBarPopup Dim subMenu2 As CommandBarButton Dim subMenu3 As CommandBarButton Set existingMenuBar = CommandBars.ActiveMenuBar
Set newMenu = existingMenuBar.Controls.Add(Type:=msoControlPopup) With newMenu .Caption = "Min menu" .Visible = True End With
'Sub Menu 01 Set subMenu = newMenu.Controls.Add(Type:=msoControlPopup) With subMenu .Caption = "Punkt 1" End With Call DoSubMenu(subMenu)
'Sub Menu 02 Set subMenu = newMenu.Controls.Add(Type:=msoControlPopup) With subMenu .Caption = "Punkt 2" End With Call DoSubMenu2(subMenu)
'Sub Menu 03 Set subMenu = newMenu.Controls.Add(Type:=msoControlPopup) With subMenu .Caption = "Punkt 3" End With Call DoSubMenu3(subMenu)
'Sub Menu 04 Set subMenu = newMenu.Controls.Add(Type:=msoControlPopup) With subMenu .Caption = "Punkt 4" End With Call DoSubMenu4(subMenu)
Set subMenu2 = newMenu.Controls.Add(Type:=msoControlButton) With subMenu2 .Caption = "Et punkt" .OnAction = "TopicUnhigh" End With
Set subMenu3 = newMenu.Controls.Add(Type:=msoControlButton) With subMenu3 .Caption = "Et andet punkt" .OnAction = "HighAll" End With
End Sub
Public Sub DoSubMenu(themainmenu As CommandBarPopup) Dim themenu As CommandBarButton
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 532 End With
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 532 End With
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 487 End With
End Sub
Public Sub DoSubMenu2(themainmenu As CommandBarPopup) Dim themenu As CommandBarButton
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 490 End With
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 491 End With
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 492 End With
End Sub
Public Sub DoSubMenu3(themainmenu As CommandBarPopup) Dim themenu As CommandBarButton
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 501 End With
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 501 End With
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 501 End With
End Sub Public Sub DoSubMenu4(themainmenu As CommandBarPopup) Dim themenu As CommandBarButton
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 5 End With
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 5 End With
Set themenu = themainmenu.Controls.Add(Type:=msoControlButton) With themenu .Caption = "Underpunkt" .Style = msoButtonIconAndCaption .faceid = 5 End With
Ja - men prøv den bare og hold så øje med filstørrelsen på din Normal.dot og på din skabelon. Hvis de begynder at vokse, så vil de fejle efter et stykke tid.
Men tilføjer åbner jeg en skabelon via et punkt i menuen får jeg en fejlmeddelelse vedr. Normal.dot når jeg vil lukke Word og jeg kan se at jeg ikke får fjernet menuen når Word lukker
Jeg har fået det til at virke ved at gøre som du siger.
Man skal bare ikke lave manøvren med at flytte sin menulinie væk når man står i funktioner-tilpas. Så kommer den nemlig ikke igen selvom dot-filen stadig ligger i startup bibliteket.
Kom med et svar så får du selvfølgelig point.
Et lille bonusspørgsmål. Jeg har nogle userforms i Excel som starter når man åbner bestemte filer. Der er kun få felter i userformen man skal udfylde. Man skal skrive et kundenr. så søger den efter det i (på nuværende tidspunkt) en Excelfil og returnere tilsvarende kundenavn. og så gemmer den filen man har åbnet på et forudbestemt sted.
Er det "nemt" at overføre til Word. Og vil du i så fald være behjælpelig me dette. jeg opretter selvfølgelig et nyt spørgsmål med point ?
Det er nemt - man skal bare have et Excel object ind i Word koden, så man fjernstyrer Excel - så kan du hente de samme data ind i Word selvom de ligger i Excel.
En lille anbefaling omkring menuer: Det er en god idé at slette en "egen-oprettet" menu, inden man danner den, dvs. at man starter med at rydde op, så man sikrer sig, at der ikke ligger noget "gammelt skrammel" og roder (husk On Error resume next lige inden "slet-menu").
Slet også menuen, når du lukker Word - dette kan gøres i AutoExit.
ps! Hvis du vælger at lave en værktøjslinje i stedet for et menupunkt, kan du trække dine funktioner til en værktøjslinje - så er kode ikke nødvendig.
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.