Jump to content

Detectar cambio de hoja en formulario


Go to solution Solved by Héctor Miguel,

Recommended Posts

Recurro a ustedes con la siguiente duda.

Estoy haciendo un complemento, pero tengo un problema.

Necesito que el formulario activo detecte el cambio de hoja, para que se ejecute una macro.

Existe alguna forma de realizar esto ¿?  

Gracias de antemano

Link to post
Share on other sites
Hace 14 horas, MauriciodeAbreu dijo:

Existe alguna forma de realizar esto ¿?  

¿Y porqué desde el formulario? Tienes esa opción en los eventos del libro

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

 

Link to post
Share on other sites

Hola Haplox.

Ciertamente se que cuento con esa opcion.

Pero lo que estoy haciendo es un complemento (un grupito de herramientas en el Ribbon para tenerlas a la mano), por tanto no se trabajara directamente sobre la hoja del complemento, sino, sobre otros libros que no tienen ni las macros ni el formulario.

Y al cambiar de hoja, necesito que unos dos o tres CheckBox actualicen su estado (true/false) dependiendo de ciertas condiciones.

Es por eso que me surge la duda.

Agradecido por tus comentarios

Link to post
Share on other sites

Buenas Antoni, me encantaría subirlo, pero estoy muy crudo, apenas estoy empezando a crear las macros que llevara el complemento (y me tope con esta dificultad), y para evitarme tener a la vista (mientras trabajo) tantos Modulos y formularios, pretendo colocar cada herramienta en archivo separados, para después unir todo en un solo archivo, hacer lo propio en XML y convertir el archivo en Add-in.

Pero básicamente es un formulario (no tiene nada especial), y al cambiar de hoja, me gustaría que evaluara nuevamente si hay o no objetos ocultos en la hoja activa (primer CheckBox).

Ya que cuando inicia el formulario hace la evaluación por hoja y libro (segundo CheckBox).

Es decir, la detección de cambio de hoja, detona la ejecución de la macro que actualiza los dos CheckBox

Trate de ver si el TextBox me tomaba el nombre de la hoja activa en tiempo de ejecución (al ir cambiando de hoja), probé con ActiveSheet.Name, pero como era de esperarse no funcionó.

Busque en la red, y encontré el método "Form.Refresh", pero segun entiendo solo aplica para Access, mas allá de esto no encuentro informacion relevante que me ayude a avanzar.

La otra alternativa (poco elegante y practica) era un ComboBox que cargue las hojas del libro activo, pero no tiene gran sentido y pierde un poco la gracia, pero si no consigo como hacerlo, tendrá que ser así, y tendré que colocar como modal el formulario, lo cual tampoco me hace gracia.

Creo que lo importante seria conseguir que reconozca el cambio de hoja, pero estoy muy tierno en VBA :-/.

Subo un formulario X, ya que realmente me encuentro tratando de hacer que haga lo que quiero y no he hecho mas nada.

Si alguien tiene alguna idea de como lograrlo se lo agradecería mucho.

Saludos. 

 

Prueba1.xlsm

Link to post
Share on other sites
  • Solution
Hace 25 minutos , MauriciodeAbreu dijo:

La otra alternativa (poco elegante y practica) era un ComboBox que cargue las hojas del libro activo, pero no tiene gran sentido y pierde un poco la gracia, pero si no consigo como hacerlo, tendrá que ser así, y tendré que colocar como modal el formulario, lo cual tampoco me hace gracia.

Creo que lo importante seria conseguir que reconozca el cambio de hoja, pero estoy muy tierno en VBA

si quieres que sea el usuario quien dispare eventos al cambiar la hoja en cualquier libro, prueba desde módulos "de clase" con eventos a nivel de la aplicación

lee, relee y vuelve a leer estos procedimientos:

Events And Event Procedures In VBA

Link to post
Share on other sites
Hace 17 minutos , Héctor Miguel dijo:

si quieres que sea el usuario quien dispare eventos al cambiar la hoja en cualquier libro, prueba desde módulos "de clase" con eventos a nivel de la aplicación

lee, relee y vuelve a leer estos procedimientos:

Events And Event Procedures In VBA

Buenas Héctor, muchas gracias, leeré, y releeré y si me quedan dudas lo leeré de nuevo, y cualquier duda pregunto 👍

Link to post
Share on other sites

Hola Héctor, he estado leyendo la traducción del enlace que me has dado. Y para ser franco, de entrada me pareció complejo.

Después de una rato de lectura, realice una búsqueda sobre el tema en español. como para tener mas clara la cosa, porque estaba medio enredado.

Y me tope con esta pagina, que sin mucha vuelta pone un ejemplo, el cual "aclaro"..., de alguna manera mi duda.

OJO con el ejemplo, que yo de entrada no me di cuenta de que hay un error en el código.

En donde ponen el código del modulo (estándar), colocaron Cass1 y es Clase1, un pequeño pero crucial detalle.

En fin, después de hacer unas pruebas con el ejemplo en cuestión (que por cierto, es interesante), realice los cambios necesarios para lograr el objetivo.

En el Modulo estándar se debe colocar:

Option Explicit

Dim ObjectHoja As New Clase1

      Sub RefrescarFormulario()
          Set ObjectHoja.RefreshForm = Application
      End Sub

En el modulo de clase se coloca:

Option Explicit
       Public WithEvents RefreshForm As Application

Private Sub RefreshForm_SheetActivate(ByVal Sh As Object)
    UserForm1.TextBox1 = ActiveSheet.Name
End Sub

Y en UserForm_Initialize, se coloca el nombre de la macro (modulo estándar), en este caso la macro que se llama "RefrescarFormulario" o Call RefrescarFormulario

Y eso es todo.

Aclaración: Si cambian el nombre de modulo de clase, recuerden hacer lo mismo en el modulo estándar.

Muchísimas gracias Héctor, no tienes idea como lo agradezco, podemos marcar el tema como  solucionado,

Saludos...

Link to post
Share on other sites
Hace 4 horas, MauriciodeAbreu dijo:

OJO con el ejemplo, que yo de entrada no me di cuenta de que hay un error en el código

el "error" que mencionas asoma por las traducciones "automáticas", si lees el artículo en inglés no existe tal discrepancia, por eso mismo prefiero leer los artículos "originales"

al fin de cuentas, todos los que he visto en español (en algún momento) han "tocado base" en el origen de los mismos (en inglés) 😉

Link to post
Share on other sites
Hace 12 horas, Héctor Miguel dijo:

el "error" que mencionas asoma por las traducciones "automáticas", si lees el artículo en inglés no existe tal discrepancia, por eso mismo prefiero leer los artículos "originales"

Buenas Héctor, Tienes razón, no había tomado en cuenta la traducción automática... 🙄

Y en efecto es mejor apoyarse en el documento en ingles  👍, o digamos no traducido.

Nuevamente gracias.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Crear macros Excel

  • Posts

    • Si habia buscado pero tengo que calcular la distancia entre 1 cliente y 39 mil mas. Despues calcular cual es el de menos distancia..... A  lo que veo es un tema dificil. Muchas gracias
    • MUCHAS GRACIAS SR. ANTONI.  como siempre dando en el punto. sr. antoni disculpe la molestia todo esta ok.  me olvide preguntar tambien por  la ayuda por periodo mensual filtrando. para que me jale el inventario inicial del periodo anterior dejo como quedaria al filtrar por mes. para tener dos opciones de reporte por fecha en la hoja donde iran los 2 esultados. muchas gracias por su gentil ayuda maestro.   REPORTE F_1 M_.xlsm
    • Hola Grupo un gusto saludarlos a todos,  Estoy realizando planificaciones semanales , donde tengo una base con los horarios de los agentes y sus libres, y luego en base a eso realizo una planificacion semanal , Pero me resta resultando muy manual, mi idea es poderla automatizarla un poco, o lo mas que se pueda ya que entiendo que es dificil,  La idea que tengo y que intente hacer de muchas formas pero por el momento no logro concretar es la siguiente:  Si el agente ese dia tiene su horario normal y esta capactiado en la tarea ejemplo 3 tipos de Tarea (administracion, ventas, logistica ) y conincide con su hora que se autocomplete en base al dia y al dia que el agente trabaje, Me resulta muy dificil debido a que son varios parametros, las planificaciones se manandan de forma semanal,  Me parece super interesante podes desarrollar una idea de este tipo y mas excel, entiendo que es posible pero me resulta difícil, muy difícil, Me podrían brindar ayuda a concretar este problema ? intente de muchas formas pero no logre realizarlo,  Estaria encantando con la ayuda que pueden brindar, Saludos desde Uruguay!    Planificacion Dinamica x agentes Semanales .xlsx
    • Busca por la red "calcular distancia entre dos puntos de geolocalización en Excel" Ya con ese calculo, lo que sigue es sencillo de hacer, y si no puedes hacer esta parte, pues nos avisas por aquí    Saludos
    • Hola a tod@s, Tengo un fichero de Excel para realizar un registro de entradas y salidas y me esta funcionando en cuanto a la parte de cumplimentar en la hoja de Excel directamente. Intentare explicarme lo mejor posible. Pero lo mejor es probarlo.Se trata de una tabla en las que estarían las entradas y salidas de productos de las distintas obras que tenemos (que se llama "Registros" en la hoja REGISTRO) y en la que añadimos y quitamos artículos que pueden entrar o salir según necesidades para llevar un control.Hay otra tabla donde tenemos todos los productos (que se llama "Productos" en la hoja PRODUCTOS).Y una tercera hoja donde tenemos pequeñas tablas para los desplegables que queramos disponer.Todas las hojas están relacionadas mediante formulas y validación de datos.Si comprueban a meter datos o a sacar datos en la hoja de Registro directamente comprobaran que funciona de forma correcta. Suma los productos cuando el valor es positivo y resta cuando el valor es negativo pero si el valor de existencias de ese producto es inferior a cero dará un error porque no hay existencias. Hasta aquí funciona todo correcto.Pero me he creado un formulario para introducir la fecha, que lo hace de forma automática y un código que lo introduce de forma automática a partir de un Listbox que me he creado. Si colocamos un valor y luego lo borramos en el Textbox de búsqueda sacara el listado de todos los artículos. Después solamente con seleccionar el articulo que deseamos lo colocara en el Textbox de código.Pero el problema que no he conseguido resolver es en la parte del Textbox de Cantidad. Porque ahí si coloco un numero negativo aunque el stock sea cero o inferior a cero pues me lo coloca igualmente y no soy capaz de solucionarlo. Me han intentado ayudar en otro foro pero me acabo dando problemas que hacia la suma mal.Espero que lo puedan entender y que me pueden ayudar o darme alguna solución.Yo lo que pretendo después, es poder bloquear las hojas para que nadie pueda modificarlas salvo en algunos campos porque este archivo es para compartir a varios usuarios y unos podrán entrar material y otros solamente sacar material . Pero eso ya será otra historia. Primero quería resolver esto.Disculpen por tanto embrollo, pero cualquier duda se la podre aclarar sin problema. En resumen, seria validar la cantidad introducida para evitar que el stock del producto sea menor que 0. Muchas gracias a todos.   Entradas y salidas de material_5.xlsm
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy