Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Macro para pegar rangos Excell

450 views
Skip to first unread message

violeta

unread,
Oct 15, 2007, 4:36:00 AM10/15/07
to
Hola a todos, os cuento lo que me pasa:

Al ejecutar una macro que pega o que vincula distintos rangos de excell a un
documento de word, la ejecuta pegando o vinculando solamente el último rango
marcado. El código que genera la macro es siguiente:


Sub Macro1()
'
' Macro1 Macro
' Macro grabada el 15/10/2007
'
Selection.MoveDown Unit:=wdLine, Count:=71
Selection.MoveUp Unit:=wdLine, Count:=12
Selection.PasteExcelTable False, False, False
Selection.MoveDown Unit:=wdLine, Count:=83
Selection.PasteExcelTable False, False, False
Selection.MoveDown Unit:=wdLine, Count:=78
Selection.PasteExcelTable False, False, False
Selection.MoveDown Unit:=wdLine, Count:=2
End Sub


Gracias, espero me podais ayudar.

Tux

unread,
Oct 15, 2007, 10:07:41 AM10/15/07
to
Hola Violeta,

Pues se supone según el codigo que expones, que estas pegando en word
una tabla de excel de [ rangos o celdas ] que estan en el Clipboard o
portapapeles, [ osea se copiar y pegar ] y sin vincularlos.

Pero esto solo funcionara con el ultimo valor copiado , es decir que el
codigo siempre te tomara el ultimo valor del rango, celda ,tabla copiado
de excel para pegarlo en word , entonces....

Pregunto :

Necesitas traerte rangos de excel a word vinculados ?

Comentanos como tienes extruturado el documento de word para poder
importar esos datos de excel,


Comentanos ok? :)

Saludos
Monica


--

Estado: A la Espera By Fermu

Tic-Tac-Tic-Tac...

» Now We are free [Enya]
» United states of love [ Westbam and the love commitee ]

www.fermu.com

------------------------

violeta

unread,
Oct 16, 2007, 4:05:01 AM10/16/07
to

"Tux" escribió:

> Hola Mónica,

El documento Word en el que tengo que incluir determinados rangos de excell
es el resultante de una combinación, y por eso había pensado en una macro,
para ejecutarla una vez obtenido el documento final de la combinación, pero
mejor si se puede hacer con vínculos. Lo que ocurre es que al hacer la
combinación me genera un documento distinto, con lo cual tendría que volver a
insertar los vínculos.

Gracias por todo.

>
>
>
>
>
>
>

Tux

unread,
Oct 16, 2007, 8:15:12 AM10/16/07
to
Hola Violeta :-)


>> Hola Mónica,
>
> El documento Word en el que tengo que incluir determinados rangos de excell
> es el resultante de una combinación, y por eso había pensado en una macro,
> para ejecutarla una vez obtenido el documento final de la combinación, pero
> mejor si se puede hacer con vínculos. Lo que ocurre es que al hacer la
> combinación me genera un documento distinto, con lo cual tendría que volver a
> insertar los vínculos.
>
> Gracias por todo.

Bien prueba el siguiente codigo:

1- tendras que hacer referencia a la librería :

» Microsoft Excel Xx.0 Object Library [ donde » XX.0 dependera de tu
version de office ]

Para hacer referencia a la librería de excel:

Desde visual basic de word busca el menu :

menu » Herramientas » referencias , busca ahi la referencia

Microsoft Excel 11.0 Object Library

Y acepta.

Luego coloca el siguiente codigo en un modulo:

'[]

Sub rangos_excel_word()

Dim X As Excel.Application
Dim Y As Excel.Workbook
Dim problems As Boolean

On Error Resume Next

Set X = GetObject(, "Excel.Application")

If Err Then
problems = True
Set X = New Excel.Application
End If

On Error GoTo 0

Set Y = X.Workbooks.Open _
("G:\Documents and Settings\Monica\Escritorio\dos.xls")

Y.Sheets("hoja1").Range("a1:a10").Copy
Selection.PasteExcelTable False, False, False

X.Quit

Set Y = Nothing:
Set X = Nothing

End Sub

'[]


Luego es mejor que definas nombres en excel a las celdas de excel que
quieras traerte , por ejemplo seleccionas las celdas en excel las cuales
quieres traerte y les defines nombre y le pones por ejemplo: "lunes"
luego solo tendrias que cambiar en el codigo la siguiente linea:

Y.Sheets("hoja1").Range("a1:a10").Copy

Por:

Y.Sheets("hoja1").Range("lunes").Copy

Y si tienes que coger varios rangos se puede coger y añadir un inputbox
para coger diferentes rangos pero de momento prueba y nos comentas ok? :-)

violeta

unread,
Oct 25, 2007, 5:14:01 AM10/25/07
to
Hola Mónica,

He probado escribiendo el código que me dices y lo primero que hace es darme
un error de compilación al ejecutarlo

Dim X As Excel.Application
"Me dice que no se ha definido el tipo definido por el usuario"

Pero aparte no entiendo si para poner los distintos rangos debo añadir
tantas veces como rangos quiera copiar, la instruccion:
Y.Sheets("hoja1").Range("meses").Copy
Selection.PasteExcelTable False, False, False

para cada rango que quiera copiar. Y otra cosa, cómo le digo el lugar exacto
del documento Word donde quiero que me ponga cada rango.

Gracias

"Tux" escribió:

Tux

unread,
Oct 25, 2007, 3:44:26 PM10/25/07
to
Hola Violeta :-)

> Hola Mónica,
>

> He probado escribiendo el código que me dices y lo primero que hace es darme
> un error de compilación al ejecutarlo
>
> Dim X As Excel.Application
> "Me dice que no se ha definido el tipo definido por el usuario"
>
> Pero aparte no entiendo si para poner los distintos rangos debo añadir
> tantas veces como rangos quiera copiar, la instruccion:
> Y.Sheets("hoja1").Range("meses").Copy
> Selection.PasteExcelTable False, False, False
>
> para cada rango que quiera copiar. Y otra cosa, cómo le digo el lugar exacto
> del documento Word donde quiero que me ponga cada rango.
>
> Gracias
>

Bien ves al Editor de visual basic y busca el menu » herramientas »
Referencias y ahi busca :

Microsoft Excel 11.0 Object Library [ donde » XX.0 dependera de tu
> version de office ]

Si tienes Excel 2003 sera la referencia » Microsoft Excel 11.0 object
Library

si tienes el Excel 2002 entoces sera » Microsfot excel 10.0 object
library y ect.....

Lo seleccionas y aceptas :-)

Bien una vez tenemos eso ya podemos ejecutar el codigo con excel y
interactuar con el :-)

Bien te voy a pasar unos codigos » El primero te trae los datos mediante
un inputbox :

Ejecutas el codigo y te pide los rangos a poner [ puedes utilizar por
ejemplo » A1:A20 « o tambien puedes traerte los rangos si los has
definido como por ejemplo [ meses ] y te lo pegara alli donde tu tengas
el cursor :-)


'----el codigo -----

Sub rangos_input_word()

Dim x As Excel.Application


Dim Y As Excel.Workbook
Dim problems As Boolean

Dim Definido As String

On Error Resume Next

Set x = GetObject(, "Excel.Application")

If Err Then
problems = True

Set x = New Excel.Application
End If

On Error GoTo 0

Set Y = x.Workbooks.Open _
("c:\libro1.xls")
Definido = InputBox("Pon el rango que quieras pegar ")

Y.Sheets("hoja1").Range(Definido).Copy
Selection.PasteExcelTable False, False, False

x.Quit

Set Y = Nothing:
Set x = Nothing

End Sub

'-------fin del 1ºcodigo----------


Y el segundo codigo te trae los datos ya en el documento perooo tendras
que crear marcadores en el documento de word para que cuando se ejecute
el codigo sepa donde poner los datos :)

POr ejemplo pon en el documento dos marcadores y llamalos »

Uno y dos

y luego ejecuta el siguiente codigo :

'---segundo codigo ----

Sub rangos_excels_word()

Dim x As Excel.Application


Dim Y As Excel.Workbook
Dim problems As Boolean

On Error Resume Next

Set x = GetObject(, "Excel.Application")

If Err Then
problems = True

Set x = New Excel.Application
End If

On Error GoTo 0

Set Y = x.Workbooks.Open _
("c:\libro1.xls")
With Y.Sheets("hoja1")
.[A1:a10].Copy
Selection.GoTo What:=wdGoToBookmark, Name:="uno"
Selection.PasteAndFormat (wdPasteDefault)
.[martes].Copy
Selection.GoTo What:=wdGoToBookmark, Name:="dos"
Selection.PasteExcelTable False, False, False
End With

x.Quit

Set Y = Nothing:
Set x = Nothing

End Sub

'---fin del codigo ---------

Bueno y si cualquier problema o duda o demas ya sabes nos comentas :-) :-)

saludos

Pablo

unread,
Nov 2, 2007, 11:23:17 AM11/2/07
to
Hola Tux, como creo el marcador en word? Soy bastante nuevo con esto
del Visual Basic. Mi problema es parecido al que se expone.

Muchas gracias.

Pablo

unread,
Nov 2, 2007, 12:07:49 PM11/2/07
to
Hola de nuevo Tux

Te explico mi problemática. Tengo una plantilla de word en la que solo
cambian varios números, que calculo mediante una hoja de excel (con
sus respectivos cálculos y formulas). Esos datos los debería importar
desde excel a mi plantilla de word en varios sitios determinados.

He copiado los códigos de las macros que has puesto, pero al
ejecutarlo me dan fallos (que te pongo dentro del código). Lo he hecho
de prueba, solo con una casilla de excel.

Ya he visto donde crear marcadores. Ahora paso a explicarte el error
que me surge cuando ejecuto las macros.

Copio y pego todo lo que pones.

Sub rangos_input_word()

Dim x As Excel.Application
Dim Y As Excel.Workbook
Dim problems As Boolean
Dim Definido As String

On Error Resume Next

Set x = GetObject(, "Excel.Application")

If Err Then
problems = True
Set x = New Excel.Application
End If

On Error GoTo 0

Set Y = x.Workbooks.Open _

("c:\prueba.xls") ---------------------------------------------->
lo he cambiado para que abra ese archivo
Definido = InputBox("B3")------------------------------------->
también lo he cambiado

Y.Sheets("hoja1").Range(Definido).Copy
Selection.PasteExcelTable False, False, False

-----------------------> me da error en PasteExcelTable

x.Quit

Set Y = Nothing:
Set x = Nothing

End Sub

El segundo código no me da problemas de momento pero no importa nada
de nada.

Espero tu respuesta. Gracias de antemano.

Tux

unread,
Nov 2, 2007, 1:29:20 PM11/2/07
to
Pablo escribió:

> Hola de nuevo Tux
>
> Te explico mi problemática. Tengo una plantilla de word en la que solo
> cambian varios números, que calculo mediante una hoja de excel (con
> sus respectivos cálculos y formulas). Esos datos los debería importar
> desde excel a mi plantilla de word en varios sitios determinados.
>
> He copiado los códigos de las macros que has puesto, pero al
> ejecutarlo me dan fallos (que te pongo dentro del código). Lo he hecho
> de prueba, solo con una casilla de excel.
>
> Ya he visto donde crear marcadores. Ahora paso a explicarte el error
> que me surge cuando ejecuto las macros.
>
> Copio y pego todo lo que pones.
>
> Sub rangos_input_word()
>
> Dim x As Excel.Application
> Dim Y As Excel.Workbook
> Dim problems As Boolean
> Dim Definido As String
......


Bien Asegurate OJO que » la Celda B3 » Contenga datos o el commando
fallara ok? :-) NO obstante te paso el siguiente codigo que ya tiene
controlado ese error , añadiendole [ on error resume next ] no obstante
se podria controlar el error de coger celdas vacias sin datos desde
excel o bien tal cual te lo he puesto en el codigo de abajo o bien
poniendo algun msgbox :-)

No obstante prueba y comentanos cualquier error o modificacion del
codigo ok? :-)

Saludos
Monica


---- Nuevo Codigo ---------

'[]

Sub rangos_input_word()

Dim x As Excel.Application
Dim Y As Excel.Workbook
Dim problems As Boolean
Dim Definido As String

On Error Resume Next

Set x = GetObject(, "Excel.Application")

If Err Then
problems = True
Set x = New Excel.Application
End If

On Error GoTo 0

Set Y = x.Workbooks.Open _
("c:\prueba.xls")

Definido = InputBox("B3", "Introduccion de rangos", "B3")
If Definido = "" Then Exit Sub

Y.Sheets("hoja1").Range(Definido).Copy

On Error Resume Next
Selection.PasteExcelTable _
LinkedToExcel:=False, _
WordFormatting:=True, _
RTF:=True
x.Quit


Set Y = Nothing:
Set x = Nothing

End Sub

'[]

Pablo

unread,
Nov 5, 2007, 5:05:38 PM11/5/07
to
Al final use la combinacion de correspondencia de word para traerme
los datos de excel, utilizando este ultimo como "Base de Datos". Era
mas facil que la macro.

Muchas gracias por los comentarios.

Un saludo

0 new messages