VBA在Word中的文本周围添加单引号

时间:2013-10-03 15:03:23

标签: vba ms-word word-vba

我创建了以下内容以逗号分隔ms-word文档中的数字列表。但是,我还想用单个qoutation标记包装每个数字 - 我正在努力做到正确。我设法包装了第一个数字但是我不能为其他数字执行它。每个数字长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

3 个答案:

答案 0 :(得分:1)

替代和更快的解决方案是使用通配符进行另一个查找替换。完整代码如下所示:

Sub Macro1()

    With Selection
        '1st step- replacement paragraph marks into commas
        .Find.Text = "^p"
        .Find.Replacement.Text = ","
        .Find.MatchWildcards = False
        .Find.Execute Replace:=wdReplaceAll

        '2nd step- adding single quotation marks
        .Find.Text = "([0-9]{12})"
        .Find.MatchWildcards = True
        .Find.Replacement.Text = "'\1'"
        .Find.Execute Replace:=wdReplaceAll

    End With

End Sub

答案 1 :(得分: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

评论更新

我绝对确认这是有效的。请仔细检查您是否正确实施了代码。以下是一些符合您描述的文字示例:

enter image description here

我选择该文本,并运行宏,使用F8单步执行。在With块结束时,请注意段落符号已替换为逗号:

enter image description here

For...Next循环退出后,我确认使用Locals窗口,新数组现在包含用单引号括起的数字:

enter image description here

下一行打印出数组中的这些项目,并替换Selection.Text,确认:

enter image description here

答案 2 :(得分:0)

我重新编写了原始代码,这在大型数据集上运行得非常快。我现在也在代码的开头和结尾添加括号。

Sub TestN()

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 & "')"

End Sub