首页 > 解决方案 > 在数组中查找字符串时出现类型不匹配

问题描述

我有一些代码可以从电子表格中提取字符串并在数组中查找字符串的索引值。我注意到如果我将字符串保持为 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。

标签: arraysexcelvbatypesmismatch

解决方案


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

它说:

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

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

如果 match_type 为 -1,则 Match 查找大于或等于 lookup_value 的最小值。Lookup_array 必须按降序排列:TRUE、FALSE、ZA、...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

推荐阅读