Imprimir página | Cerrar ventana

Formato condicional en tabla de word

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Word
Descripción del foro: Foro de Word
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86542
Fecha de impresión: 20/Abril/2024 a las 14:31


Tema: Formato condicional en tabla de word
Publicado por: salvaleuven
Asunto: Formato condicional en tabla de word
Fecha de publicación: 10/Diciembre/2022 a las 19:18
Hola a todos, necesito hacer una cosa un pelín rara quizás, pero que me sería muy útil:

Se trata de lograr que el texto de una celda en una tabla de word adquiera un formato (color rojo, por ejemplo) en función del formato que tenga el texto en una celda vecina (por ejemplo, negrita). Es decir, si la celda A1 tiene formato negrita, que por ejemplo, la celda B1 tenga automáticamente formato color rojo.

En excel creo que sabría hacerlo, pero en word, la verdad que ni idea.

Muchísimas gracias a todos por adelantado,




Respuestas:
Publicado por: prga
Fecha de publicación: 12/Diciembre/2022 a las 19:34
Hola.
A la espera de mejores y más sencillas soluciones, ahí va una complicada que es un ejemplo de trabajo que se tiene que adaptar, mejorar, optimizar etc etc
Supongamos que tenemos un documento con una tabla con un marcador (mitabla) que encierra a toda la tabla. Sirva esto para saber en que tabla estamos ya que el documento puede tener varias tablas. 
Suponemos que la columna 1 de dicha tabla puede tener texto(todo) en negrita o no y lo que buscamos es que al escribir en la columna 2 lo haga en rojo o negro según la celda de la primera columna esté en negrita o no.
Para ello haremos:
1º.-Crearemos un módulo de clase (clase1) con el siguiente código:
Option Explicit

Public WithEvents appWord As Word.Application
 

Private Sub appWord_WindowSelectionChange(ByVal Sel As Selection)
Dim mifila As Long
Dim micolumna As Long
''''el marcador de nombre  mitabla   incluye sólo la tabla en cuestión
If Sel.Tables.Count = 1 And Sel.Bookmarks.Count = 1 Then
  If Sel.Bookmarks(1).Name = "mitabla" Then
    mifila = Sel.Cells(1).RowIndex
    micolumna = Sel.Cells(1).ColumnIndex
     If micolumna = 2 Then   ''''aquí el número de columna en cuestión. SE SUPONE QUE LA COLUMNA 1 DA EL FORMATO
       If Sel.Tables(1).Cell(mifila, 1).Range.Font.Bold = True Then
          Sel.Cells(1).Range.Font.ColorIndex = wdRed
        Else
          Sel.Cells(1).Range.Font.ColorIndex = wdBlack
       End If
      Else
     '''no es columna 2
     End If
  End If
 Else
 ''''''MsgBox ("no tabla")
End If

End Sub

2º.- En thisdocument el siguiente código para que al abrir se "cargue" el módulo de clase

Option Explicit

Dim miapli As New Clase1


Public Sub AutoNew()
  Set miapli.appWord = Application
 End Sub

Public Sub AutoOpen()
  Set miapli.appWord = Application
End Sub

con lo anterior y evidentemente teniendo las macros "activadas", se consigue un "simulacro" de formato condicional.

Espero que sirva de ayuda.
Ya comentas.
Un saludo a todos




Publicado por: salvaleuven
Fecha de publicación: 12/Diciembre/2022 a las 20:30
Pues muchísimas gracias, porque he sido capaz de avanzar y casi estoy a punto de lograr lo que quería. Para refinarlo más, sólo necesitaría que me indicaras cómo sería posible que en vez de que se cambie el formato del texto de la celda a rojo, sustituya el contenido de la celda completo por un símbolo determinado, por ejemplo "*"

Un saludo y muchas gracias otra vez


Publicado por: prga
Fecha de publicación: 12/Diciembre/2022 a las 20:49
hola.
Prueba con la siguiente modificación

       If Sel.Tables(1).Cell(mifila, 1).Range.Font.Bold = True Then
         ''' Sel.Cells(1).Range.Font.ColorIndex = wdRed
          Sel.Cells(1).Range.Text = "*"
          
      '  Else
     '     Sel.Cells(1).Range.Font.ColorIndex = wdBlack
       End If

Ya comentas
Un saludo a todos



Publicado por: salvaleuven
Fecha de publicación: 12/Diciembre/2022 a las 21:05
Ok, por último, te cuento: tengo una aplicación que genera un word con la tabla en cuestión, partiendo de una plantilla que puedo personalizar, incluir código etc. Trato de conseguir que se añadan los símbolos * una vez que la aplicación ha generado el archivo, mediante una llamada a un procedimiento como el que has descrito que incluiría en la propia plantilla. Creo que tal como lo has expuesto, se requiere que se edite manualmente la celda en cuestión, y darle a enter para que se actualice y aplique el formato (o añada el símbolo). Quizás para lo quiero sería más práctico programar que línea por línea en la tabla busque el formato en la columna 2 y si encuentra negrita, añada símbolo * en la columna 6 de la misma línea.

Siento no haberlo explicado con más detalle desde el principio, pero no quería complicar mucho la pregunta, e intentarlo yo a partir de lo que se me respondiera.



Publicado por: prga
Fecha de publicación: 12/Diciembre/2022 a las 21:45
Hola.
La solución expuesta evidentemente es para el llenado a "mano" de la tabla.
Otra cosa muy diferente es que la tabla se llene a través de una importación( hasta ahora no se sabía nada de eso) desde otra aplicación.
Como la posible solución casi seguro que no tendrá nada que ver con la expuesta, mejor abrir un hilo nuevo en el que se explique todo lo relativo a esa importación.
Un saludo a todos


Publicado por: salvaleuven
Fecha de publicación: 12/Diciembre/2022 a las 23:16
Muchas gracias, damos por tanto por cerrado el hilo.



Imprimir página | Cerrar ventana