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.
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 ]
------------------------
"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.
>
>
>
>
>
>
>
>> 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? :-)
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ó:
> 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
Muchas gracias.
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.
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
'[]
Muchas gracias por los comentarios.
Un saludo