如何正确结束基本功能
How to end a Basic function properly
我正在尝试在 Basic 中为 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
它工作正常,除非我尝试再次执行它,然后似乎新结果附加到任何先前执行的结果并且它将 return 两个字符串放在一起,示例:
如果我删除了一些甚至所有的单元格,或者如果我使用一个空单元格甚至在另一个页面中调用它也没有关系,它总是会将结果附加到前一个:
为什么会这样?我该如何解决这个问题?
我对 Basic 一无所知,所以请不要 bash 如果这是非常简单的事情。
原函数是这样的:
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。
您找到的代码是 VBA
for Excel。 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
都会重置(新 Dim
ed)。所以即使是函数的 return 值。
我正在尝试在 Basic 中为 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
它工作正常,除非我尝试再次执行它,然后似乎新结果附加到任何先前执行的结果并且它将 return 两个字符串放在一起,示例:
如果我删除了一些甚至所有的单元格,或者如果我使用一个空单元格甚至在另一个页面中调用它也没有关系,它总是会将结果附加到前一个:
为什么会这样?我该如何解决这个问题?
我对 Basic 一无所知,所以请不要 bash 如果这是非常简单的事情。
原函数是这样的:
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。
您找到的代码是 VBA
for Excel。 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
都会重置(新 Dim
ed)。所以即使是函数的 return 值。