【问题标题】:Excel VBA reference issuesExcel VBA 参考问题
【发布时间】:2017-09-05 09:50:09
【问题描述】:

我在网上关注了一些示例,其中我试图将一个值从一个子传递到 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

【问题讨论】:

  • 你有一个叫set_button的按钮吗?如果是这样,您更改其Click 事件所期望的参数会令人不安。

标签: excel vba


【解决方案1】:

在 SetButtonOnClick 等其他名称中更改子名称。

_Click 关键字由 excel 保留用于按钮上的 Click 事件,如果您有一个同名的按钮调用。

【讨论】:

  • 我确实有一个名为 set_button 的按钮,带有点击操作。那么,即使那是该按钮的代码,我也可以从子过程中删除 _click 吗?或者我还能如何将值传递给该子过程?
  • 因为我试图在我的用户表单中单击 next_sat_click 时计算下一个星期六日期,然后将该值作为字符串传递给 set_button_click。然后,当在用户窗体中按下 set_button 时,将该日期写入 excel 文件。如果那是可能的或者我应该以不同的方式接近它。
  • 只需单击 Next_sat_click 时直接将该日期写入 excel 文件,或者,如果您像我在用户表单中想象的那样,创建一个文本框, next_sat_click 将保存该日期,并使用 set_button_click 简单地获取文本框中的值并将其保存在您想要的位置。
【解决方案2】:

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

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

  1. 使用全局变量(不推荐,永远);
  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 获取它。

【讨论】:

  • 我一定会试一试的。谢谢!
猜你喜欢
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多