Error de ejecución '1004': Clase de rango falla
Resuelto
Brainster
-
pilas31 Mensajes publicados 1878 Estado Colaborador -
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.
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
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:
En el código de tu botón, solo llama a esta macro. Tu código de botón se verá así:
Eso debería funcionar ...
A+
--
Cordialmente,
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,
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!
Marco el tema como resuelto.
Buena continuación.
--
Atentamente,