我想将一些数据作为 MergeFields 放置,表格中的单个单元格内每行一个,而不使用 Select 和 Selection。
我尝试了很多东西,甚至是 ChatGPT 建议的那些有一定意义的东西,但它们都不起作用。
注意:我将跳过变量声明直接进入重点。 例如:
With doc.MailMerge.Fields
Set ultCar = t.Cell(1, 1).Range
ultCar.Text = ""
Set para = ultCar.Paragraphs.Add
.Add para.Range.Characters.Last, "FirstName"
para.Range.InsertAfter vbCrLf
.Add para.Range.Characters.Last, "LastName"
End With
ChatGPT 制作的另一个示例:
Sub InsertMailMergeFieldsInSeparateRows()
Dim doc As Document
Dim tbl As Table
Dim cellRange As Range
' Asignar el documento activo
Set doc = ActiveDocument
' Crear una tabla de 2x2 en el documento
Set tbl = doc.Tables.Add(Range:=doc.Range(0, 0), NumRows:=2, NumColumns:=2)
tbl.Borders.Enable = True
' Obtener el rango de la celda donde se insertarán los campos
Set cellRange = tbl.Cell(1, 1).Range
cellRange.Text = "" ' Limpiar contenido inicial
' Insertar los campos de combinar correspondencia en filas separadas
With doc.MailMerge.Fields
' Insertar el primer campo
.Add Range:=cellRange, Name:="FirstName"
' Agregar un salto de párrafo
cellRange.InsertAfter vbCr
' Insertar el segundo campo en la siguiente fila
Set cellRange = tbl.Cell(1, 1).Range
cellRange.Collapse wdCollapseEnd
.Add Range:=cellRange, Name:="LastName"
End With
End Sub
这两个例子都行不通。我不想使用 Select 或 Selection,并且我正在尝试学习编写替代代码来避免此 AMAP。 我之前使用 Select 和 Selection 编写了代码,该代码可以工作,但生成文档需要几秒钟的时间,而且我读到直接处理范围等更高效、更安全。
您的脚本即将完成。请尝试一下
Sub Demo()
Dim doc As Document, t As Table, rngDes As Range
Dim para As Paragraph, rngCell As Range
Set doc = ActiveDocument
Set t = doc.Tables(1)
With doc.MailMerge.Fields
Set rngCell = t.Cell(1, 1).Range
rngCell.Text = ""
.Add rngCell, "FirstName"
Set para = rngCell.Paragraphs.Add
Set rngDes = para.Range.Duplicate
rngDes.MoveEnd wdCharacter, -1
.Add rngDes, "LastName"
End With
End Sub