【问题标题】:Error passing a value between 2 subroutine在 2 个子程序之间传递值时出错
【发布时间】:2020-02-13 13:15:35
【问题描述】:

我试图在 VBA 中的 2 个子之间传递 String,但每次我得到一个编译错误

这是我的代码

Option Explicit

Private Sub ComboBox1_DropButtonClick()
    Dim value As String
    value = ComboBox1.value
    ComboBox1_Change value
End Sub

Private Sub ComboBox1_Change(ByVal value As String)
    Dim value2 As String
    value2 = value
End Sub

我收到以下错误

例程声明与同名事件或例程的描述不匹配

我已尝试删除 ByVal,但仍然没有...一些提示?

【问题讨论】:

  • @SiddharthRout 我已经编辑了问题,抱歉语法错误
  • @BigBen 去掉括号意味着删除它们?
  • 你还在使用valore... 必须是value 还要使用不同的变量名
  • 您收到错误是因为ComboBox1_Change 不支持传递参数ComboBox1_Change(ByVal value As String) 它应该是ComboBox1_Change()
  • 首先,我想了解您为什么要将值从DropButtonClick 传递给Change

标签: excel vba subroutine


【解决方案1】:

例程声明与同名事件或例程的描述不匹配

您收到错误是因为ComboBox1_Change 不支持传递参数。 ComboBox1_Change(ByVal value As String) 应该是 ComboBox1_Change()

@SiddharthRout 因为我想在 dropButton 被更改之前获取它的值。因此,当用户单击它时,我会得到 dropButton 的值,然后当用户更改它时,我会得到新值 - ChangeWorld 10 分钟前

您不需要添加全局变量。在用户表单中声明一个范围为 for 的变量。像这样的

Option Explicit

Dim oldValue As String
Dim newValue As String

Private Sub ComboBox1_DropButtonClick()
    oldValue = ComboBox1.value
End Sub

Private Sub ComboBox1_Change()
    newValue = ComboBox1.value

    MsgBox oldValue
    MsgBox ComboBox1.value
End Sub

【讨论】:

  • 很好的解释!那么oldValuenewValue 不是全局变量吗?但是它们可以用于许多子程序?
  • 非常感谢您的解释。我想问你一件事。当我完成所有代码时,清除变量是一种很好的编码方式吗?所以我的最终代码是oldValue = ''newValue = ''?
  • 我不明白您的上述查询
猜你喜欢
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多