Error de ejecución '1004': Clase de rango falla

Resuelto
Brainster -  
pilas31 Mensajes publicados 1878 Estado Colaborador -
Bonjour,

soy principiante en programación de Excel y no puedo superar mi problema.

Aquí está la situación:
Tengo 2 archivos diferentes -Archivo1 y Archivo2.
En Archivo1 tengo un botón que va a ejecutar una serie de comandos en Archivo2.

Para construir el código del botón, me serví de una grabación de una macro.
Esta macro funciona muy bien cuando se ejecuta desde Archivo2. Pero cuando la ejecuto desde mi botón en Archivo1, ya no funciona y obtengo este error:
Error de ejecución '1004':
El método Select de la clase Range ha fallado.

Aquí está mi código:

Private Sub maj_Click()

Workbooks.Open Filename:= _
"P:\File1.xls"

If Range("M1") = "1" Then

Else

Rows("1:10000").Select
Selection.UnMerge

Range("M1").Select
ActiveCell.FormulaR1C1 = "1"
Range("C2:C10000").Select
Selection.Copy
Range("M2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("C2").Select
ActiveCell.FormulaR1C1 = "=IF(R1C13=1,CONCATENATE(""L"",RC[10]),RC[10])"
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C10000"), Type:=xlFillDefault
Range("A1").Select

End If

Windows("File2.xls").Activate
...
etc.. el resto es correcto.

El programa se detiene en "Rows("1:10000").Select"
Después intenté poner esa parte en comentario, pero el error ocurre después para el siguiente "Range" y así sucesivamente.

¿Tienes alguna idea?
¡Muchas gracias!

p.d. el archivo "File2" se eliminará y se actualizará con frecuencia por una nueva versión. Es una especie de pequeña base de datos actualizada manualmente.
Configuración: Windows XP Internet Explorer 7.0

3 respuestas

pilas31 Mensajes publicados 1878 Estado Colaborador 648
 
Hola,

Tu código está asociado al botón que se encuentra en la hoja, por lo que el problema debe venir de ahí (es el mismo problema que si la macro estuviera asociada a una hoja).

Así que te propongo la siguiente solución:

Desplaza todo tu tratamiento a un módulo de macro (en VBA, haciendo menú Insertar/módulo).
Llama a tu macro, por ejemplo, "Tratamiento".
En tu nuevo módulo, tendrás una macro que se parece a esto:

Sub Tratamiento() Workbooks.Open Filename:= _ "P:\File1.xls" If Range("M1") = "1" Then ... Else ... Rows("1:10000").Select Selection.UnMerge ... End Sub


En el código de tu botón, solo llama a esta macro. Tu código de botón se verá así:

Private Sub maj_Click() Call Tratamiento End Sub


Eso debería funcionar ...

A+

--
Cordialmente,
5
Brainster
 
Hola Pilas31,

Me has alegrado el día, la semana y también me has reconciliado con la programación en Excel. ¡Tu solución funciona de maravilla y ha resuelto mi problema!

No es fácil aprender esto solo y te agradezco tu ayuda. Es muy apreciada.
Intentaré ayudar a alguien de la comunidad a mi vez.

¡Gracias de nuevo y buena semana!
0
pilas31 Mensajes publicados 1878 Estado Colaborador 648 > Brainster
 
Gracias y bienvenido entre los ayudantes si decides hacerlo (puedes inscribirte)

Marco el tema como resuelto.

Buena continuación.

--
Atentamente,
0