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

更改其他内容中的子名称。

如果您的名称为"相同名称"的按钮,请通过Excel保留_ Click关键字。

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

用户形式中的事件处理程序之间有三种方法可以传递一个值:

  1. 使用全局变量(不推荐, Ever );
  2. 通过UserForm.tag属性(建议用于简单值(例如字符串))。显然,如果它已经有永久使用;
  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

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