1

我创建了以下内容以逗号分隔 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
4

3 回答 3

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
于 2013-10-03T16:18:43.487 回答
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,我使用 Locals 窗口确认新数组现在包含用单引号括起来的数字:

在此处输入图像描述

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

在此处输入图像描述

于 2013-10-03T15:30:52.760 回答