如何结束基本功能正常
问题描述:
我试图写一个基本功能的LibreOffice Calc中使用下面的代码来获得所选择的小区中每个单词的第一个字母:如何结束基本功能正常
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
而且它的工作原理正确,除非我尝试再次执行它,那么它似乎新结果被附加到任何先前执行的,它将两个字符串返回在一起,例如:
这也无所谓如果我删除一些甚至全部单元格,或者i F I叫它使用空单元格或甚至在另一个页面,它会永远追加的结果与前一个:
为什么会出现这种情况?我该如何解决这个问题?
我对基本的东西一无所知,所以如果这件事很简单,请不要打我。
原来的功能是这样的:
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。
答
您发现的代码是Excel的VBA
。 Openoffice或Libreoffice使用StarBasic
,而不是VBA
。这相似但不相等。所以你不能简单地使用与Excel中相同的代码。
第一个区别是,没有Range
对象。您已注意到并已使用rng
作为Variant
。
但是,另一个区别是,函数名称就像全局范围中的变量名称。如果再次调用该函数,它们将不会被重置。因此,在StarBasic
我们做得更好:
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
sResult
是reseted(新Dim
ED)每次函数被调用时。所以即使是函数的返回值。
我自己想不出来,谢谢! – arielnmz