Avatar billede rvm Nybegynder
28. januar 2005 - 21:58 Der er 6 kommentarer og
1 løsning

Dynamisk oprettelse af menu i Word fra filstruktur

Hej

Jeg har en menustruktur der skal kunne se således ud:

Brev\
Brev\Breve.doc
Brev\Brev - udenlandsk.doc
Brev\Direktion\
Brev\Direktion\Brev.doc
Brev\Direktion\Lister\
Brev\Direktion\Lister\Liste1.doc
Brev\Direktion\Lister\Liste2.doc
Brev\Direktion\Vedtægter DK.doc
Brev\Direktion\Vedtægter UK.doc
Fax.doc
Notat.doc
Label.doc
Nyt.doc
DIF.doc

Strukturen er opbygget efter en filstruktur, så en mappe bliver til en menu (på menuen)og en fil bliver til et menupunkt. Jeg kan sagtens hardkode menuen, men en almindelig superbruger skal kunne tilføje mapper og filer, hvilket skal slå igennem i menuen.

Det svære for mig er menuer i menuer og recursiv kodning - det er ikke min stærke side :-)

Mvh

RVM
Avatar billede lorentsnv Nybegynder
28. januar 2005 - 22:40 #1
Jeg er lidt usikker på hvad opgaven går ud på. Ønsker du at læse alle filer og mapper i en given struktur, og vise resultatet i Word?
Eller ønsker du at opbyggen en menu med menupunkter. Hvad skal i så fald formålet med denne menu være? Er det at få en nem tilgang til dokumenterne i filstrukturen?
Avatar billede rvm Nybegynder
29. januar 2005 - 09:46 #2
Filerne og mapperne ligge med denne struktur i stifinderen (bare ikke sorteret således). Jeg har så to funktioner, der henter alle mapper ind i et array og alle filer ind i et andet array. Derefter ligger jeg jeg de to array sammen i et nyt array og sorterer dem (ud fra nogle numre som jeg har skåret væk på dette tidspunkt). Derved fremkommer ovenstående struktur, der er en blanding af mapper (som bliver til menuer) og dokumenter (der bliver til punkter på menuerne), der alså er poster i et array - der så skal blive til en menu i Word. Jeg gør dette programatisk, da jeg skal kunne pege på forskellige mapper og derved få forskellige menuer alt efter situation. Jeg kunne selvfølgelig hardkode dem, men så skal der kodes hver gang der kommer et nyt dokument i menuen eller en ny mappe.

Altså formålet er at få en nem adgang til filerne i filstrukturen, men også at få dokumenterne præsenteret i de rigtige menuer og i den rigtige rækkefølge (den er nemlig bestemt af arbejdsgangen).

Håber jeg med denne foklaring fik kastet lidt mere lys over problemstillingen :-)

RVM
Avatar billede lorentsnv Nybegynder
29. januar 2005 - 15:55 #3
Jeg har fundet frem noget information til dig som du måske kan bruge.

Jeg har ikke fått tid til å lave et script til deg, men hvis du optager makro i Word mens du tilføjer nogle menupunkter, vil du få en kode som ser nogelunde sådan ud:

'
    CommandBars("Menu Bar").Controls.Add Type:=msoControlPopup, Before:=10
    CommandBars("Custom Popup 55418607").Controls.Add Type:=msoControlPopup _
        , Before:=1
    CommandBars("Custom Popup 55460187").Controls.Add Type:=msoControlPopup _
        , Before:=1
    CommandBars("Custom Popup 55460187").Controls.Add Type:=msoControlPopup _
        , Before:=1
    CommandBars("Custom Popup 55460187").Controls.Add Type:=msoControlButton _
        , Before:=1

Jeg har ikke helt fundet ud af hvordan jeg programmerer navnet på menupunkterne, samt hvordan jeg programmerer koblingen til en makro der åbner dokumentet, men alle disse informationer vil du finde hos Microsoft på følgende link:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/modcore/html/deovrdevelopingofficesolutions.asp

Linket er til dokumentation af 'Working with Command Bars'. Dokumentationen er for XP, men koden jeg får fra Word 2000 ligner meget på det som kommer fra XP, så jeg er ikke sikker på om dette objekt har ændret sig så meget i de senere versioner.

Tag en kig på dette, og gi eventuelt en tilbagemelding på om du kommer videre med dette.
Avatar billede lorentsnv Nybegynder
29. januar 2005 - 16:00 #4
Jeg ser desværre at linken som jeg har sendt dig, ikke fungerer rigtig.
Prøv følgende link, og vælg en af de første punkter med 'Working with Command Bars'.

http://search.microsoft.com/search/results.aspx?qu=Working+with+Command+Bars&View=msdn&st=b&c=4&s=1&swc=4
Avatar billede rvm Nybegynder
30. januar 2005 - 10:06 #5
Jeg kender godt objektet, men kan ikke finde ud af det med det recursive. Jeg programmerer dagligt i VBA og har lavet mange menuer programmeringsmæssigt, men de er alle hardkodet:

Sub CreatePopupToolbarExample()
    Dim CustomToolBar As CommandBar
    Dim MainCustomBar As CommandBarPopup
    Dim SubMenuItem As CommandBarButton
    Dim SubMenuPopUp As CommandBarPopup
    Dim SubMenuPopUpItem As CommandBarButton
    Dim DropDownList As CommandBarControl

    Dim strToolBar As String
    Dim iCount As Integer

    ' Replace "My Toolbar" with a name
    ' you want to use for your toolbar.
    strToolBar = "My Toolbar"

    ' Create and display the Toolbar.
    Set CustomToolBar = CommandBars.Add(Name:=strToolBar, _
                                        Position:=msoBarFloating)
    CustomToolBar.Visible = True

    ' Create Main PopUp Menu on Toolbar.
    Set MainCustomBar = CustomToolBar.Controls.Add(Type:=msoControlPopup)
    MainCustomBar.Caption = "Main Menu"
    ' Create Dropdown list on toolbar
    Set DropDownList = CustomToolBar.Controls.Add(Type:=msoControlDropdown)


    ' Add a Menu Button and a Popup
    With MainCustomBar.Controls
        Set SubMenuItem = .Add(Type:=msoControlButton)
        Set SubMenuPopUp = .Add(Type:=msoControlPopup)
    End With

    ' Set properties for the sub button and popup menus.
    With SubMenuItem
        .Caption = "Sub Menu Item"
        .Style = msoButtonCaption
        .OnAction = "MenuEvents"    ' <- Macro to run when clicked.
    End With

    With SubMenuPopUp
        .Caption = "Sub Menu Popup"
        ' This optional can be used to invoke macro which toggles
        ' the state of child controls.
        .OnAction = "MenuEvents"
    End With

    ' Add item to Sub Menu
    With SubMenuPopUp.Controls
        Set SubMenuPopUpItem = .Add(Type:=msoControlButton)
    End With

    With SubMenuPopUpItem
        .Caption = "Sub Menu Popup Item"
        .OnAction = "MenuEvents"    ' <- Macro to run when clicked.
    End With

    ' Create a combo box which lists the options.

    With DropDownList
        .AddItem "Choice A"
        .AddItem "Choice B"
        .Caption = "Choices"
        .TooltipText = "Select choice from the list"
        .Width = 120
        ' default value to show
        .ListIndex = 1
        .OnAction = "MenuEvents"
    End With

End Sub

Jeg har også fundet noget kode der løber en eksisterende menu igennem:
Sub TestLCBC()
  Dim myCBC As CommandBarControl
  ' Menu bar taken as an example:
  For Each myCBC In CommandBars("Menu Bar").Controls
    MsgBox myCBC.Caption, , myCBC.Parent.Name
    Select Case myCBC.Type
      ' More CBControls contained in:
      ' (list hopefully complete?)
      Case msoControlPopup, _
        msoControlButtonPopup, _
        msoControlSplitButtonMRUPopup, _
        msoControlSplitButtonPopup
        Call LoopCommandBarControls(myCBC)
    End Select
  Next myCBC
End Sub

Sub LoopCommandBarControls(ParentCBC _
  As CommandBarControl)
  Dim ChildCBC As CommandBarControl
  For Each ChildCBC In ParentCBC.Controls
    MsgBox ChildCBC.Caption, , ChildCBC.Parent.Name
    Select Case ChildCBC.Type
      ' More CBControls contained in:
      ' (list hopefully complete?)
      Case msoControlPopup, _
        msoControlButtonPopup, _
        msoControlSplitButtonMRUPopup, _
        msoControlSplitButtonPopup
      Call LoopCommandBarControls(ChildCBC)
    End Select
  Next
End Sub

men jeg kan ikke selv inde ud af at oprette en menu recursiv...
Avatar billede rvm Nybegynder
01. februar 2005 - 09:15 #6
Er der slet ingen eksperter til stede...
Avatar billede rvm Nybegynder
07. februar 2005 - 10:23 #7
Lukker :-(
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
Kurser inden for grundlæggende programmering

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