【问题标题】:Pass worksheet and button object from Command Button从命令按钮传递工作表和按钮对象
【发布时间】:2018-05-16 14:32:43
【问题描述】:

有没有办法将 ActiveSheet 对象和对象作为参数传递给工作表上的命令按钮调用的 sub?

我知道您可以通过以下命令按钮将参数传递给宏:

How to call a macro from a button and pass arguments

但是,当单击 Button_1 时,您将如何将以下参数发送给 sub? (不使用 commandButton_click 事件)

参数 1:ws as worksheet(包含被按下按钮的工作表) 参数2:按钮作为对象(被按下的按钮)

我在按钮的“分配宏”输入框中尝试了以下操作。

'SubToBeCalledByButton(ActiveSheet, this)'


尝试 /u/Nathan_Sav 建议拨打电话,例如:'SubToBeCalledByButton(activesheet, activesheet.shapes("Button Name"))' 但收到以下错误:

这是我在分配宏中使用的输入:

这里是按钮调用的 sub:

Public Sub DetailButton(ws As Excel.Worksheet, but As Object)

    Debug.Print "ws:" & vbTab & ws.Name
    Debug.Print "but:" & vbTab & but.Name
    Debug.Print "cal:" & vbTab & Application.Caller

End Sub

【问题讨论】:

  • public sub somesub(ws as excel.worksheet, objCommandButton as CommandButton) 像这样调用somesub(activesheet,activesheet.shapes("commandbutton1") 沿着这些思路,application.caller 也可以帮助你,不需要调用按钮参数
  • 试过你的电话,请查看编辑后的帖子,出现错误。如果我在另一个子程序中调用子程序,你写的内容会起作用,但我试图通过将子程序分配为按钮的宏来从命令按钮调用子程序
  • 使用 Nathan_Sav 的建议解决了我自己对该功能的需求,即在按钮调用的子中使用Application.Caller,并在同一个子中使用activesheet。但是,关于如何将这些作为参数传递给工作表上的按钮调用的宏,我的问题尚未得到解答。
  • 那你的逻辑是什么?无论子是什么,当调用 Activesheet 时将是活动表,也不需要通过.....只需分配 MyMacro 然后 activesheet 将是您想要的那个..

标签: excel vba object button arguments


【解决方案1】:

来自 Nathan_Sav 对我的问题的评论:

无需将 ActiveSheet 和 CommandButton 作为参数发送。

ActiveSheet 可以通过在被调用的 sub 中使用 ActiveSheet 来获得,因为调用 sub 的按钮必须在 ActiveSheet 上才能被按下。

Button(调用sub的按钮)可以使用Application.Caller获取

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多