在VBA中的通配符字典搜索

时间:2014-10-21 12:16:30

标签: vba excel-vba excel

是否可以针对Excel中构建的拼写检查字典搜索特定的单词模式(即包含通配符的模式)?

Debug.Print Application.CheckSpelling("hel*")

例如,如果我要搜索True,我希望上面的代码返回"hel*",因为某些实际的字符符合此模式,例如“你好”,“地狱”等。

但是,这不按预期工作:它返回False

1 个答案:

答案 0 :(得分:2)

写这篇文章真的很有趣......它适用于单字符通配符,即?。它不适用于多字符通配符(*),但我仍然认为这是一条有趣的前进道路。

警告:这使用递归,执行时间随着输入字符串中?的数量呈指数增长!

Function CheckSpellingWithWildcards(ByVal s As String)
    Const wildcardChar As String = "?"
    Dim i As Integer
    Dim firstWildcardPos As Long
    firstWildcardPos = InStr(s, wildcardChar) 'Find first wildcard
    If firstWildcardPos = 0 Then
        'No wildcards left — look it up in the dictionary.
        CheckSpellingWithWildcards = Application.CheckSpelling(s)
    Else
        CheckSpellingWithWildcards = False
        For i = 97 To 122 'a to z. Adjust if you need e.g. çæøåéëï as well
            Mid(s, firstWildcardPos, 1) = Chr(i)  'Replace wildcard with letter
            If CheckSpellingWithWildcards(s) Then 'note: recursion!
                'Found a match! Get out.
                CheckSpellingWithWildcards = True
                Exit Function
            End If
        Next i
    End If
End Function

使用示例:

?CheckSpellingWithWildcards("Hel?")
True
?CheckSpellingWithWildcards("Hel?o")
True
?CheckSpellingWithWildcards("Hel?p")
False
?CheckSpellingWithWildcards("Comm?nica?ion")
True
?CheckSpellingWithWildcards("C?mm?nyca?ion") '30 seconds later...
False