1

ms-word ドキュメント内の数字のリストをカンマで区切るために、次のコードを作成しました。ただし、各数値を単一の引用符で囲みたいと思っています。これはうまくいくのに苦労しています。最初の番号をラップすることはできましたが、他の番号に対しては実行できません。各番号の長さは 12 桁です。誰か助けてくれませんか?

Sub Macro1()

    With Selection
        .Find.Text = "^p"
        .Find.Replacement.Text = ","

        .Find.Execute Replace:=wdReplaceAll
        .TypeText Text:="'"
        .MoveRight Unit:=wdCharacter, Count:=12
        .TypeText Text:="'"

    End With

End Sub
4

3 に答える 3

0

元のコードを作り直しましたが、これは大規模なデータ セットに対して非常に高速に実行されます。コードの最初と最後にも括弧を追加しました。

サブテストN()

Options.AutoFormatAsYouTypeReplaceQuotes = False
'Replace the paragraph breaks with commas and single quotes
With ActiveDocument.Range(0, ActiveDocument.Range.End - 1).Find
    .Text = "^p"
    .Replacement.Text = "','"
    .Execute Replace:=wdReplaceAll
End With
Options.AutoFormatAsYouTypeReplaceQuotes = True
'Cap body of data with single quotes and brackets
ActiveDocument.Content.Text = "('" & ActiveDocument.Range(0, ActiveDocument.Range.End - 1).Text & "')"

サブ終了

于 2013-10-04T11:24:20.573 に答える
0

変換を With ブロックの外に移動する必要があると思います。

私は Word VBA の専門家ではないので、これはキーボード入力を複製するのではなく、一般的な文字列関数を使用するアプローチです。したがって、同じタスクを達成するためのさまざまなアプローチがある可能性があります:)これが「正しい」方法であると思います。これは、「入力」を模倣するのではなく、オブジェクトを直接操作することが一般的に推奨されるためです。

テキストを物理的に「選択」する必要がないように修正

注: これはドキュメント内のすべてのテキストを使用するため、変更が必要になる場合があります。

Sub Test()
Dim doc As Document
Dim arr As Variant
Dim txtRange As Range
Dim i As Long

Set doc = ActiveDocument
Set txtRange = doc.Range(0, doc.Characters.Count)

'First, replace the paragraph breaks with commas
With txtRange.Find
    .Text = "^p"
    .Replacement.Text = ","
    .Execute Replace:=wdReplaceAll
End With


arr = Split(Left(txtRange.Text, Len(txtRange.Text) - 1), ",")

For i = LBound(arr) To UBound(arr)
    arr(i) = "'" & arr(i) & "'"
Next

txtRange.Text = Join(arr, ",")

End Sub

コメントから更新

これが機能していることを完全に確認しました。コードが正しく実装されていることを再確認してください。あなたの説明を満たすテキストの例を次に示します。

ここに画像の説明を入力

そのテキストを選択してマクロを実行し、F8 を使用してステップ実行します。ブロックの最後でWith、段落区切りがコンマに置き換えられていることを確認します。

ここに画像の説明を入力

ループが終了したら、For...Next[ローカル] ウィンドウを使用して、新しい配列に単一引用符で囲まれた数値が含まれていることを確認します。

ここに画像の説明を入力

Selection.Text次の行は、配列からこれらの項目を出力し、確認済みの を置き換えます。

ここに画像の説明を入力

于 2013-10-03T15:30:52.760 に答える