【问题标题】:How to end a Basic function properly如何正确结束基本功能
【发布时间】:2016-01-06 16:26:47
【问题描述】:

我正在尝试在 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

并且它工作正常,除非我再次尝试执行它,然后似乎新结果会附加到任何先前执行的结果中,并且它将一起返回两个字符串,例如:

删除部分甚至全部单元格,或者使用空单元格甚至在另一个页面中调用它也没关系,它总是会将结果附加到前一个:

为什么会这样?如何解决此问题?

我对Basic一无所知,所以如果这很简单,请不要抨击我。

原来的函数是这样的:

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

【问题讨论】:

    标签: macros libreoffice basic libreoffice-calc


    【解决方案1】:

    您找到的代码是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 在每次调用函数时都会被重置(新的Dimed)。所以即使是函数的返回值。

    【讨论】:

    • 我自己想不出来,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2023-04-08
    相关资源
    最近更新 更多