Board logo

標題: [發問] onaction="Macro",macro有參數如何寫呀 [打印本頁]

作者: mhl9mhl9    時間: 2018-7-28 22:25     標題: onaction="Macro",macro有參數如何寫呀

onaction="Macro",macro有參數如何寫呀
作者: a5007185    時間: 2018-7-29 01:13

你可以把你的問題在具體一點的描述嗎?
這樣有點難回答你的問題,

如果你是指  Macro是一個變數的話,
直接把雙引號拿掉即可。

如果Macro是一個Sub要添加參數的話
Macro 變數A,變數B,變數C

如果Macro是一個Function要添加參數的話
Macro(變數A,變數B,變數C)
作者: naruto018    時間: 2018-7-29 09:31

回復 1# mhl9mhl9

是要問CommandBarButton.OnAction 的部分嗎?
作者: mhl9mhl9    時間: 2018-7-29 13:28

回復 3# naruto018

yes ,我真是想問commandbar的control中 onaction="巨集名稱" 這個巨集的參數任何寫?
作者: mhl9mhl9    時間: 2018-7-29 13:56

回復 3# naruto018

yes 問CommandBarButton.OnAction 的部分.
我做了個commandbar,有4個Button,執行同一個sub,只是參數分別是1,2,3,4.
當然最好是 onaction=sub名稱+參數,但不知如何寫,不得意求其次,我現在用application.caller(2),也管用.如下:
   4個一樣 onaction="abcd""
   sub abcd
    xxx=application.caller(2)
    巨集名 xxx
    end sub
查到application.caller是個數組,有4個數,1,1,4105,0,第二數好像代表第幾個button,所以我用第二個數當參數
但究竟這4個數代表什麼,不清楚,也查不到,所以問題似乎解決了,但并不踏實.
作者: naruto018    時間: 2018-7-30 07:34

回復 5# mhl9mhl9

參考看看
  1. Public Const B1 As String = "text-B1"
  2. Public Const B2 As String = "text-B2"
  3. Public Const B3 As String = "text-B3"

  4. Public Sub abc()
  5.     With Application.CommandBars.Add("測試", msoBarTop, , True)
  6.         .Visible = True
  7.         With .Controls.Add(Type:=msoControlPopup) '參數代入數字
  8.             .Caption = "測試1"
  9.             With .Controls.Add(Type:=msoControlButton)
  10.                 .Caption = "測試0"
  11.                 .OnAction = "text" '沒代入參數
  12.             End With
  13.             With .Controls.Add(Type:=msoControlButton)
  14.                 .Caption = "測試1-1"
  15.                 .OnAction = "'text 1'" '代入參數會在原本最外圍的雙引號裡面分別加單引號
  16.             End With
  17.             With .Controls.Add(Type:=msoControlButton)
  18.                 .Caption = "測試1-2"
  19.                 .OnAction = "'text 1,2'" '不同參數用逗號分開
  20.             End With
  21.             With .Controls.Add(Type:=msoControlButton)
  22.                 .Caption = "測試1-3"
  23.                 .OnAction = "'text 1,2,3'"
  24.             End With
  25.         End With
  26.         With .Controls.Add(Type:=msoControlPopup) '參數代入文字
  27.             .Caption = "測試2"
  28.             With .Controls.Add(Type:=msoControlButton)
  29.                 .Caption = "測試2-1"
  30.                 .OnAction = "'text ""B1""'" '文字左右側分別加上兩個雙引號
  31.             End With
  32.             With .Controls.Add(Type:=msoControlButton)
  33.                 .Caption = "測試2-2"
  34.                 .OnAction = "'text ""B1"",""B2""'"
  35.             End With
  36.             With .Controls.Add(Type:=msoControlButton)
  37.                 .Caption = "測試2-3"
  38.                 .OnAction = "'text ""B1"",""B2"",""B3""'"
  39.             End With
  40.         End With
  41.         With .Controls.Add(Type:=msoControlPopup) '參數代入變數
  42.             .Caption = "測試3"
  43.             With .Controls.Add(Type:=msoControlButton)
  44.                 .Caption = "測試3-1"
  45.                 .OnAction = "'text B1'"
  46.             End With
  47.             With .Controls.Add(Type:=msoControlButton)
  48.                 .Caption = "測試3-2"
  49.                 .OnAction = "'text B1,B2'"
  50.             End With
  51.             With .Controls.Add(Type:=msoControlButton)
  52.                 .Caption = "測試3-3"
  53.                 .OnAction = "'text B1,B2,B3'"
  54.             End With
  55.         End With
  56.     End With
  57. End Sub


  58. Public Sub text(Optional Arg1 = "A1", Optional Arg2 = "A2", Optional Arg3 = "A3")  '預設沒代入參數的預設值
  59. MsgBox Arg1 & Chr(10) & Chr(13) & Arg2 & Chr(10) & Chr(13) & Arg3
  60. End Sub
複製代碼

作者: linyancheng    時間: 2018-7-30 16:29

將參數寫入.Parameter中,程序再引用.Parameter的值,
其實也可以.Tag代替,
也可以自訂變數,寫入變數,再引用變數,其實這樣比較靈活,我都自訂變數。
作者: Scott090    時間: 2018-7-31 06:30

回復 7# linyancheng


    請大大寫一段程式的例子,以資模仿學習
謝謝
作者: mhl9mhl9    時間: 2018-7-31 14:41

#2,#3,#6
謝謝各位幫忙,我求助的問題相信不少人都想知道,這兒我再簡單提一提:
當你做commandbarbutton,其中有一句"Onaction="sun名稱"",如果sub名稱有參數任何寫?
答案就是#6告訴的  Onaction="'sub名稱 參數'",就是雙引號+單引號+sub名稱+空格+參數+單引號+雙引號,就這麼簡單.
其他方法也提供我們不少思路,但就上述一條,最簡單最好用,再次謝謝大家!
作者: Scott090    時間: 2018-8-4 06:42

actioncontrol 與 tag 的用法 參考 Microsoft 網頁如下:
https://msdn.microsoft.com/en-us/vba/office-shared-vba/articles/commandbars-actioncontrol-property-office#example
作者: GBKEE    時間: 2018-8-7 13:57

回復 8# Scott090
  1. Option Explicit
  2. Public a As String   '一般模組的上的公用變數
  3. Sub Ex() 'OnAction的程式碼
  4.     a = "EXCEL" '第一次按Button 1 的文字
  5.       ActiveSheet.Shapes.Range(Array("Button 1")).Select '需插入按鈕(表單控制項)
  6.     Selection.OnAction = "'Ex_Macro a'"
  7.     ActiveCell.Activate
  8. End Sub

  9. Sub Ex1()
  10.     a = "Ex_Macro"
  11. End Sub
  12. Sub Ex_Macro(ByRef q As String)
  13.     MsgBox q
  14.     Ex1 '第二次以後按 Button 1 的文字
  15. End Sub
複製代碼

作者: Scott090    時間: 2018-8-8 08:03

回復 11# GBKEE


    感謝 G大 的回覆。
workbook關閉後,再開啟,第一次執行按鈕後顯示 a="EXCEL"這個參數並未進來如下圖
[attach]29167[/attach]

請問,問題在哪裡
謝謝
作者: GBKEE    時間: 2018-8-8 16:44

本帖最後由 GBKEE 於 2018-8-8 16:45 編輯

回復 12# Scott090

workbook關閉後,再開啟時  
ThisWorkbook模組上需有這些程式碼
  1. Option Explicit
  2. Private Sub Workbook_Open()
  3.     a="EXCEL"
  4. End Sub
複製代碼

作者: linyancheng    時間: 2018-8-8 22:39

回復 8# Scott090


意指    onaction引用的程序不要使用引數,或將引數加上optional,
如此一來,功能表項目即不必被限制於固定引數,
而由引用的程序引用自訂變數,
如此一來,相同功能表在不同狀況下,可執行不一樣的程序過程。
作者: Scott090    時間: 2018-8-9 08:38

回復 13# GBKEE


    謝謝 G大 指引
    學習了
作者: mhl9mhl9    時間: 2018-8-16 22:33

回復 10# Scott090
actioncontrol 與 tag 的用法,10#提供網頁介紹很清楚,並不複雜,應該好好用.




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)