在 Word VBA 中的表格单元格内插入合并字段,每行一个,无需使用“选择”和“选择”

问题描述 投票:0回答:1

我想将一些数据作为 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 编写了代码,该代码可以工作,但生成文档需要几秒钟的时间,而且我读到直接处理范围等更高效、更安全。

vba ms-word range
1个回答
0
投票

您的脚本即将完成。请尝试一下

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.