** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Word
  Mensajes nuevos Mensajes nuevos RSS - Formato a palabras según listado en tabla
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoFormato a palabras según listado en tabla

 Responder Responder
Autor
Mensaje
JOchoa Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 02/Febrero/2019
Localización: Colombia
Estado: Sin conexión
Puntos: 5
Enlace directo a este mensaje Tema: Formato a palabras según listado en tabla
    Enviado: 02/Febrero/2019 a las 09:01
Maestros. un abrazo desde Colombia. Soy nuevo en el foro y me excuso de antemano si lo que abajo preguntaré haya ya sido tratado. Lo busqué y no encontré algo que me pudiera ayudar, de manera que me atreví a consultarlo en este hilo.


Mi duda es la siguiente. Tengo varios archivos Word en los que voy documentando los proyectos de Access, Excel o Word varios de los cuales debo compartir con otras personas. En estos documentos uso enormes cantidades de términos técnicos de estas aplicaciones y además nuevas palabras con las que he nombrado variables, controles, etc. Ejemplo de estas palabras son:

login, logout, requery, refresh, strNomcliente, dblValorIVA, intNumero, etc.

Por supuesto he debido hacer de manera manual un formateo de cada palabra (dependiendo de su fin) así:

- Cuando escribo variables pongo la palabra en negrita, cursiva y cambio su color a azul.
- Cuando hago referencia a Nombres de controles  uso la negrita y cursiva
- etc.
Adicional naturalmente si se tiene el corrector ortográfico automático activado desde las opciones pues estas palabras aparecen con las características y nada presentables lineas rojas en la parte inferior.

lo que requiero es que, teniendo en una tabla (en excel o en el propio Word) todo el listado de palabras clasificadas por categoría según lo que he descrito anteriormente, que una macro en VBA recorra el documento y que si encuentra dichas palabras les dé el formato dependiendo de la categoría en la tabla y que, adicionalmente, omita el corrector ortográfico y no aparezca la línea roja de error en la parte de abajo de las palabras. (Por supuesto la idea es no crear en el diccionario cada palabra).

Muchas gracias por dedicar tiempo a contestar este requerimiento

un abrazo




Jochoa
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: en línea
Puntos: 3137
Enlace directo a este mensaje Enviado: 04/Febrero/2019 a las 20:07
Hola.
Un ejemplo de trabajo (todo en vba word) que se acerca a la solución pedida sería:

Public Sub formateapalabras()
Dim nn As Long
Dim misvalores
Dim mispalabras(3, 1) As String

mispalabras(0, 0) = "login"
mispalabras(0, 1) = "-1,0,2"  '''''negrita true, cursiva false, color azul

mispalabras(1, 0) = "logout"
mispalabras(1, 1) = "-1,-1,1"  '''''' negrita,cursiva,color negro

mispalabras(2, 0) = "requery"
mispalabras(2, 1) = "0,0,6"  ' negrita,cursiva,color rojo

mispalabras(3, 0) = "Refresh"
mispalabras(3, 1) = "0,0,11"  ' negrita,cursiva,color amarillo

For nn = 0 To UBound(mispalabras)

Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = mispalabras(nn, 0) 'mibus
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
 
   misvalores = Split(mispalabras(nn, 1), ",")
  
    Do While Selection.Find.Execute
     Selection.Range.SpellingChecked = True
     Selection.Range.GrammarChecked = True
     Selection.Font.Bold = misvalores(0)
     Selection.Font.Italic = misvalores(1)
     Selection.Font.ColorIndex = misvalores(2)
    Loop
Next

End Sub

repito que sería un ejemplo de trabajo. Evidentemente se puede construir en excel o access o word una tabla (aquí se ha usado una matriz de 2 dimensiones) con las distintas palabras y formateos para leerla desde el VBA de word.
Espero que ayude a resolver la duda.
Ya comentas.
Un saludo a todos


Arriba
JOchoa Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 02/Febrero/2019
Localización: Colombia
Estado: Sin conexión
Puntos: 5
Enlace directo a este mensaje Enviado: 05/Febrero/2019 a las 16:40
Maestro PRGA, gracias por responder. 
He aplicado el código y funciona perfecto! Muchas gracias. Lo he trabajado inicialmente creando en la matriz las palabras que necesito gestionar.
Soy atrevido... pero quisiera que me ayudara igual con el código para poder pasar todas estas palabras de una tabla de access ( o de excel, lo que sea una mejor práctica) a Word.
Nuevamente muchas gracias maestro Prga
un abrazo desde Colombia.
Jochoa
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: en línea
Puntos: 3137
Enlace directo a este mensaje Enviado: 05/Febrero/2019 a las 18:57
Hola.
Una posible solución access pasaría por:
1º.-tener una base de datos (Database1.accdb) en la misma carpeta que el documento word ya guardado
2º.-En esa base una tabla (Tabla1) con un campo texto(mpalabra), uno booleano(mnegrita), otro booleano(mitalica) y uno entero largo(mcolor)
3º.-Rellenar la tabla con los nombres , si es italica, si es negrita y el número de color que reconoce el word
El código de ejemplo sería:

Public Sub formateapalabrasdesdeaccess()
'++++++++la conexión ado funciona sin access instalado en la máquina+++++++++++
Dim miconexcade As String
Dim mirec As Object   
Dim miconex As Object 
Set miconex = CreateObject("adodb.connection")
Set mirec = CreateObject("adodb.recordset")
miconexcade = "Provider=Microsoft.ACE.OLEDB.12.0;Data source="
miconexcade = miconexcade & ThisDocument.Path & "\Database1.accdb;"
miconex.ConnectionString = miconexcade
miconex.Open
mirec.Open "Tabla1", miconex, 1, 3, 2

  If mirec.RecordCount = 0 Then  
    msgbox("No datos en tabla")
    mirec.Close
    Set mirec = Nothing
    miconex.Close
    Set miconex = Nothing
    Exit Sub
  End If

mirec.movefirst
Do Until mirec.EOF
  Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = Trim(mirec.Fields("mpalabra").Value)
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Do While Selection.Find.Execute
     Selection.Range.SpellingChecked = True
     Selection.Range.GrammarChecked = True
     Selection.Font.Bold = mirec.Fields("mnegrita").Value
     Selection.Font.Italic = mirec.Fields("mitalica").Value
     Selection.Font.ColorIndex = mirec.Fields("mcolor").Value
    Loop
mirec.movenext
Loop
mirec.Close
Set mirec = Nothing
miconex.Close
Set miconex = Nothing

End Sub

Las pruebas hechas en office 2016 funcionan bien. El código tiene falta de depurar, optimizar, etc etc
Espero que ayude a resolver la duda.
Ya comentas.
Un saludo a todos
Arriba
JOchoa Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 02/Febrero/2019
Localización: Colombia
Estado: Sin conexión
Puntos: 5
Enlace directo a este mensaje Enviado: 13/Marzo/2019 a las 20:32
Maestro PRGA.
Una gran ayuda. Un abrazo desde Colombia


Jochoa
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable