Word - Modificar contenidor de todas las celdas mediante VBA

 
Vista:
sin imagen de perfil

Modificar contenidor de todas las celdas mediante VBA

Publicado por Daniel (3 intervenciones) el 31/07/2023 16:27:10
Hola,

me gustaría poder modificar el contenido de todas las celdas de una tabla (y, mediante bucle, de todas las tablas de un documento) mediante Visual Basic. Las tablas que tengo utilizan codificación UNICODE. He estado probando con este trozo de código, pero siempre me asigna el mismo valor:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub TableCycling()
    Dim oTable As Table
    Dim oRow As Row
    Dim oCell As Cell
 
    Dim valor_celda As Long
 
    For Each oTable In ActiveDocument.Tables
 
    For Each oRow In oTable.Rows    ' outher loop goes through rows
        For Each oCell In oRow.Cells    'inner loop goes
 
            valor_celda = Asc(oCell.Range.Text)
            valor_celda = valor_celda + Int(10)
 
            If valor_celda > 255 Then
                valor_celda = 32 + Int((25) * Rnd + 1)
            End If
 
            oCell.Range.Text = Chr(valor_celda)
 
        Next oCell
    Next oRow
 
    Next oTable
 
End Sub

Es decir, mi idea es guardar en "valor_celda" el valor ascii (númerico) de la celda, sumarle 10 y volvérselo a asignar a la celda. En cambio, el bucle siempre asigna a "valor_celda" el valor 63 (lo he revisado con la "Ventana Inmediato" dentro de la cinta de opciones "Programador", ejecutando el código paso a paso con F8.

Lo que me gustaría es que cada celda acualizara su valor al que tenía más un cierto "desvío", por ejemplo, de 10.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 147
Ha mantenido su posición en Word (en relación al último mes)
Gráfica de Word

Modificar contenidor de todas las celdas mediante VBA

Publicado por Antoni Masana (205 intervenciones) el 04/08/2023 09:21:00
Sube el libro y le doy un vistazo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Modificar contenidor de todas las celdas mediante VBA

Publicado por Daniel (3 intervenciones) el 05/08/2023 16:25:52
Acabo de subir un pequeño fichero en Word. Contiene una tabla cuyos valores están representados en Unicode. Si mira el código VBA verá que es el que posteé hace días.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 147
Ha mantenido su posición en Word (en relación al último mes)
Gráfica de Word

Modificar contenidor de todas las celdas mediante VBA

Publicado por Antoni Masana (205 intervenciones) el 05/08/2023 22:02:33
Al ser un valor UNICODE no es un número ASCII del 0 al 255, es n poquito más complejo y lo que debería devolver es un string.
No he tratado el tema y voy un poco perdido.
Dale un vistazo a esta página:

https://stackoverflow.com/questions/53517603/macro-to-replace-characters-with-unicode-code-working-partially-only

Busca esto en Google: word vba replace unicode character Te puede dar pistas de que es lo que falla

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Modificar contenidor de todas las celdas mediante VBA

Publicado por Daniel (3 intervenciones) el 11/08/2023 19:25:30
Hola!

Gracias por tu ayuda! Entre el enlace que me has pasado y la búsqueda en Google, he conseguido lo que me proponía. El código concreto para cambiar los carácteres Unicode por otros "desplazados" (también en Unicode) es éste:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub TableCycling()
    Dim oTable As Table
    Dim oRow As Row
    Dim oCell As Cell
    Dim valor_celda As Integer
 
    For Each oTable In ActiveDocument.Tables
      For Each oRow In oTable.Rows    ' outher loop goes through rows
        For Each oCell In oRow.Cells    'inner loop goes
            valor_celda = AscW(oCell.Range.Text)
            Debug.Print valor_celda   'para imprimir el valor en la consola y saber qué está leyendo
            valor_celda = valor_celda + Int(10)     'le sumo 10
            oCell.Range.Text = ChrW(valor_celda)
            Debug.Print valor_celda   'para imprimir el valor en la consola y saber qué está leyendo
        Next oCell
      Next oRow
  Next oTable
 
End Sub

De nuevo, gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar