Macro copia pega que no funciona

12/12/2006 - 00:55 por Mk | Informe spam
Buenas!

Para algunos de vosotros la siguiente consulta será muy sencilla pero es
algo que no logro solucionar, a ver si me podeis ayudar.

Tengo una macro tal que:

Private Sub CommandButton30_Click()

Worksheets(1).Visible = True

Workbooks.Open Filename:="F:\DIRECTORIO\LISTADOS\5024.xls"
ActiveWorkbook.Sheets(Array(2)).Select
ActiveSheet.Activate
Range("E2", "F15000").Select
Selection.Copy

Windows("Plantilla_act_news_BETA 3.xls").Activate
ActiveWorkbook.Sheets("Matriz").Activate
ActiveSheet.Paste Destination:=Worksheets("Matriz").Range("A2")

Application.DisplayAlerts = False
Workbooks("5024.XLS").Close SaveChanges:=False

ActiveSheet.Visible = False
End Sub


Cuando estaba creando la macro todo ok, cierro el libro, lo guardo y al
abrirlo de nuevo para probar la macro me da error. ¿Alguna idea o ejemplo?.

Muchas gracias.

Mk

Preguntas similare

Leer las respuestas

#1 Ivan
12/12/2006 - 01:32 | Informe spam
hola Mk, mira aver si te vale esto (no estoy del todo seguro)

Private Sub CommandButton30_Click()
Workbooks.Open Filename:="F:\DIRECTORIO\LISTADOS\5024.xls"
Sheets(Array(2)).Range("E2", "F15000").Copy _
Workbooks("Plantilla_act_news_BETA
3.xls").Workheets("Matriz").Range("A2")
Application.DisplayAlerts = False
Workbooks("5024.XLS").Close SaveChanges:=False
Application.DisplayAlerts =true
End Sub

un saludo y hasta pronto
Ivan

PD: aviso: esto te copiaria todo, incluidos formatos.

por cierto, en la macro tienes varios errores/redundancias (aunque yo
no sabre explicartelos muy bien)->

ActiveSheet.Activate ->>> estas activando la hoja activa (ya activa).



Ademas no es necesario (al menos normalmente que yo sepa) activar
hojas, rangos, etc, para trabajar con ellas

Windows("Plantilla_act_news_BETA 3.xls").Activate
ActiveWorkbook.Sheets("Matriz").Activate



un poco de lo mismo de antes , pero con mas galimatias ¿usas 'windows'
por algun motivo especial? si no es asi te valdria con workbooks
(creo).

ActiveSheet.Paste Destination:=Worksheets("Matriz").Range("A2")



aqui, si no me equivoco, estas pegando la hoja activa, que es "Matriz"
en la hoja "Matriz" ??

¿y el motivo de hacerla visible? si no me equivoco no es necesario
para esta situacion.

lamento no poder/saber explicarte mucho mas, pero segun voy escribiendo
a mi mismo me entran las dudas

de todas formas creo que le macro modificada deberia funcionar

con lo que sea comentas, un saludo de nuevo
Respuesta Responder a este mensaje
#2 Ivan
12/12/2006 - 01:46 | Informe spam
disculpa Mk , pero acabo de ver otro de los errores que tenias

Sheets(Array(2)).Range("E2", "F15000").Copy -> el rango (Range("E2",
"F15000") ->

esta mal 'redactado' -> deberia ser -> Range("E2:F15000") (de nuevo
creo)

en cuanto a array(2), supongo que tienes una matriz con los nombres de
las hojas y esta se corresponde con el elemento 2º o 3º, no se si es
valida esta forma, pero por lo que yo llevo visto, si lo que estas
utilizando es la funcion Array, lo normal es asignar a una variable una
serie de elementos con la funcion 'Array' (pej:->

dim miMatriz as variant
miMatriz = Array("Hoja1", "Hoja2", "Hoja3")

aqui (y dependiendo de option base, creo) -> miMatriz(2) = "Hoja3"

bueno no me hagas mucho caso,
Respuesta Responder a este mensaje
#3 Ivan
12/12/2006 - 03:14 | Informe spam
hola de nuevo Mk,

disculpame, pero cada vez que intento ayudar, acabo metiendo la pata
unas cuantas veces, liando la cosa mas que aclarandola y mandando
tropecientos mil mensajes rectificandome a mi mismo

la macro a mi me funciona bien (aunque al final te la pongo un poco
depurada)

pero en lo que se refiere a mis consejos hay mas de un gazapo que te
comento ->

Windows("Plantilla_act_news_BETA 3.xls").Activate
ActiveWorkbook.Sheets("Matriz").Activate




aqui solo dejaria esto->

¿usas 'windows' por algun motivo especial? si no es asi te valdria con
workbooks
(creo).

ActiveSheet.Paste Destination:=Worksheets("Matriz").Range("A2")



aqui no dejaria nada, he dicho una burrada, Esta ->

(aqui, si no me equivoco, estas pegando la hoja activa, que es "Matriz"
en la hoja "Matriz" ??)

-> no me hagas ni caso

y en cuanto a esto ->

Sheets(Array(2)).Range("E2", "F15000").Copy -> el rango (Range("E2",
"F15000") -> esta mal 'redactado' -> deberia ser ->
Range("E2:F15000") (de nuevo
creo)

no se porque he pensado que querias copiar el rango completo
[e2:f15000], pero supongo que solo quieres pegar las dos celdas [e2] y
[f15000]. Lo mismo de antes, no me hagas ni caso

en cuanto a la matriz supongo que sera una matriz a la que llamas
'array' y punto. Lo mismo, no me hagas ni caso.

un saludo y disculpa el/los (embr)rollo/s.

A continuacon te pongo la macro que a mi me funciona bien (aunque
seguro que es notablemente mejorable)

un saludoy hasta pronto
Ivan

'*******************************
Private Sub CommandButton30Click()
Workbooks.Open Filename:="F:\DIRECTORIO\LISTADOS\5024.xls"
Sheets(Array(2)).Range("E2", "F15000").Copy _
Workbooks("Plantilla_act_news_BETA 3.xls") _
.Worksheets("Matriz").Range("A2")
Application.DisplayAlerts = False
Workbooks("5024.xls").Close False
Application.DisplayAlerts = True
End Sub

'*************************************************
'''para el caso de que la macro este en el libro de la hoja "Matrices"
'
Private Sub CommandButton30_Click()
Workbooks.Open Filename:="F:\DIRECTORIO\LISTADOS\5024.xls"
Sheets(Array(2)).Range("E2", "F15000").Copy _
ThisWorkbook.Worksheets("Matriz").Range("A2")
Application.DisplayAlerts = False
Workbooks("5024.xls").Close False
Application.DisplayAlerts = True
End Sub

'*****************************************
'''usando Paste, como en tu ejemplo
'-
Private Sub CommandButton30_Click()
Workbooks.Open Filename:="F:\DIRECTORIO\LISTADOS\5024.xls"
Sheets(Array(2)).Range("E2", "F15000").Copy
With ThisWorkbook.Worksheets("Matriz")
.Paste .Range("A2")
End With
Application.DisplayAlerts = False
Workbooks("5024.xls").Close False
Application.DisplayAlerts = True
End Sub
Respuesta Responder a este mensaje
#4 Mk
12/12/2006 - 22:13 | Informe spam
Hola Iván!

Muchísimas gracias por tu interés sobre todo por tu ayuda.
Efectivamente, tal y como comentas tenía numerosos errores en la macro
pero incluso con el código "depurado" que tu expones no me funciona.

Lo único que he cambiado respecto al código que comentas es que
realmente mi intención es copiar el rango "E2:F15000" y no las dos
celdas como parecía indicar en el código que expuse inicialmente.

Lo que ocurre cuando ejecuto la macro es que se abre el fichero llamado
"5024" e inmediatamente después me "salta" un error "438 en tiempo de
ejecución" y me señala como causa del error la siguiente parte del código:

Sheets(Array(2)).Range("E2:F15000").Copy _
Workbooks("Plantilla_act_news_BETA 3.xls") _
.Worksheets("Matriz").Range("A2")

Voy a fijarme un poco más y hacer algún cambio en el código para ver si
logro hacerla funcionar ok.

Lo dicho, muchas gracias de nuevo.

Mk.
Respuesta Responder a este mensaje
#5 Ivan
12/12/2006 - 23:26 | Informe spam
hola Mk

a mi me funcionan los tres codigos sin ningun problema.

Por lo que he visto, el error 438 es que 'El objeto no admite esta
propiedad o metodo'

., y, en este caso, si todos los datos que has introducido sobre la
direccion de los libros y hojas es correcta, no deberia de darse,

salvo si lo que estas intentando pegar es un grafico, en cuyo caso no
tengo ni idea, pues no he trabajado con ninguno en mi vida.

de todas formas, si sigue dandote el error tras revisar bien todo,
prueba a cambiar donde pone worksheets por sheets, y a la inversa
(aunque no creo que tenga que ver)

tambien puedes exponer la matriz 'Array()', a ver como la tienes
asignada/configurada

ten en cuenta que, dependiendo de como tengas asignado Option Base
(echa un vistazo con F1 si no lo controlas), los limites de una matriz
pueden ir:->

de 0 <indice del 1er elemento> a ->>(nº de elementos - 1) <indice
del ultimo elemento>

o bien ir desde 1 al numero total de elementos.

pej. miMatriz=("a", "b", "c", "d")

si Option Base es 0 -->miMatriz(1)="b" -> miMatriz(3)="d"

si Option Base es 1 -> miMatriz(1)="a" -> miMatriz(3)="c"

bueno, no se si te aclara algo, o si tiene algo que ver, pero si sigues
teniendo el error, vuelve a consultar, a ser posible concretando estos
datos (array, graficos,..., y los que pienses que podrian influir.), y
si yo no se, seguro que hay alguien mas que te echa una mano

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida