Macro avanzada

28/05/2008 - 15:55 por Merillas | Informe spam
Hola,
tengo que realizar una macro en un word para en basea unos campos(si/no)
generar un excel que coge sus datos a su vez de otro excel. Es la primera vez
que uso macros y la información que encuentro es demasiado básica, alguien
podría encaminarme un poquito?? Si ademas puede pasarme algún enlace
preferiblemente en español seria la leche.
Gracias or todo, un saludo.

Preguntas similare

Leer las respuestas

#6 Fabio Ayala
05/09/2008 - 17:15 | Informe spam
El proceso es el siguiente:

De una lista de items que manda un colaborador, consistentes en código de
productos y su respectivo numero de serie en excel (dos columnas) obtengo con
copiar y pegar los numeros de serie, insertandolos en una celda de una tabla
de word, pegando solo el texto, lo que me arroja que a cada cambio de celda
tenga un codigo de fin de linea y si son 500 series, me da un listado de 500
lineas.

La macro hace lo siguiente: genera lineas de 5 numeros de serie mediante la
eliminación del caracter de fin de linea y la adición de una coma y un
espacio, desplazandose hacia la linea de abajo y repitiendo el proceso las
veces que ejecute la macro, que para el caso siendo una que maneja 10 lineas
de 5 series, se debe de ejecutar 10 veces.

El asunto es que esto es una mini automatización. Lo ideal seria que esta
macro se repitiera autonomamente una vez puesta en ejecución mediante un
bucle, hasta en tanto no detecte que no hay mas numeros de serie. Lo anterior
implica que si en la ultima linea no hay cinco, sino dos series (que seria el
caso si fueran 502 y no 500 series), esa linea sea entonces de dos numeros de
serie, con su respectiva coma y espacio.



Viviendo una nueva oportunidad de vivir la vida.


"Monica May" wrote:

hola fabio,

podrias ponernos un ejemplo >>

de como tienes los datos en la tabla de word y

del resultado que quieres obtener en la tabla ...

No entiendo que necesitas hacer :( !!

Comentanos!!!

Saludos
Monica


> Sub EliminaFinalesParrafo5()
> '
> If ActiveWindow.View.SplitSpecial = wdPaneNone Then
> ActiveWindow.ActivePane.View.Type = wdNormalView
> Else
> ActiveWindow.View.Type = wdNormalView
> End If
>
> Selection.HomeKey Unit:=wdLine
> Selection.EndKey Unit:=wdLine
> Selection.TypeText Text:=", "
> Selection.EndKey Unit:=wdLine
> Selection.Delete Unit:=wdCharacter, Count:=1
> Selection.EndKey Unit:=wdLine
> Selection.TypeText Text:=", "
> Selection.EndKey Unit:=wdLine
> Selection.Delete Unit:=wdCharacter, Count:=1
> Selection.EndKey Unit:=wdLine
> Selection.TypeText Text:=", "
> Selection.EndKey Unit:=wdLine
> Selection.Delete Unit:=wdCharacter, Count:=1
> Selection.EndKey Unit:=wdLine
> Selection.TypeText Text:=", "
> Selection.EndKey Unit:=wdLine
> Selection.Delete Unit:=wdCharacter, Count:=1
> Selection.MoveDown Unit:=wdLine, Count:=1
> Selection.HomeKey Unit:=wdLine
>
> End Sub
>
>ancho similar a la que se le eliminan los
> fines de linea para generar columnas en texto plano se encuentran dentro
> de
> una celda y en algunas ocasiones se trata de mas de 500 datos.
> generar un ciclo con esta informacion de tal manera que
> detecte cuando ha llegado al final de la celda de la tabla en WORD 2007 y
> en
> ese momento pare. para evitar estar pulsando el numero de veces que
> sea
> necesario (lo tengo en versiones de 5, 10, 20 y 50 lineas y tengo que
> contar
> para saber cual combinacion utilizar, por ejemplo: en 512 lineas de 5
> datos,
> utilizo el de 50 10 veces, una vez el de 10 y una el de cinco y luego le
> doy
> a la tecla deshacer (3 veces) hasta que aparece la información en la
> celda.


Respuesta Responder a este mensaje
#7 Fabio Ayala
05/09/2008 - 17:21 | Informe spam
Ejemplo.

serie1
serie2
serie3
serie4
serie5
serie6
serie7 (este ultimo numero de serie es el final de la celda de la tabla de
word)
...

y queda así:
serie1, serie2, serie3, serie4, serie5
serie6, serie7

Es necesario que quede en texto sin formato y lo ideal sería que pueda yo
determinar cuantas columnas (si los numeros de serie tienen un estandar de
menos o mas de 10 caracteres, eso me permitiría agregar o disminuir el numero
de columnas de texto plano que se obtienen, dentro del limite de 60
caracteres que tengo ¿Porque? simple y sencillamente tengo que copiar este
texto plano obtenido en el editor de otro programa que tiene un ancho de 60
caracteres.

Viviendo una nueva oportunidad de vivir la vida.


"Monica May" wrote:

hola fabio,

podrias ponernos un ejemplo >>

de como tienes los datos en la tabla de word y

del resultado que quieres obtener en la tabla ...

No entiendo que necesitas hacer :( !!

Comentanos!!!

Saludos
Monica


> Sub EliminaFinalesParrafo5()
> '
> If ActiveWindow.View.SplitSpecial = wdPaneNone Then
> ActiveWindow.ActivePane.View.Type = wdNormalView
> Else
> ActiveWindow.View.Type = wdNormalView
> End If
>
> Selection.HomeKey Unit:=wdLine
> Selection.EndKey Unit:=wdLine
> Selection.TypeText Text:=", "
> Selection.EndKey Unit:=wdLine
> Selection.Delete Unit:=wdCharacter, Count:=1
> Selection.EndKey Unit:=wdLine
> Selection.TypeText Text:=", "
> Selection.EndKey Unit:=wdLine
> Selection.Delete Unit:=wdCharacter, Count:=1
> Selection.EndKey Unit:=wdLine
> Selection.TypeText Text:=", "
> Selection.EndKey Unit:=wdLine
> Selection.Delete Unit:=wdCharacter, Count:=1
> Selection.EndKey Unit:=wdLine
> Selection.TypeText Text:=", "
> Selection.EndKey Unit:=wdLine
> Selection.Delete Unit:=wdCharacter, Count:=1
> Selection.MoveDown Unit:=wdLine, Count:=1
> Selection.HomeKey Unit:=wdLine
>
> End Sub
>
>ancho similar a la que se le eliminan los
> fines de linea para generar columnas en texto plano se encuentran dentro
> de
> una celda y en algunas ocasiones se trata de mas de 500 datos.
> generar un ciclo con esta informacion de tal manera que
> detecte cuando ha llegado al final de la celda de la tabla en WORD 2007 y
> en
> ese momento pare. para evitar estar pulsando el numero de veces que
> sea
> necesario (lo tengo en versiones de 5, 10, 20 y 50 lineas y tengo que
> contar
> para saber cual combinacion utilizar, por ejemplo: en 512 lineas de 5
> datos,
> utilizo el de 50 10 veces, una vez el de 10 y una el de cinco y luego le
> doy
> a la tecla deshacer (3 veces) hasta que aparece la información en la
> celda.


Respuesta Responder a este mensaje
#8 Fabio Ayala
05/09/2008 - 17:29 | Informe spam
Oye, por cierto, si observas lo primero que hace la macro es asegurarse que
la vista sea de borrador, no la de diseño de pagina.

Esto es particularmente util por lo siguiente: cuando se empieza a ejecutar
la macro en PC'S de poca capacidad de hardware, la vista en diseño de pagina
hace que la macro brinque. Lo corregí cambiando a vista de borrador. Desde
luego pude haber deshabilitado el refresco de pantalla y rehabilitarlo al
final, pero bueno, a cierto nivel de usuarios les encanta ver el desarrollo
de la macro y no ver el antes y el despues. Osea, les gusta el desarrollo de
la magia, no las desapariciones y apariciones... jejejejeje.
Viviendo una nueva oportunidad de vivir la vida.


"Fabio Ayala" wrote:

Ejemplo.

serie1
serie2
serie3
serie4
serie5
serie6
serie7 (este ultimo numero de serie es el final de la celda de la tabla de
word)
...

y queda así:
serie1, serie2, serie3, serie4, serie5
serie6, serie7

Es necesario que quede en texto sin formato y lo ideal sería que pueda yo
determinar cuantas columnas (si los numeros de serie tienen un estandar de
menos o mas de 10 caracteres, eso me permitiría agregar o disminuir el numero
de columnas de texto plano que se obtienen, dentro del limite de 60
caracteres que tengo ¿Porque? simple y sencillamente tengo que copiar este
texto plano obtenido en el editor de otro programa que tiene un ancho de 60
caracteres.

Viviendo una nueva oportunidad de vivir la vida.


"Monica May" wrote:

> hola fabio,
>
> podrias ponernos un ejemplo >>
>
> de como tienes los datos en la tabla de word y
>
> del resultado que quieres obtener en la tabla ...
>
> No entiendo que necesitas hacer :( !!
>
> Comentanos!!!
>
> Saludos
> Monica
>
>
> > Sub EliminaFinalesParrafo5()
> > '
> > If ActiveWindow.View.SplitSpecial = wdPaneNone Then
> > ActiveWindow.ActivePane.View.Type = wdNormalView
> > Else
> > ActiveWindow.View.Type = wdNormalView
> > End If
> >
> > Selection.HomeKey Unit:=wdLine
> > Selection.EndKey Unit:=wdLine
> > Selection.TypeText Text:=", "
> > Selection.EndKey Unit:=wdLine
> > Selection.Delete Unit:=wdCharacter, Count:=1
> > Selection.EndKey Unit:=wdLine
> > Selection.TypeText Text:=", "
> > Selection.EndKey Unit:=wdLine
> > Selection.Delete Unit:=wdCharacter, Count:=1
> > Selection.EndKey Unit:=wdLine
> > Selection.TypeText Text:=", "
> > Selection.EndKey Unit:=wdLine
> > Selection.Delete Unit:=wdCharacter, Count:=1
> > Selection.EndKey Unit:=wdLine
> > Selection.TypeText Text:=", "
> > Selection.EndKey Unit:=wdLine
> > Selection.Delete Unit:=wdCharacter, Count:=1
> > Selection.MoveDown Unit:=wdLine, Count:=1
> > Selection.HomeKey Unit:=wdLine
> >
> > End Sub
> >
> >ancho similar a la que se le eliminan los
> > fines de linea para generar columnas en texto plano se encuentran dentro
> > de
> > una celda y en algunas ocasiones se trata de mas de 500 datos.
> > generar un ciclo con esta informacion de tal manera que
> > detecte cuando ha llegado al final de la celda de la tabla en WORD 2007 y
> > en
> > ese momento pare. para evitar estar pulsando el numero de veces que
> > sea
> > necesario (lo tengo en versiones de 5, 10, 20 y 50 lineas y tengo que
> > contar
> > para saber cual combinacion utilizar, por ejemplo: en 512 lineas de 5
> > datos,
> > utilizo el de 50 10 veces, una vez el de 10 y una el de cinco y luego le
> > doy
> > a la tecla deshacer (3 veces) hasta que aparece la información en la
> > celda.
>
>
Respuesta Responder a este mensaje
#9 Monica May
06/09/2008 - 00:00 | Informe spam
Holas !!

Bien vamos por partes :) !

Primero y lo mas importante es el pegado en una celda de Word desde Excel
...

Me explico .. Imagino que se hara un pegado especial desde Excel hacia Word
??

Si se pega con pegado especial como en texto sin formato o texto plano...
Pueden crearse dos tipos de marcas en Word >>

-> Serie1[salto de linea manual] y asi con todos las Series una debajo de
otra

o bien ...

-> Serie1[marca de parrafo] idem...

Bien Esto te lo comento por el codigo que te ofrecere a continuacion >>

Bien el siguiente codigo te creara OJO >> Lo que selecciones amos *Es
obligado* a que selecciones aquellos datos que quieras separar con comas o
te realizara todo el documento ya que realizara una busqueda [ a lo
seleccionado] y reemplazara por [ , ] >>

'[]

Sub Macro5()

With Selection.Find
.ClearFormatting
.Text = "^p"
With .Replacement
.ClearFormatting
.Text = ", "
End With
.Execute Replace:=wdReplaceAll
End With
End Sub

'[]

Bien esta linea de codigo >>

.Text = "^p"

es la clave para que haga el codigo lo que queremos que haga valga la
redundancia :P o rebuznancia la mia :P !

Bien esa lienea busca las marcas de parrafo [ si ves que con esa linea no
hace nada es que tendras que sustitiuir por esta >>

.Text = "^l"

No obstante puedes ver que marcas tienen desde el boton [Mostrar todo una P
al reves, que lo encontraras en el grupo de botones >> Parrafo [de la
pestaña o ficha] >> Inicio]

Bien eso por un lado ...


Luego para dejar el documento en vista de Borrador o Vista Normal puedes
probar esta otra linea de codigo >>

ActiveDocument.ActiveWindow.View.Type = wdNormalView

Luego esta otra linea de codigo >>


Selection.PasteAndFormat (wdFormatPlainText)

Hace un pegado en texto sin formato o texto plano *asegurandote* un pegado
con [marcas de parrafo ]

Bueno prueba hasta aqui y si quieres anadir o modificar o cualuqier duda ...
comentanos..:) !

Saludos
Monica




.macro es asegurarse que la vista sea de borrador [vista modo normal]
util por lo siguiente: cuando se empieza a ejecutar
la macro en PC'S de poca capacidad de hardware, la vista en diseno de
pagina
hace que la macro brinquecorregi cambiando a vista de borrador
deshabilitado el refresco de pantalla y rehabilitarlo al final..
... encanta ver el desarrollo
de la macro y no ver el antes y el despues.gusta el desarrollo de
la magia..



serie1
serie2
serie3
serie4
serie5
serie6
serie7 (este ultimo numero de serie es el final de la celda de la tabla de
word)
y queda asi:
serie1, serie2, serie3, serie4, serie5
serie6, serie7


quede en texto sin formato y lo ideal sería que pueda yo
determinar cuantas columnas (si los numeros de serie tienen un estandar de
menos o mas de 10 caracteres, eso me permitiría agregar o disminuir el
numero
de columnas de texto plano que se obtienen, dentro del limite de 60
caracteres que tengo Porque? simple y sencillamente tengo que copiar este
texto plano obtenido en el editor de otro programa que tiene un ancho de 60
caracteres.
Respuesta Responder a este mensaje
#10 Monica May
06/09/2008 - 00:42 | Informe spam
Oh tambien el siguiente codigo para la seleccion que decidas [
idependientemente tenga marcas de parrafo o bien saltos manuales ] >>

Para versiones de office 2000 en adelante >>

'[]

Sub demo()
Dim texto As String
texto = Selection.Text
texto = Replace(texto, Chr(13), ", ")
Selection.Text = texto
End Sub


'[]

Seleccionas los datos y ejecutas el codido ...

Comentanos...!!!

Saludos
Monica
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida