STRJOIN宏在LibreOffice / Open Office中突然崩溃

时间:2016-08-02 05:56:58

标签: openoffice-calc libreoffice-calc openoffice-basic

这是我在Stackoverflow上的第一篇文章。我在这个网站上得到了很多人的帮助和价值,所以我想首先感谢这个论坛上的每个人,感谢他们的不可思议的知识和慷慨的精神。非常感谢!

我对这个网站进行了广泛的研究,找不到我的问题的答案:我在LibreOffice(v4.2.4.2)中使用STRJOIN macro非常成功,但之后重返工作岗位一个多周的假期,突然间它无法正常工作。我的电脑被关闭并留下了,所以我没什么,也没有人改变任何东西。自从我回来后,OSX更新没有发生。

当我运行宏(由Adam Spiers编写,基于Markus O'Reilly的工作)时,我现在收到以下错误:

  1. 在宏编辑器中,我得到了
  2.   

    BASIC运行时错误。参数不是可选的

    宏中的这一行:

      

    如果不是IsMissing(范围)那么

    1. 如果我从工具>运行宏宏>运行宏,我得到:
    2.   

      运行Basic脚本时出现Scripting Framework错误   Standard.Module1.STRJOIN。消息:参数数量错误!

      OpenOffice也发生了同样的错误。

      发生了什么/为什么宏现在无法正常运行?其他宏工作正常,我还创建了一个新的用户配置文件,认为这可能会有所帮助,但无济于事。

      我特别关注这个功能突然爆炸,因为我有一个大量的STRJOIN电子表格,并且连接不是一个充分的替代品。

      这是马库斯和亚当的宏观:

      Function STRJOIN(range, Optional delimiter As String, _
                       Optional before As String, Optional after As String)
          Dim row, col As Integer
          Dim result, cell As String
      
          result = ""
          If IsMissing(delimiter) Then
              delimiter = ","
          End If
          If IsMissing(before) Then
              before = ""
          End If
          If IsMissing(after) Then
              after = ""
          End If
      
          If NOT IsMissing(range) Then
              If NOT IsArray(range) Then
                  result = before & range & after
              Else
                  For row = LBound(range, 1) To UBound(range, 1)
                      For col = LBound(range, 2) To UBound(range, 2)
                          cell = range(row, col)
                          If cell <> 0 AND Len(Trim(cell)) <> 0 Then
                              If result <> "" Then
                                  result = result & delimiter
                              End If
                              result = result & before & range(row, col) & after
                          End If
                      Next
                  Next
              End If
          End If
      
          STRJOIN = result 
      End Function
      

1 个答案:

答案 0 :(得分:0)

首先,STRJOINfunction,并不打算直接运行。相反,使用子程序来测试它:

Sub Test_STRJOIN
    Dim strings(1 To 1, 1 To 3)
    strings(1,1) = "a"
    strings(1,2) = "b"
    strings(1,3) = "c"
    result = STRJOIN(strings, " / ")
    MsgBox(result)
End Sub

从宏编辑器或Tools > Macro > Run Macro调用此子例程。它应该在消息框中显示“a / b / c”。

现在,在电子表格公式中使用STRJOIN时会出现什么问题?好吧,我认为宏只需要以某种方式重新运行。您可以通过在函数开头添加类似MsgBox "STRJOIN() running"的行来验证它是否正在运行。

要真正强制它运行,请在新单元格中手动输入另一个公式,例如=STRJOIN(A1:B1)

通常对我来说,当我在Basic代码中进行任意更改时,例如通过添加注释,这些问题就会消失。这显然使Office意识到它需要重新运行代码。执行此操作后,关闭并重新打开文档以更新公式。