2

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

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

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

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

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

在宏中使用这一行:

If NOT IsMissing(range) Then

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

运行基本脚本 Standard.Module1.STRJOIN 时出现脚本框架错误。消息:参数数量错误!

OpenOffice 中也发生了同样的错误。

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

我特别担心该功能突然爆炸,因为我有一个巨大的电子表格,其中 STRJOIN 广泛出现在整个过程中,并且连接不是一个足够的替代品。

这是 Markus 和 Adam 的宏:

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
4

1 回答 1

0

首先,STRJOIN它是一个函数,并不打算直接运行。相反,使用子程序来测试它:

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).

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

于 2016-08-02T16:58:25.547 回答