【问题标题】:VBA ByRef argument type mismatch in Excel 2019Excel 2019 中的 VBA ByRef 参数类型不匹配
【发布时间】:2021-07-08 14:32:51
【问题描述】:

又一次尝试逃离 VBA 失败。我正在尝试将 Excel VBA 中的字符串解析为两个变量。我确实在脑海中提出了非常识部分来研究它,但仍然没有运气。

Sub StartEndMonth(ByVal MonthRange As String, ByRef MonthStart As String, ByRef MonthEnd As String) ' xxx-xxx
    MonthStart = "Jan"
    MonthEnd = "Dec"
End Sub

Sub TestMonthList()
    Dim Month_Range, Start_Month, End_Month As String
    Month_Range = "Jan-Dec"
    StartEndMonth Month_Range, Start_Month, End_Month
    MsgBox MonthRange & " " & Start_Month & " " & End_Month
End Sub

以上代码在调用例程中的 Start_Month 变量上引发 VBA ByRef 参数类型不匹配错误。我应该在 StartEndMonth 例程中有一些解析逻辑。在我消除了例程中的所有其他内容后,仍然出现编译错误。

假设每个变量都已正确定义?还是不行?

感谢您的帮助!

【问题讨论】:

  • 我不知道为什么/如何工作,但通常在括号中关闭参数可以解决这个问题。在这种情况下,它将是 StartEndMonth Month_Range, (Start_Month), End_Month。我试了一下,得到的输出消息为“Dec”
  • @Charlie 感谢您的回复!请允许我分享一下我是如何解决问题的 - 重新输入代码 - 微软万岁!
  • 重新输入代码"这绝不是正确的方法,你这样做当然不是微软的错。

标签: vba excel-2019


【解决方案1】:

作为一般规则,不要编写修改其参数的子/函数。如果你计算一些东西,return 它,例如作为一个数组:

Function SplitMonthRange(MonthRange As String)
    SplitMonthRange = Split(MonthRange, "-")
    ' you really should add some sanity checks, e.g. UBound() and value checks
End Function

然后 res 的工作非常简单:

Sub TestSplitMonthRange()
    Dim monthRange as String, months As Variant

    monthRange = "Jan-Dec"
    months = SplitMonthRange(monthRange)

    MsgBox monthRange & ": " & months(0) & " to " & months(1)
End Sub

提示 - 这个:

Dim Month_Range, Start_Month, End_Month As String

声明 2 个变体和 1 个字符串。这是正确的:

Dim Month_Range As String, Start_Month As String, End_Month As String

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多