我正致力于链接历史数据源,其中地理位置的拼写和排序不一致。我解决这个问题的方法是创建一个自定义的Excel函数,它可以删除名称中具有挑战性的部分(即标点符号,' saint'等),将地名字符串中的所有字符转换为数字值,加上它们,同时保留第一个字母。这样,除了第一个字母之外,字符出现的顺序应该是无关紧要的。这是我的代码:
Option Explicit
Public Function Scramble(ByVal str1 As String)
' This function is meant to generate a unique index of all the characters used
' in the string, regardless of their order. It also removes ambiguous spellings
Dim count As Long, i As Long, firstLetter As String
' convert to upper case
str1 = UCase(str1)
' remove punctuation first
str1 = Replace(str1, ".", "")
str1 = Replace(str1, ",", "")
str1 = Replace(str1, "-", " ")
str1 = Replace(str1, "'", "")
' now ambiguous spellings
str1 = Replace(str1, "ST ", "")
str1 = Replace(str1, "SAINT ", "")
str1 = Replace(str1, "MAGNA", "GREAT")
str1 = Replace(str1, "PARVA", "LESS")
' now extract the first letter
firstLetter = Left(str1, 1)
' now prepositions
str1 = Replace(str1, "AT ", "")
str1 = Replace(str1, "IN ", "")
str1 = Replace(str1, "THE ", "")
str1 = Replace(str1, "UPON ", "ON")
' make sure to remove spaces last or else the searches will fail
str1 = Replace(str1, " ", "")
count = 0
For i = 1 To Len(str1)
count = count + Asc(Mid(str1, i, 1))
Next i
Scramble = firstLetter & Str(count)
End Function
我的问题是,当我在工作表中调用此函数时,它会返回#NAME?
错误,这似乎也导致我的CONCAT
工作表函数停止工作,同时调用{ {1}}错误。对于造成这种情况的原因,我感到很茫然。 Excel VBA似乎没有通常的编译器来捕获源代码中的错误,但我怀疑它可能是我的VBA代码中的语法错误?任何帮助表示赞赏。
答案 0 :(得分:1)
问题原因是我将模块名称从默认Module1
更改为更具信息性的名称。