Excel VBA参考问题

Excel VBA参考问题,excel,vba,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

我在网上看了一些例子,其中我试图在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

在诸如SetButtonConClick之类的其他内容中更改子名称


如果按钮的名称相同,excel会为按钮上的单击事件保留_Click关键字。

在诸如SetButtonConclick之类的其他内容中更改子名称

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关键字。

您不能更改事件处理程序的参数(参数名称除外)。这也意味着如果不需要任何参数,则不能添加任何参数。甚至连
可选ByRef nextsat As 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")

Call set_button_Click(nextsat)

End Sub

Sub set_button_Click(ByRef nextsat As String)
......
End Sub
有三种方法可以在UserForm中的事件处理程序之间传递值:

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

    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
    

    在您的情况下,更好的解决方案可能是有一个可见的文本框,当用户单击“下一步”时,您可以在其中存储计算的日期,以便用户可以看到它。然后在
    set\u按钮中,从
    TextBox中抓取它。Text
    您不能更改事件处理程序的参数(参数名称除外)。这也意味着如果不需要任何参数,则不能添加任何参数。甚至连
    可选ByRef nextsat As String
    都不能工作

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

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

    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
    

    在您的情况下,更好的解决方案可能是有一个可见的文本框,当用户单击“下一步”时,您可以在其中存储计算的日期,以便用户可以看到它。然后在你的
    设置按钮
    处理程序中,从
    文本框中抓取它。Text

    你有一个名为
    设置按钮
    的按钮吗?如果是这样,您更改了
    Click
    事件预期的参数,这会让它感到不安。您是否有一个名为
    set_button
    的按钮?如果是这样,您更改了其
    Click
    事件所期望的参数,这会让它感到不安。我有一个名为set_button的按钮,带有单击操作。因此,我可以从子过程中删除_click,即使这是该按钮的代码吗?或者我怎样才能把一个值传递到这个子过程中呢?因为我要做的是在我的用户表单中,当单击下一个星期六时,它会计算下一个星期六的日期,然后将该值作为字符串传递给设置按钮。然后,在用户表单中按下set_按钮时,将该日期写入excel文件。如果这是可能的,或者我应该以另一种方式来处理。只需在单击下一次单击时直接将该日期写入excel文件,或者,如果你像我在用户表单中想象的那样,创建一个文本框,下一次单击将保存该日期,使用set_按钮,单击只需从文本框中获取值并将其保存在需要的位置。我有一个名为set_按钮的按钮,带有单击操作。因此,我可以从子过程中删除_click,即使这是该按钮的代码吗?或者我怎样才能把一个值传递到这个子过程中呢?因为我要做的是在我的用户表单中,当单击下一个星期六时,它会计算下一个星期六的日期,然后将该值作为字符串传递给设置按钮。然后,在用户表单中按下set_按钮时,将该日期写入excel文件。如果这是可能的,或者我应该以另一种方式来处理。只需在单击下一次单击时直接将该日期写入excel文件,或者,如果你像我在用户表单中想象的那样,创建一个文本框,下一次单击将保存该日期,使用set_按钮,只需从文本框中获取值并将其保存在需要的位置。我一定会尝试一下。谢谢我一定要试一试。谢谢