Это мой первый пост в Stackoverflow. Я получил так много помощи и ценности от многих людей на этом сайте, поэтому я хочу сначала поблагодарить всех на этом форуме за их невероятные знания и щедрый дух. Очень признателен!
Я тщательно изучил этот сайт и не могу найти ответ на свою проблему: я очень успешно использовал Макрос STRJOIN в LibreOffice (v4.2.4.2), но после возвращения на работу после многонедельного отпуска вдруг не работает. Мой компьютер был выключен и оставлен, так что я уверен, что ничего или никто ничего не изменил. Обновлений OSX не было с тех пор, как я вернулся.
Когда я запускаю макрос (написанный Адамом Спирсом на основе работы Маркуса О'Рейли), я m теперь получает следующие ошибки:
- В редакторе макросов я получаю
БАЗОВАЯ ошибка выполнения. Аргумент необязательный
с этой строкой в макросе:
Если НЕ IsMissing(диапазон), то
- Если я запускаю макрос из меню «Инструменты»> «Макрос»> «Выполнить макрос», я получаю:
Произошла ошибка Scripting Framework при выполнении сценария Basic 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