Problema cuando copio un CommandButton a otras hojas

Buenas noches y de antemano muchas gracias.

Tengo un archivo con las siguientes Hojas. Una pestaña llamada datos y otra serie de hojas con numeraciones distintas (Hoja 1, Hoja 2, Hoja 3...)

En la hoja 1 tengo un botón asociado a una macro que cuando lo clickeas te sale un formulario como el que aparece en la imagen con 3 combobox dependientes uno de otro.

Cuando se añade los datos y se pulsa en el formulario aceptar añade el dato en la celda D7.

Mi problema es el siguiente. Cuando copio ese botón en las siguientes hojas (como en la hoja 2, hoja 3...) y sale el formulario y tras rellenarlo, clickeo sobre aceptar, me copia en la hoja 1 y no sobre la hoja que esta el botón y el formulario. ¿Alguna idea de como solucionarlo porque he probado muchos cambios y me e imposible solucionarlo.

Este es el código:

Private Sub ComboBox1_Enter()
'evitar flashes de pantalla
Application.ScreenUpdating = False
On Error Resume Next
ComboBox1.Clear
Hoja5.Select
Range("B9").Select
Do While Not IsEmpty(ActiveCell)
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loop

End Sub

Private Sub ComboBox2_Enter()
Application.ScreenUpdating = False
On Error Resume Next
ComboBox2.Clear
pais = ComboBox1.List(ComboBox1.ListIndex)

Cells.Find(what:=pais, lookat:=xlWhole).Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ComboBox2.AddItem ActiveCell
ActiveCell.Offset(0, 1).Select
Loop

End Sub

Private Sub ComboBox3_Enter()
Application.ScreenUpdating = False
On Error Resume Next
ComboBox3.Clear
estado = ComboBox2.List(ComboBox2.ListIndex)

Cells.Find(what:=estado, lookat:=xlWhole).Select
ActiveCell.Offset(1, 0).Select
Do While Not IsEmpty(ActiveCell)
ComboBox3.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loop

End Sub

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Hoja1.Activate
Range("D7").Value = ComboBox3
Unload Me
End Sub

1 Respuesta

Respuesta
3

En el primer Combobox la instrucción Hoja5.Select selecciona ese nro de hoja y de allí se alimentan todos los controles. Hasta aquí pareciera que está todo bien, no importa desde qué hoja llamas al formulario, que según lo entiendo, es un mismo formulario para todas las hojas.

El problema está en el botón de comando con la instrucción Hoja1. Activate que debieras quitar. Y agregar una instrucción que guarde cuál es la hoja que llamó al Userform. Esto podría ser en el evento Initialize:

Dim hojax As String        'NO OLVIDAR ESTA LÍNEA 
Private Sub UserForm_Initialize()
hojax = ActiveSheet.Name
End Sub
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Sheets(hojax).Range("D7").Value = ComboBox3    'se indica en qué hoja guardar
Unload Me
End Sub

Te recomiendo estos videos de mi canal:

Nº 66: 5 maneras de nombrar a las hojas

Nº 9 : Macros compartidas.

PD) Me has recomendado esta consulta y te la respondo a pesar de que ya has hecho 4 consultas y todas anónimas. De las cuales solo has valorada 1. Quizás las otras no te han sido respondidas justamente por ser anónimas.

No hay ninguna razón para no utilizar un alias cualquiera, que nos ayudará a tener una idea de tus conocimientos o dificultades o relacionar esta consulta con alguna otra anterior y guiarnos con las aclaraciones dejadas en las otras.

Tienes toda la razón Elsa

Se me paso comentar y dar las gracias por la respuesta a los usuarios que me ayudaron.

Mil perdones.

Muchas gracias a ti también por sacar tiempo para ayudarme.

Efectivamente el código es para el mismo formulario para todas las hojas.

He añadido el código que me ha proporcionado y cuando clickeo en el botón para llamar al formulario y sale el formulario, no se va a otra hoja. Pero al darle al botón aceptar para ingresar los datos me indica que: "se ha producido error 9 en tiempo de ejecución. Subíndice fuera de intervalo"

Muchas gracias por la respuesta ofrecida

En principio, en el código de tu primer combobox, estás seleccionando la Hoja5 (supongo que será la que tiene la pestaña DATOS)

* En el punto 2 del video Nº 11 Mejoras en el código, explico los problemas que trae mencionar las hojas de este modo ;)

Luego nunca se cambia de hoja. Y no hace falta porque la instrucción del CommandButton1 menciona la hoja activa en la línea:

Sheets(hojax). Range("D7").Value = ComboBox3

Lo que no debes olvidar es declarar la variable al inicio del módulo:

De todos modos aquí solo dejaste parte de tu código. Entiendo que en cada hoja hay un botón que llama al mismo Userform para todas.

Y el botón de comando envía a la hoja activa solo el contenido del Combobox3 ... si tenés más botones tendrás que indicarle lo mismo.

Si te presenta alguna dificultad debieras enviarme en un libro tu Userform para ajustarlo de modo completo. Los correos aparecen en la sección Contactos de mi sitio que dejo al pie. Puede ser el de cibersoft. Arg de gmail.

Sdos!

¡Gracias!

Muchisimas gracias Elsa.

Ha funcionado a la perfección.

No ponía el código arriba del todo. Lo ponía abajo.

Tendremos que seguir aprendiendo poco a poco.

Muchas gracias.

Para aprender de macros te recomiendo pases por la sección Manuales de mi sitio que dejo al pie.

Allí encontrarás un video y el índice de contenidos de los manuales 500Macros y Userforms.

Además, con la compra de alguno de estas versiones te irá de regalo el manual Excel, con todas sus herramientas, ejemplos, ejercicios e imágenes para un buen aprendizaje !

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas