Excel VBA参考问题

我正在下面的一些例子在线试图传递一个值从一个子到VBA另一个子,但得到的错误:

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

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 

在其他类似SetButtonOnClick的情况下更改子名称。

如果您有一个名称相同的button,则_Click关键字由excel保留在button上的Click事件中。

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

在用户窗体中的事件处理程序之间传递一个值有三种方法:

  1. 使用全局variables(不推荐, 永远 );
  2. 通过UserForm.tag属性(推荐用于简单的值,如string)。 如果它已经有永久使用,显然不能使用;
  3. 通过一个或多个隐藏的控件(推荐用于多个或复杂的值以及简单的值)。

我用了第二种方法:

 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 

在你的情况下一个更好的解决scheme可能是有一个可见的文本框,在用户点击next_sat时存储计算date,以便用户可以看到它。 然后在你的set_button处理程序中,从TextBox.Text抓取它。