How to end a Basic function properly
我尝试在basic for libreoffice calc中编写一个函数,使用以下代码获取所选单元格中每个单词的第一个字母:
1 2 3 4 5 6 7 8 9 10 11 12 | Function GetFirstLetters(rng) As String Dim arr Dim I As Long arr = Split(rng,"") If IsArray(arr) Then For I = LBound(arr) To UBound(arr) GetFirstLetters = GetFirstLetters & Left(arr(I), 1) Next I Else GetFirstLetters = Left(arr, 1) End If End Function |
它工作正常,除非我再次尝试执行它,否则新的结果似乎会附加到以前执行的结果之后,它会同时返回两个字符串,例如:
如果我删除了部分甚至全部单元格,或者使用空单元格甚至在另一页中调用它,也不重要,它总是将结果追加到前一个单元格:
为什么会这样?我怎样才能纠正这种行为?
我对基础知识一无所知,所以如果这很简单的话,请不要责怪我。
最初的功能是:
1 2 3 4 5 6 7 8 9 10 11 12 13 | Function GetFirstLetters(rng As Range) As String 'Update 20140325 Dim arr Dim I As Long arr = VBA.Split(rng,"") If IsArray(arr) Then For I = LBound(arr) To UBound(arr) GetFirstLetters = GetFirstLetters & Left(arr(I), 1) Next I Else GetFirstLetters = Left(arr, 1) End If End Function |
我从这里得到的:http://www.extendoffice.com/documents/excel/1580-excel-extract-first-letter-of-each-word.html。
您找到的代码是
第一个区别是,没有
但另一个区别是,函数名与全局范围中的变量名类似。如果再次调用函数,它们将不会被重置。所以在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Function GetFirstLetters(sCellValue as String) As String Dim arr As Variant Dim I As Long Dim sResult As String arr = Split(sCellValue,"") If IsArray(arr) Then For I = LBound(arr) To UBound(arr) sResult = sResult & Left(arr(I), 1) Next I Else sResult = Left(arr, 1) End If GetFirstLetters = sResult End Function |
每次调用函数时,都会重置