PDA

View Full Version : Ayuda con Macro para Microsoft Word



jabe00
11-16-2017, 03:53 PM
Buenas Tardes para todos.

Me gustaria saber si me pueden auydar a obtener lo siguiente de un documento de Word y pudiea ser extraido y mostrar los resultados en un nuevo documento o ser guardado. Yo he tratado de hacerlo pero no tengo ningun conociento en Macros/vba. Asi que les agradeceria la ayuda que me puedan brindar..

Aqui les explico con mas detalles o que quiero lograr

Yo receivo un documento en Word en el cual necesito buscar unas palabras especificas como :Yes, :No y Go_To para esta ultima se necesita la palabra que esta despues de Go_To que puede variar de acuerdo al documento.

La idea es buscar todas los :Yes al final de esa oracion tiene el Go_To que indica hacia que parte del documento continua or ira. y lo mismo para :No que al final de esa oracion que contiene el :No termina en el Go_To, por ejemplo.

La linea que me interesa copiar en el nuevo word documento o Excel seria la siguiente:

Yes/Go_To Pudo Salir/Yes/ Go_To Problemas de Caida/Yes/Go_To Terminar
Luego cuando terminar esa linea entonces empezar con :No
No/Go_To No Pudo Salir/No/Go_To Incentivo/

Esa secuencia me ayudara a recorrer todo el documento, por eso necesito obtener todas las respuestas y los Go_To relacionados a cada respuesta.

Aqui les copio un ejemplo de como es el documento word que recibo en el cual las unicas palabras constantes son :Yes, :No y Go_To


Word Ejemplo:

Bienvenido: Pregunta Pregunta Pregunta Pregunta?
(Respuesta:Yes) Texto Texto Texto Texto [Go_To Pudo Salir]
(Respuesta:No) Texto Texto Texto Texto [Go_To No Pudo Salir]

Pudo Salir: Pregunta Pregunta Pregunta Pregunta?
(Respuesta:Yes) Texto Texto Texto Texto [Go_To Problemas de Caida
(Respuesta:No) Texto Texto Texto Texto [Go_To Incentivo

No Pudo Salir: Pregunta Pregunta Pregunta Pregunta?
(Respuesta:Yes) Texto Texto Texto Texto [Go_To Incentivo
(Respuesta:No) Texto Texto Texto Texto[Go_To Incentivo

Incentivo : Texto Texto Texto Texto [Go_To Ayuda

Problemas de Caida: Pregunta Pregunta Pregunta Pregunta?
(Respuesta :Yes) Texto Texto Texto Texto [Go_To Terminar
(Respuesta:No) Texto Texto Texto Textos [Go_To Terminar

Ayuda: Texto Texto Texto Texto

Terminar: Texto Texto Texto Texto


Le agradezco de antemano cualquier ayuda que me puedan brindar....


Gracias Anticipadas.
Jose
jabe00

macropod
11-16-2017, 05:31 PM
¿Tiene un documento real con una muestra representativa del contenido que podría adjuntar aquí?

jabe00
11-21-2017, 12:30 PM
¿Tiene un documento real con una muestra representativa del contenido que podría adjuntar aquí?


Gracias por responder.

Estoy adjuntando un document el cual tuve que modificar parcialmente ya que no puedo adjuntar el documento original.

El documento original cuenta con muchos mas modulos, pero es repetitivo, solo varia el contenido y las preguntas/respuestas.


Lo que quiero conseguir al final es obtener un listado con todas las posibles combinaciones de respuestas con miras a alimtentar con esas respuesta otro programa que revisa de manera automatica cada contenido de las respuestas.

Basado en el documento adjuntado un ejemplo de la secuencia seria de la siguiente manera:


[Q(Puedo_Continuar_SP) > [R(Puedo_Continuar_SP:Yes) > [Go_To Prueba 2 SP]] > [Modulo Prueba 2 SP ] > [Q(Tipo_Ayuda_SP) > [R(Tipo_Ayuda_SP:Yes) > [Go_To Prueba 3 SP ]] > [Modulo Prueba 3 SP] > [R(Horario_SP:Yes) > [Go_To Ayuda_Tarde_SP]] > [Q(Ayuda_Tarde _SP) > [R(Repeat_No_Doctor_SP:Yes) > [Modulo Salir SP]

Eso traducido a lo que necsito para alimentar el otro programa seria

/Y/Y/Y/Y

Osea, solo me interesa saber si respondio si o no y hacia donde lleva dicha respuesta, pues como puedes ver en el ejemplo anterior las respuestas fueron :

[R(Puedo_Continuar_SP:Yes)
[R(Tipo_Ayuda_SP:Yes)
[R(Horario_SP:Yes)
[R(Repeat_No_Doctor_SP:Yes)

Lo cual da como resultado /Y/Y/Y/Y/

Claro, como dije anteriormente, lo que quiero conseguir son todas las posibles combinaciones para poder alimentar el programa siguiente con todas ellas..



Como ejemplo mira unas cuantas lineas de las que tengo que hacer manualmente en el cual obtengo o trato de obtener todas las posibles combinaciones.

/Y/N/N/N/Y/Y/Y/Y/Y/Y/
/N/Y/N/N/Y/Y/Y/N/
/N/N/Y/N//N/Y/

Donde Y quiere decir que respondio Si y
N quiere dicir que la respuesta es No


Gracias anticipadas

jabe00
11-21-2017, 12:35 PM
Algo para tomar en cuenta, no se tiene que poner los resultados en un archivo de excel, puede ser en un TXT que deberia contener el nombre del archivo word en el cual se esta ejecutando.

macropod
11-21-2017, 04:01 PM
Es difícil saber por su publicación y su documento adjunto exactamente lo que desea. Pruebe la macro adjunta con su documento adjunto y compruebe si proporciona el resultado correcto para lo que contiene ese document. Tenga en cuenta, por ejemplo, que [Modulo Prueba 3 SP] contiene ambos [R (Horario_SP: No y [R (Horario_SP: Yes

Sub Demo()
Application.ScreenUpdating = False
Dim i As Long, StrTxt As String
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "\[R*:[YN]"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
.MoveStartUntil ":", wdForward
StrTxt = StrTxt & Replace(.Text, ":", "\")
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
MsgBox StrTxt
End Sub

jabe00
11-21-2017, 05:26 PM
Es difícil saber por su publicación y su documento adjunto exactamente lo que desea. Pruebe la macro adjunta con su documento adjunto y compruebe si proporciona el resultado correcto para lo que contiene ese document. Tenga en cuenta, por ejemplo, que [Modulo Prueba 3 SP] contiene ambos [R (Horario_SP: No y [R (Horario_SP: Yes

Sub Demo()
Application.ScreenUpdating = False
Dim i As Long, StrTxt As String
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "\[R*:[YN]"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
.MoveStartUntil ":", wdForward
StrTxt = StrTxt & Replace(.Text, ":", "\")
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
MsgBox StrTxt
End Sub

Gracias Paul por la ayuda.

Si, se que es algo complejo, y le pido disculpas por eso.

EL resultado extraido esta en el formato esperado, pero no esta tomando en cuenta la secuencia que deberia llevar basado en las respuestas que la persona de. Per ejemplo,

Normalmente despues de cada Respuesta hay un Go_To que indica hacia donde debe moverse basado en la respuesta que de, en algunas ocacionhes despues de una respuesta viene otra pregunta o comentario.

Le adjunte dos imagenes uno con sobresaltando donde deberia ir cuando la persona dice SI a cada una de las respuestas y otra imagen para cuando la persona dice NO



La idea es generar un archivo de Texto con todas las posibles respuestas, pero esta deben tener un Orden de:

Si or No Como respuesta y deberia ir al Go_To relacionado a esa respuesta y asi continuar hasta finalizar el documento y generar la secuencia de respuestas en el formato //// entonces repetir el proceso con la siguiente Respuesta y geneerar el //// y seguirlo haciendo hasta tanto haya agotado todas las respuestas.

Por ejemplo en este ejemplo para tocar todas las respuestas deberia generarse un TXT con las siguientes secuencias




/Y/Y/Y/Y/Y/ Primera secuencia




/N/ Segunda Secuencia


/Y/N/N/ Tercera Secuencia
/Y/Y/N/ Cuarta Secuencia
/Y/Y/Y/Y/N Quinta Secuencia

Le estoy adjuntando una imagen donde le muestro cada una de las partes que tocan cada una de la secuencias en el documento para que tenga una idea del recorrido necesario que hay que hacer en el documento para generar cada una de las secuencias para asi poder cubrir todo el documento.

La idea es generar en ese mismo sentido la entrada para la siguiente aplicacion.


Otra vez, se qeu es algo complejo, pero hay un patron claro a seguir, Cada Pregunta [Q lleva Respuesta :Yes or :No y cada Respuesta lleva a un Go_To o a otra Pregunta [Q que a la vez tiene una respuesta :Yes or :No.



Gracias nuevamente.
Jose

macropod
11-21-2017, 06:20 PM
No solo parece ser una tarea compleja, sino que también parece haber algunas lagunas en las especificaciones. Por ejemplo, su documento tiene:
[DR (Received_Materials_SP: No) Entiendo [Go_To Salir SP]]
pero no hay una entrada correspondiente para:
[DR (Received_Materials_SP: Yes)

Del mismo modo, tienes:
[R (Puedo_Continuar_SP: Yes) Que Bueno. [Q (Necesita_Ayuda_SP) Necesita ayuda?
pero nada equivalente para:
[R (Puedo_Continuar_SP: No)

En última instancia, desarrollar una macro para esto puede llevar más tiempo que hacer el trabajo manualmente.

jabe00
11-21-2017, 07:45 PM
No solo parece ser una tarea compleja, sino que también parece haber algunas lagunas en las especificaciones. Por ejemplo, su documento tiene:
[DR (Received_Materials_SP: No) Entiendo [Go_To Salir SP]]
pero no hay una entrada correspondiente para:
[DR (Received_Materials_SP: Yes)

Del mismo modo, tienes:
[R (Puedo_Continuar_SP: Yes) Que Bueno. [Q (Necesita_Ayuda_SP) Necesita ayuda?
pero nada equivalente para:
[R (Puedo_Continuar_SP: No)

En última instancia, desarrollar una macro para esto puede llevar más tiempo que hacer el trabajo manualmente.


Estas en lo correcto el documento tenia unos cuantos errores, los cuales arregle y a la vez hize algunas modificaciones para que puedas leerlo con mas facilidad.

Dejame saber si encuentras cualquier otro error.


Gracias por tu ayuda, realmente asi es que lo hago en la actualidad, manualmente, este documento atachado solo tiene 1 pagina, pero en el dia a dia trabajo con documentos que tienen a veces hasta 40 paginas con la misma secuencia Preguntas, Respuestas y Go_To, lo unico que varia son los nombres, por eso pense que no era algo tan dificil y por eso me anime a pedir ayuda.

Entiendo que tal vez es mucho trabajo y se complica mucho mas al no poder trabajar con un documento real, el cual se hace todavia mas complicado, por eso quiero que sepas que agradezdo de manera infinita la ayuda que me prestas.

No te sientas obligado a ayudarme, al yo no tener ningn conocimiento hacerca de lo que se debe hacer, te agradeceria si me puedes poner en la direccion correcta.


Gracias anticipadas.

macropod
11-22-2017, 03:50 PM
Lo siento, pero esta sería una tarea muy compleja, por lo que debes considerar contratar a un programador. En su primera página solo, podría tener estas 8 combinaciones:
/N
/ Y / Y / N
/ Y / Y / Y / N
/ Y / Y / Y / Y / Y
/ Y / Y / Y / Y / N
/ Y / N / Y / N
/ Y / N / Y / Y / Y
/ Y / N / Y / Y / N
y dices que tienes 40 páginas ...

jabe00
12-01-2017, 02:39 PM
Lo siento, pero esta sería una tarea muy compleja, por lo que debes considerar contratar a un programador. En su primera página solo, podría tener estas 8 combinaciones:
/N
/ Y / Y / N
/ Y / Y / Y / N
/ Y / Y / Y / Y / Y
/ Y / Y / Y / Y / N
/ Y / N / Y / N
/ Y / N / Y / Y / Y
/ Y / N / Y / Y / N
y dices que tienes 40 páginas ...


Muchas gracias Paul por tu ayuda, si, se que es algo complejo, pero queria ver si era posible hacer algo.

Con relacion a contratar a un programador, pues realmente no es posible pues practicamente soy el unico que trabaja con ese tipo de documentos. Y hablando de esos documentos realmetne no son tan grandes asi todo el tiempo y ademas creo que el tamaño no deberia importar cuanto se pueda obtener la secuencia pues entiendo que seguiria leyendo mientras encuentre un Go_to.


En cuanto a las diferencias combianaciones que encontraste croe que tal vez no me explique bien, pues se deberia pensar en ese contenido como si fuera una carretera de una via, cuando eligues una ruta deberias seguirl hasta el final, luego entonces eliges otra ruta y asi hasta agotar tosas las posibles rutras, pero es una ruta a la vez y cuando terminas esa debe selecionar otra ruta y asi.


Muchas Gracias por tu tiempo,

Realmente te agradeceria si puedes ponerme en el camino correcto haceca de que deberia estudiar y/o aprender para ver si puedo tratar de hacer yo mismo dicho sub, podrias?


Hay una secuencia que es comun en todos los archivos que son:

[Q Precedido de una Pregunta
:Yes Que seria una de las posibles respuesta a la pregunta
:No Otra posible respuesta a la pregunta.
Go_To Indica hacia donde debes dirigirte basado en tu respuesta

El cual toda [Q viene siempre con un :Yes y un :No y cada uno de esos es precedido de un Go_To que indica donde vas al responder :Si o :No, que normamente va hacia otra [Q Pregunta.

Osea, hay un patron a seguir el cual se repite hasta finalizar el documento..


Si fuerea posible buscar y almacenar el :Yes y luego al final de ese parrafo buscar el Go_To que tiene al lado hacia donde debes ir como este [Go_To Necesita_Ayuda_SP]]
que te dice que ahora debes dirigirte hacia Necesita_Ayuda_SP donde ahi se repite lo mismo, tienes otra pregunta [Q con dos respuesta :Yes que a su vez tendra otro Go_To para ir a otro lugar despues de ahi. Luego es repetir lo mismo, pero en este caso usando :No


Gracias!
Jose