Problema Botón-Asignar Macro

Buenos días.
Tengo un problemilla con un botón. Yo le asigno una macro de manera manual con el botón derecho, para que al pulsar dicho botón actúe la macro.
Cuando copio y pego la hoja donde se encuentra ese botón tengo ya dos hojas, con dos botones, pero los dos apuntan a la misma macro, y no cada botón a la macro de su hoja respectiva.
¿Cuál sería el código para asignarle a un botón una macro determinada?
Gracias.

1 respuesta

Respuesta
1
Todo dependerá de qué botón utilizaste: si de Cuadro de controles (ActiveX) o de Formularios.
(En la sección Macros de mi sitio encontrarás las diferencias y modos de asignarle rutinas)
Estando en modo diseño, al copiar la hoja se copiarán los botones. Pero el de barra Formularios se irá con la misma rutina, en cambio el control Activex te colocará una rutina en cada hoja que empieza con:
Private Sub CommandButton1_Click()
End Sub
Confírmame cuál es tu caso y cómo lo resolverás.
Mi caso.
Yo tengo una simple autoforma, donde dándole al botón derecho le asigno una macro. En este caso: 'PRODUCCIÓN.xls'!Hoja7. Botón
Cuando copio y pego la Hoja 7, se me crea la Hoja 8. Con copia de ese botón, que sigue apuntando a: 'PRODUCCIÓN.xls'!Hoja7. Botón
Y me gustaría que apuntara a: 'PRODUCCIÓN.xls'!Hoja8. Botón
Espero haberme explicado ;)
Tal como te anticipé en respuesta anterior, con ese tipo de objetos se copian junto con sus rutinas.
La solución sería que tengas el botón original asociado a una rutina común que luego se copiará en todas las hojas .
Esta macro solo evalúa desde qué hoja ha sido llamada o qué botón ha sido presionado. Y según esto se ejecuta cada macro en particular.
Este es un ejemplo muy básico como para que tengas una idea.
----------------------
Sub macroGral()
'desarrollada por Elsamatilde (ver*)
If ActiveSheet.Index = 1 Then
Call macro1
ElseIf ActiveSheet.Index = 2 Then
Call macro2
Else
Call macro3
End If
End Sub
'-----------------
Sub macro1()
MsgBox ("Estás en hoja1")
End Sub
Sub macro2()
MsgBox ("Estás en hoja2")
End Sub
Sub macro3()
MsgBox ("Estás en hoja3")
End Sub
-------------------------
*) Si serán muchas las hojas podés reemplazar los IF por Select Case (ver ejemplos en la Ayuda del Editor)
**)  En lugar de Index podés utilizar Name, evaluando el nombre de cada hoja
If activesheet.name = "Hoja2" Then

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas