¿Buscar marcador de celda de tabla está dentro?

Estoy tratando de averiguar en qué celda de la tabla están mis marcadores en mi documento de Word. No tengo problemas para recorrer los marcadores, eso fue bastante simple. Ahora, estoy tratando de identificar la celda de la tabla en la que está el marcador, pero estoy teniendo dificultades para hacerlo.

Alternativamente, ¿hay alguna forma de vincular datos a un marcador (como usar un marcador adjunto), que luego se puede hacer referencia y copiar en otro documento? No puedo usar marcadores adjuntos porque el texto de las celdas debe cambiar con frecuencia y los usuarios no quieren tener que marcar el texto nuevo cada vez.

preguntado el 10 de septiembre de 12 a las 22:09

De hecho, resolví esto siguiendo otra ruta: en lugar de recorrer los marcadores y luego encontrar la celda de la tabla, estoy recorriendo las celdas de la tabla y encontrando los marcadores. Es bastante fácil de esta manera, no sé si es posible de la otra manera. FYI para cualquier otra persona que se encuentre con esto. -

¿Por qué no publicas tu solución como respuesta? -

No sabía que eso era posible, estoy publicando el código ahora. -

3 Respuestas

Usé RowIndex y ColumnIndex como se proporciona en este enlace:

Word VBA: ¿cómo ubicar la celda de la tabla que contiene el control de contenido?

Dim bkRange As Range
Dim rIndex, cIndex As Integer
Set bkRange = ActiveDocument.Bookmarks(bookmarkName).Range
rIndex = bkRange.Cells(1).RowIndex
cIndex = bkRange.Cells(1).ColumnIndex

Una vez que obtenga estos valores, puede acceder a la celda de la tabla como:

ActiveDocument.Tables(1).Cell(rIndex, cIndex)

Respondido 09 Oct 18, 07:10

Como se mencionó anteriormente, una mejor manera de hacer esto es revisar la tabla y encontrar los marcadores. Mi secuencia de comandos a continuación pasa por la segunda columna de la primera tabla, buscando todos los marcadores. Los marcadores que encuentra corresponden a los marcadores que configuré en el otro documento "Document to Populate.docx". Los datos del ActiveDocument se rellenan en el segundo documento dondequiera que se encuentre un marcador de la siguiente manera:

Sub AutomateQuestionnaire2()
' Prototype 2
' Different approach was used, instead of looping through bookmarks, loop
' through the tables looking for bookmarks. This method is more flexible
' and  is better suited for our Word documents which always include tables.
' Limitations: Bookmark needs to be in both documents using the same ID, and
' data must be in a table, column 2.

Dim oRow As Row
Dim oRange As Range
Dim oFindRange As Range
Dim oBookmark As Bookmark
Dim oQuestionnaire As Word.Document
Dim oApp As Word.Application

Dim strFilePath As String
Dim strText As String

strFilePath = ActiveDocument.Path

'Open the second to populate it
Set oApp = New Word.Application
oApp.Visible = True
Set oQuestionnaire = oApp.Documents.Open(strFilePath + "\Document to Populate.docx")

'We'll loop through each row of the table looking for bookmarks, if a bookmark is found
'the text adjacent to that bookmark, in the table cell, will be copied to the same
'bookmark if found in the questionnaire.
For Each oRow In ActiveDocument.Tables(1).Rows
    'Limits the range to the middle column as is the case for the ITGC 532 form
    Set oRange = oRow.Cells(2).Range
    Set oBookmark = oRange.Bookmarks(1)

    'VBA will terminate the script if it comes across an error, instead
    'let's add some error handling to skip errors.
    On Error GoTo SkipToNext

    strText = oRange.Text
    oQuestionnaire.Bookmarks(oBookmark).Range.Text = strText

    'Find the newly inputted text and differentiate it (bold for now)
    Set oFindRange = oQuestionnaire.Content
    oFindRange.Find.Execute FindText:=strText, Forward:=True
    If oFindRange.Find.Found = True Then oFindRange.Font.ColorIndex = wdBlue

SkipToNext:

Next

Respondido el 11 de Septiembre de 12 a las 20:09

Algunos de los comentarios en el código no son perfectos porque lo ajusté mientras lo publicaba. El cuestionario es lo que estoy tratando de llenar. - AutoM8R

No hay necesidad de recorrer las tablas, y mucho menos sus filas y columnas. Aquí hay un código significativamente más simple para que juegues:

Sub TestBookMark(BkMkNm As String)
Dim Rng As Range
With ActiveDocument
  Set Rng = .Range(0, 0)
  With .Bookmarks(BkMkNm).Range
  If .Information(wdWithInTable) = True Then
    Rng.End = .End
    MsgBox "Bookmark: " & BkMkNm & vbTab & "Table: " & Rng.Tables.Count & vbTab & "Row: " & .Cells(1).RowIndex & vbTab & "Column: " & .Cells(1).ColumnIndex
  End If
  End With
End With
End Sub

que podrías llamar con un código como:

Sub Demo()
Call TestTable("BkMk")
End Sub

Obviamente, se podría implementar un bucle a través de los marcadores para realizar múltiples pruebas. Eso debería ser mucho más eficiente que probar cada tabla/celda.

Respondido 09 Oct 18, 08:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.