【问题标题】:Getting type mismatch when looking up string in array在数组中查找字符串时出现类型不匹配
【发布时间】:2019-10-19 11:37:40
【问题描述】:

我有一些代码从电子表格中提取字符串并在数组中查找字符串的索引值。我注意到如果我将字符串保持为 1 个字符,则代码可以正常工作。如果我真的尝试运行它来查找单词,我会收到类型不匹配错误,即使字符串 DEFINITELY 存在于数组中。任何帮助,将不胜感激。我在下面粘贴了一个简化版本的代码,它仍然会导致同样的错误。

我尝试将我的数组调暗为变体或字符串。我尝试使用空格使数组中的所有字符串都具有相同的长度。

Sub myArray_ISbroke()

    Dim arraysSuck: arraysSuck = Split("HI,HELLO,TEST1,TEST2,T3", ",")
    MsgBox Application.Match("HI", arraysSuck)
    MsgBox Application.Match("HELLO", arraysSuck)
    MsgBox Application.Match("TEST1", arraysSuck)
    MsgBox Application.Match("TEST2", arraysSuck)
    MsgBox Application.Match("T3", arraysSuck)

End Sub

我希望 MSG 框会显示 1、2、3、4 和 5。在“1”之后出现错误 13。

【问题讨论】:

    标签: arrays excel vba types mismatch


    【解决方案1】:

    您缺少最后一个参数,即匹配类型。请参阅文档here

    上面写着:

    如果 match_type 为 1,则 Match 查找小于或等于 lookup_value 的最大值。 Lookup_array 必须按升序排列:...-2、-1、0、1、2、...、A-Z、FALSE、TRUE。

    如果 match_type 为 0,Match 会找到第一个与 lookup_value 完全相等的值。 Lookup_array 可以是任何顺序。请注意,Match 不区分大小写。

    如果 match_type 为 -1,则 Match 查找大于或等于 lookup_value 的最小值。 Lookup_array 必须按降序排列:TRUE、FALSE、Z-A、...2、1、0、-1、-2、...等。

    如果省略 match_type,则假定为 1。

    修改后的代码:

    Option Explicit
    
    Sub UpdatedExample()
    
        Dim arraysSuck: arraysSuck = Split("HI,HELLO,TEST1,TEST2,T3", ",")
        MsgBox Application.Match("HI", arraysSuck, 0)
        MsgBox Application.Match("HELLO", arraysSuck, 0)
        MsgBox Application.Match("TEST1", arraysSuck, 0)
        MsgBox Application.Match("TEST2", arraysSuck, 0)
        MsgBox Application.Match("T3", arraysSuck, 0)
    
    End Sub
    

    【讨论】:

    • 修复了故障,谢谢!我很惊讶地看到 match_type 被省略导致了这种情况,我真的不明白为什么。鉴于数组中有一个完全匹配,你能告诉一个无知的人,为什么它不去那个匹配副投错误?
    • 我认为数组没有排序。查看我添加的匹配类型的 cmets
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    相关资源
    最近更新 更多