Excel VBA参考问题

时间:2017-09-04 23:34:44

标签: excel vba

我在网上关注了一些例子,我试图将一个值从一个sub传递到VBA中的另一个sub但是得到错误:

编译错误: 过程声明与具有相同名称的事件或过程的描述不匹配。

Sub next_sat_click()

Dim iweekday As Integer
Dim nextsat As String
Dim index As Integer
Dim str_game_date As String

iweekday = weekday(Now(), vbSunday)

nextsat = Format((Now + 7 - iweekday), "mm-dd-yy")

Call set_button_Click(nextsat)

End Sub

Sub set_button_Click(ByRef nextsat As String)
......
End Sub

2 个答案:

答案 0 :(得分:0)

更改子名称,如SetButtonOnClick。

如果你有一个名字相同的按钮,那么_cel关键字是excel为按钮上的Click事件保留的。

答案 1 :(得分:0)

您无法更改事件处理程序的参数(参数名称除外)。这也意味着如果没有预期的参数,您就无法添加任何参数。甚至Optional ByRef nextsat As String都不起作用。

在UserForm中,有三种方法可以在事件处理程序之间传递值:

  1. 使用全局变量(不推荐 永远 );
  2. 通过UserForm.tag属性(建议用于简单值,如字符串)。如果它已经永久使用,显然不能使用;
  3. 通过一个或多个隐藏控件(推荐用于多个或复杂值以及简单值)。
  4. 我使用过第二种方法:

    Sub next_sat_click()
    
    Dim iweekday As Integer
    Dim nextsat As String
    Dim index As Integer
    Dim str_game_date As String
    
    iweekday = Weekday(Now(), vbSunday)
    
    nextsat = Format((Now + 7 - iweekday), "mm-dd-yy")
    
    Me.Tag = nextsat
    
    End Sub
    
    Sub set_button_Click()
    Dim nextsat As String
    nextsat = Me.Tag
    ......
    End Sub
    

    在您的情况下,更好的解决方案可能是拥有一个可见 TextBox,您可以在其中存储用户点击next_sat时的计算日期,以便用户可以看到它。然后在set_button处理程序中,从TextBox.Text抓取它。