是否可以针对Excel中构建的拼写检查字典搜索特定的单词模式(即包含通配符的模式)?
Debug.Print Application.CheckSpelling("hel*")
例如,如果我要搜索True
,我希望上面的代码返回"hel*"
,因为某些实际的字符符合此模式,例如“你好”,“地狱”等。
但是,这不按预期工作:它返回False
。
答案 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