Avatar billede hco Nybegynder
16. februar 2001 - 14:07 Der er 17 kommentarer og
1 løsning

VBA: Parameter til Macro i OnAction event

  Set SubMenuItem = SubMenu.Controls.Add(Type:=msoControlButton)
        With SubMenuItem
            .Caption = strCaption
            .OnAction = strOnAction
            .FaceId = strFaceId
            .BeginGroup = bolBeginGroup
        End With


Som det er nu, så kan jeg kun skrive makroens navn - eks. \"makro1\".

Jeg ville vældig gerne kunne sige \"Makro1(<værdi>)\" - altså overføre en parameter.


16. februar 2001 - 14:44 #1
Hej hco
Jeg synes, at jeg kan genkende koden :-)

Tænker du på dette ?

Sub DanSubMenuItem(strCaption As String, strOnAction As String, strFaceId As String, bolBeginGroup as Boolean)
Avatar billede hco Nybegynder
16. februar 2001 - 14:55 #2
Det er din kode ;-)

men jeg vil skridtet videre.

Som det er nu så kan StrOnAction kun håndtere en makro uden parameter.

Problemet er at jeg ikke kan assigne OnAction eventen en makro med parameret på - eks. \"macrox(23)\"
men kun \"macrox\".

Avatar billede hco Nybegynder
16. februar 2001 - 15:04 #3
Det er VBA/Word der ikke accepterer parametre i OnAction eventen - eller rettere det er det jeg spørger om.

Alternativt, hvis jeg kunne få fat i det kaldende object, så kunne jeg bruge TAG propertien til at styre med.

16. februar 2001 - 15:11 #4
Rigtigt det kan du ikke.
Men du kan i f.eks. Item01 kalde en makro med parametre

Sub Item01()
    Makro1 Peter, Hans, Karin
End sub
Avatar billede hco Nybegynder
16. februar 2001 - 15:15 #5
jep det kan jeg godt.

problemet er at jeg laver en menu struktur. hvert punkt kalder en makro for at launche en given template.

med 25 forskellige menupunkter, så kræver det 25 forskellige makroer.

hvis jeg kunne få en parameter over, så kunne jeg nøjes med 1 makro og nogle arrays og lidt lækkert.

18. februar 2001 - 00:51 #6
hco - du har helt ret, det kan man godt, og jeg kom i tanke om, at jeg havde læst om det et sted..!

prøv noget der ligner dette:

OnAction = \"\'Macro1\" & Chr(34) & \"hco1\" & Chr(34) & \",\" & Chr(34) & \"hco2\" & Chr(34) & \"\'\"

hco1 og 2 repræsenterer den værdi du sender med.

and so on....
Flemming
Avatar billede hco Nybegynder
25. februar 2001 - 21:25 #7
Hej Flemming,

jeg har prøvet mig frem, men kan ikke få det til at spille.

min procedure ser sådan her ud:

=======================

Sub Menu_x(no As Integer)
    s = TemplatePath & Menus(no)
    Documents.Add Template:=s, NewTemplate:=False, DocumentType:=0
End Sub

=======================

Og jeg vil gerne kalde denne procedure med et tal i onaction eventen alá det her:

for n = 1 to 10
..
..
.OnAction = \"Menu_x (\"& str(n) & \")\"
..
..
next n

Kan du få det til at spille med din metode?

hco


26. februar 2001 - 12:21 #8
Du følger ikke helt metoden for makroen som beskrevet. Du skal f.eks. huske den enkelte \' før og efter du må heller ikke lave n til en string, når menu_x vil have en integer - skriv dette i stedet.

.OnAction = \"\'Menu_x & Chr(34) & n & chr(34) & \"\'\"

Dette skulle virke.
Hvad laver du med for n=1 to 10 omkring din OnAction ?

Du er velkommen til at sende mig dig regneark
flemse@post3.tele.dk
Avatar billede hco Nybegynder
26. februar 2001 - 15:13 #9
Hej Flemming,

Private Sub CreateSubMenuItem(strCaption, strOnAction, strFaceId As String, bolBeginGroup As Boolean, SubMenuItem As Object, SubMenu As CommandBarPopup)
\'Et menupunkt i en menugruppe
    \'SubMenu Item - UnderMenuPunkt
    strOnAction = \"\'Menu_x & Chr(34) & 1 & chr(34) & \'\"
    Set SubMenuItem = SubMenu.Controls.Add(Type:=msoControlButton)
        With SubMenuItem
            .Caption = strCaption
            .OnAction = strOnAction
            .FaceId = strFaceId
            .BeginGroup = bolBeginGroup
        End With
End Sub
*****************
her er den procedure som du lavede i tidernes morgen, hvor jeg har sat din kode ind som et hack.
det spiller stadig ikke. procedurekaldet skulle gerne være \"Menu_x 1\" - jeg er med på fejlen vedr. strings og integers.
26. februar 2001 - 16:15 #10
Der mangler \" efter \"Menu_x inden &
Der mangler \" efter & inden \'\"

Det kan godt være, at du skal have 1 i \"1\"

Klart at du har problemer med at sende en integer, når strOnAction er en string.....! det var jo heller ikke det du skriv i .OnAction
Den makro du kalder, vil modtage 1\'tallet som en string, og så må i makro\'en Menu_x lave en linie hvor du konverterer stringen til integer eks.
Sub Menu_x (sNo As String)
  Dim iNo As Integer
    iNo = Cint(sNo)

Det vil være noget nemmere, at hjælpe med filen i hånden flemse@post3.tele.dk
Jeg vil kunne kigge på det i morgen.
Avatar billede hco Nybegynder
26. februar 2001 - 16:44 #11
Hej Flemming,
her har du koden fra mit modul i Excel. Håber den giver mening.

hilsen

hco


******************\'
Dim SubMenu0 As CommandBarPopup
Dim MenuItem As Object
 
Public Menus(3) As String

Public Const Mnu0 = \"\\DK\\DK_LETTER.DOT\"
Public Const Mnu1 = \"\\DK\\DK_FAX.DOT\"
Public Const Mnu2 = \"\\DK\\DK_SUMMARY.DOT\"

Sub Menu_x(no As String)
    s = TemplatePath & Menus(Val(no))
    Documents.Add Template:=s, NewTemplate:=False, DocumentType:=0
End Sub

Private Sub CreateSubMenuItem(strCaption, strOnAction, strFaceId As String, bolBeginGroup As Boolean, SubMenuItem As Object, SubMenu As CommandBarPopup)
 
    strOnAction = \" \'Menu_x \" & Chr(34) & StrOnAction & Chr(34) & \" \' \"
    Set SubMenuItem = SubMenu.Controls.Add(Type:=msoControlButton)
        With SubMenuItem
            .Caption = strCaption
            .OnAction = strOnAction
            .FaceId = strFaceId
            .BeginGroup = bolBeginGroup
        End With
End Sub
 

Sub main()
  Menus(0) = Mnu0
  Menus(1) = Mnu1
  Menus(2) = Mnu2

  CreateSubMenuItem \"Letter\", \"1\", \"18\", False, MenuItem, SubMenu0
 
End Sub
26. februar 2001 - 21:36 #12
hco -> Du har mellemrum imellem \" og \' samt efter menu_x i starten, samt til slut \" \' \" disse 4 mellemrum skal ikke være der.

Der må være mere kode end du viser, for det er ikke nok til at lave en menu i Word. Der er også for meget hentet fra Excel makro\'en. Menupunkter dannes forskelligt i Word og Excel.
eks. på en word menu

  Dim cmdPop As CommandBarPopup
  Dim cmdSub As CommandBarPopup
  Dim cmdCtrl As CommandBarControl

  \' Tilføj Menu
  Set cmdPop = CommandBars(\"Menu Bar\").Controls.Add(Type:=msoControlPopup)
  cmdPop.Caption = \"&DSP Kursus\"

  \' Tilføj Menuitem
  With cmdPop.Controls.Add(Type:=msoControlButton)
    .Caption = \"&Felt beskrivelse\"
    .OnAction = \"Tabel_Felt\"
  End With

  \' Tilføj Submenu
  Set cmdSub = cmdPop.Controls.Add(Type:=msoControlPopup)
  cmdSub.Caption = \"&Udviklerens menu\"
    \' Tilføj streg i menu
    cmdSub.BeginGroup = True

  \' Tilføj Menuitem til Submenu
  With cmdSub.Controls.Add(Type:=msoControlButton)
    .Caption = \"&Fjern menu\"
    .OnAction = \"FjernMenu\"
  End With

Det kan også laves smart, som Excel menu\'en, men den kode ligger på min arbejds pc, og det er en helt anden snak.

Mvh
Flemming
Avatar billede hco Nybegynder
26. februar 2001 - 23:43 #13
Hej Flemming,

jeg ved godt at der mangler en del, og at det ikke er \"wordsk\". Men det var den kode du gav mig tidligere til excel, og den løser det samme problem i Word.

Dog har jeg endnu ikke fået det til at køre med parametrene.

Har du muligheden for at give mig en erklæring, som du ved virker?



07. marts 2001 - 12:05 #14
hco send mig dit dokument med makro\'en i, så skal jeg se, om jeg kan få det til at virke.
Jeg smutter på skiferie i dag, men kan kigge på det i næste uge, hvis du er interesseret.
27. marts 2001 - 17:10 #15
hco, du må undskylde, men jeg havde vist lige glemt dig. Prøv at lave dette menupunkt i Excel efter opskriften, som jeg ved du har.

    CreateMenuItem \"Item &1\", \"\'Item01\" & Chr(34) & \"Peter\" & Chr(34) & \",\" & Chr(34) _
                              & \"Hans\" & Chr(34) & \"\'\", \"71\", False

Lav denne makro, som den kan kalde.

Sub Item01(s1 As String, s2 As String)
    MsgBox s1 & \" - \" & s2
End Sub

Det virker fint.
27. marts 2001 - 17:12 #16
Du kan også vælge en anden strategi, og bruge en eller flere af følgende muligheder

Når en makro kaldes fra et menupunkt, så har du mulighed for f.eks. at hente følgende.

Nu har du forskellige metoder at gribe det an på, så nu skulle det kunne lykkes dig.

Sub Item01()
  strOne = Commandbars.ActionControl.Tag
  strTwo = Commandbars.ActionControl.Parameter
  sCaption = Commandbars.ActionControl.Caption
End Sub


27. marts 2001 - 17:13 #17
husk at se, at der er 2 svar fra idag + denne kommentar.
Avatar billede hco Nybegynder
27. marts 2001 - 17:34 #18
Hej Flemming,
du har været ihærdig og en god støtte, men jeg har løst problemet med tag tingen.
men grundet din entutiasme, så får du points alligevel ;-)

hco
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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