2

これは Stackoverflow への私の最初の投稿です。私はこのサイトで非常に多くの人々から多くの助けと価値を得てきました。そのため、最初に、このフォーラムの皆さんの信じられないほどの知識と寛大な精神に感謝したいと思います. とても有難い!

私はこのサイトを広範囲に調査しましたが、私の問題に対する答えを見つけることができません: LibreOffice (v4.2.4.2) でSTRJOIN マクロを使用して非常に成功しましたが、数週間の休暇の後に仕事に戻った後、突然機能しなくなりました。私のコンピューターはシャットダウンされ、取り残されました。私が戻って以来、OSXの更新は行われていません。

マクロ ( Markus O'Reilly の作業に基づいてAdam Spiersが作成) を実行すると、次のエラーが発生します。

  1. マクロエディタでは、

BASIC ランタイム エラー。引数はオプションではありません

マクロで次の行を使用します。

If NOT IsMissing(range) Then

  1. [ツール] > [マクロ] > [マクロの実行] からマクロを実行すると、次のようになります。

Basic スクリプト Standard.Module1.STRJOIN の実行中に Scripting Framework エラーが発生しました。メッセージ: パラメーターの数が間違っています!

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)

通常、このような問題は、コメントを追加するなど、Basic コードに任意の変更を加えると解消されます。これにより、Office はコードを再実行する必要があることを認識するようになります。これを行った後、ドキュメントを閉じて再度開き、数式を更新します。

于 2016-08-02T16:58:25.547 に答える