这是我在Stackoverflow上的第一篇文章。我在这个网站上得到了很多人的帮助和价值,所以我想首先感谢这个论坛上的每个人,感谢他们的不可思议的知识和慷慨的精神。非常感谢!
我对这个网站进行了广泛的研究,找不到我的问题的答案:我在LibreOffice(v4.2.4.2)中使用STRJOIN macro非常成功,但之后重返工作岗位一个多周的假期,突然间它无法正常工作。我的电脑被关闭并留下了,所以我没什么,也没有人改变任何东西。自从我回来后,OSX更新没有发生。
当我运行宏(由Adam Spiers编写,基于Markus O'Reilly的工作)时,我现在收到以下错误:
BASIC运行时错误。参数不是可选的
宏中的这一行:
如果不是IsMissing(范围)那么
运行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
答案 0 :(得分:0)
首先,STRJOIN
是function,并不打算直接运行。相反,使用子程序来测试它:
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意识到它需要重新运行代码。执行此操作后,关闭并重新打开文档以更新公式。