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
将工作。
在用户窗体中的事件处理程序之间传递一个值有三种方法:
- 使用全局variables(不推荐, 永远 );
- 通过
UserForm.tag
属性(推荐用于简单的值,如string)。 如果它已经有永久使用,显然不能使用; - 通过一个或多个隐藏的控件(推荐用于多个或复杂的值以及简单的值)。
我用了第二种方法:
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
抓取它。