我完全不明白为什么这没有返回值。这组函数
应该返回String
中所有ASCII值
的SUM
。 String
和 Number 数组
正确构建,并且 SUM 函数
在 Array
上工作,但是当它尝试分配时将求和值添加到返回变量中,则失败。
“失败”是指代码不会单步执行求和行,并且函数将 #VALUE!
返回到工作表。其他所有内容都会在立即窗口
中检查,并正确逐步执行直到最后一行。如有任何建议,我们将不胜感激。
Private Function StringToCharArray(ByRef sIn As String) As String()
StringToCharArray = Split(StrConv(sIn, vbUnicode), Chr(0))
'provided by Fencliff at http://www.mrexcel.com/forum/excel-questions/342725-split-string-into-array.html
End Function
Function StringToNumber(MyString As String) As Integer
Dim StringArray() As String
Dim NumberArray() As Long
StringArray() = StringToCharArray(MyString)
ReDim NumberArray(UBound(StringArray))
For i = LBound(StringArray) To UBound(StringArray)
NumberArray(i) = Asc(StringArray(i))
Next i
StringToNumber = Application.WorksheetFunction.Sum(NumberArray)
End Function
最佳答案
以“abc”为例,Split 获得数组“a”、“b”、“c”、“”。也就是说,末尾有一个空字符串元素。这无法转换为 ascii 数字,因此会导致错误。
一个简单的解决方案是跳过最后一个元素:
For i = LBound(StringArray) To UBound(StringArray) - 1
我怀疑这个问题(额外的元素)与 Unicode 的使用有关,但我还没有对此进行调查。
关于arrays - 将值插入数组时 VBA 函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23743457/