我认为,您需要将转换移到 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
, 确认:
