Formato a palabras según listado en tabla |
Responder ![]() |
Autor | |
JOchoa ![]() Nuevo ![]() ![]() Unido: 02/Febrero/2019 Localización: Colombia Estado: Sin conexión Puntos: 3 |
![]() ![]() ![]() ![]() ![]() 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
|
|
![]() |
|
prga ![]() Moderador ![]() Unido: 16/Noviembre/2004 Localización: España Estado: Sin conexión Puntos: 3105 |
![]() ![]() ![]() ![]() ![]() |
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 |
|
![]() |
|
JOchoa ![]() Nuevo ![]() ![]() Unido: 02/Febrero/2019 Localización: Colombia Estado: Sin conexión Puntos: 3 |
![]() ![]() ![]() ![]() ![]() |
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
|
|
![]() |
|
prga ![]() Moderador ![]() Unido: 16/Noviembre/2004 Localización: España Estado: Sin conexión Puntos: 3105 |
![]() ![]() ![]() ![]() ![]() |
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
|
|
![]() |
Responder ![]() |
|
Tweet
|
Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |