Jump to content

Archived

This topic is now archived and is closed to further replies.

DanielaAlcala22

VARIABLES EN USERFORMS

Recommended Posts

Hola a todos! hoy les traigo un problema interesante... 
 

Veran yo quiero que el programa que estoy haciendo sea flexible y le de muchas opciones al usuario. Asi que le di estas 2 opciones al usuario:

1era) Utilizar la densidad del concreto estandar de 2500kgf/m3

2da) Que el mismo introdusca el valor que quiera para la densidad del concreto.

 

En el formulario represente esa toma de decision colocando 2 botones de opcion, como se puede apreciar en la primera imagen. 

Este es el codigo asosiado a estos botones:

Private Sub OptionButton1_Click()

DensiLabel.Visible = False
DensiTextBox.Visible = False

If OptionButton1 = True Then

	DensiFund = 2500

	Worksheets("Procesos Preliminares").Range("P2").Value = DensiFund

End If

End Sub

Private Sub OptionButton2_Click()

DensiLabel.Visible = True
DensiTextBox.Visible = True
    
    If OptionButton2 = True Then
    
    DensiFund= DensiTextBox.Value
    
    Worksheets("Procesos Preliminares").Range("P2").Value = DensiFund
    
    End If
    
End Sub

Como veran si elijo la opcion 1 la variable DensiFund tendra un valor de 2500, pero si se escoje la opcion 2 la variable DEBERIA adoptar el valor que se le introdusca en la casilla de texto DensiTextBox (Asi llame yo a esa casilla). El problema es que por alguna razon que desconosco cuando pincho el OptionButton2 la variable no adquiere el valor que he introducido en la casilla ya mencionada. Esto es muy importante por que luego de que en el codigo de este formulario se le asigne el valor a la variable DensiFund, la tengo que utilizar en el codigo de otro formulario para calcular el peso del cimiento, por esta razon, en antes del codigo adjunto escribi: "Public DensiFund", con el fin de que dicha variable se pueda usar en cualquier parte del proyecto de excel. 

Apreciaria mucho mucho su ayuda! lo antes posible. Por favor diganme por q mi codigo no funciona Dx que estoy haciendo mal?

1u.png

Share this post


Link to post
Share on other sites

Las variables públicas deben definirse en un módulo.

Si el formulario lo ocultas (Hide), en lugar de descargarlo(Unload), los valores de los controles del formulario pueden ser usados en cualquier otro formulario. 

Lo mismo ocurre si muestras los formularios como modal, uno después de otro.

No subas imágenes, con las  imágenes no hacemos nada, mejor sube tu archivo.

Share this post


Link to post
Share on other sites

Como es muy pesado lo subo mediante un enlace: https://drive.google.com/open?id=0B-oxpk4dIff-UFlhYXFjb0RTbXM.

Los formularios donde se le asigna el valor a la Variable DensiFund son los formularios Frm_Rect y Frm_Circ, y el formulario en donde se quiere usar esa variable para calcular el peso es llamado Eleccion_Fuerzas

Share this post


Link to post
Share on other sites

.

Elimina de todos los formularios y macros en los que pudieras tener la definición de la variable DensiFund, ya sea pública o privada.

En tu proyecto VBA tienes 6 módulos, LimpiarCampos, Módulo1, Módulo2, Módulo3, Módulo4, Módulo5.

Añáde como primera línea en cualquiera de los módulos una sola vez Public DensiFund As ..............

Sería conveniente que revisaras en la ayuda de VBA la definición y ambito de actuación de las variables.

Share this post


Link to post
Share on other sites

@Antoni, acabo de hacer lo que me sugeriste en tu ultimo comentario. Elimine de los formularios la declaracion de Public DensiFund y lo coloque en la primera linea de una de mis macros. Y en cuanto Pincho el OpttionButtom2 de una me sale un arror de compilacion "No se ha definido el tipo definido por el usuario" y me lleva al modulo en el que declare la Variable

Share this post


Link to post
Share on other sites

Te dejo la solución @DanielaAlcala22 . El problema es cómo pasas el valor de DensiFund en las zapatas. Al poner el valor personalizado, no lo puedes poner en el evento Click del OptionButton2

En el mismo evento le dices que se haga visible el textbox y su valor lo pase a la hoja, peeeero... lo hace antes de que pongas el valor en el textbox, por eso pasa un valor en blanco.

Primero tienes que rellenar el txtbox y luego pasar su valor. Para eso lo tienes que hacer desde otro comando, que en este caso es cuando das a Siguiente, en ese caso, primero comprueba que el optionbutton está activo y entonces coje el valor del textbox a la hoja.

No puedes pasar un valor personalizado dependiente de un optionbutton en su propio evento, pero sí una constante como en el caso del optionbutton1, pues no requiere la acción del usuario para poner el valor.

Manual Automatizado

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.




  • Posts

    • Efectivamente, eso es lo que hago. Muchas gracias, simplemente quería saber si es posible realizar esta acción.   Saludos.
    • A ver si es lo que buscas: Dim Resp As Byte Resp = MsgBox("La información suministrada es correcta? Deseas continuar con la ejecución ?", _ vbQuestion + vbYesNo, "ExcelJB") If Resp = vbYes Then MsgBox "Se eligió continuar...", vbExclamation, " ExcelJB " 'Aquí se ejecutaría el código MsgBox "Proceso realizado de forma exitosa!", , "Administrador" Else MsgBox "Se eligió cancelar...", vbCritical, " ExcelJB " End If Saludos J
    • Prueba y comenta ejemplo_copiarcol Prueba 1.xlsm
    • Hola @Haplox @Antoni, pues vean que esa propuesta de ejecutar la macro directamente me gusta bastante, me parece genial. Pues el usuario no tiene que estar pendiente de hacer click en un botón (y en este caso lo elimino de la hoja). Mi idea era justamente recordar eso al usuario. De todas maneras será posible incluir en el código un msgbox que le pregunte al usuario si está seguro de que la información cargada es la correcta, de manera que tenga una oportunidad de revisar antes de ejecutar la macro…..si está seguro se ejecuta la macro y si no, no ejecutar la macro y dejar la celda correspondiente de la columna E en blanco para que luego se inicie nuevamente. Gracias!!
    • Hola @Haplox que tal, La macro que se ejecuta en el ejemplo marcada en el cuadro como MACRO A es la que envía a LISTADO GENERAL la información de cada fila de COLORES. Luego con la macro que me hiciste, se actualiza el precio en LISTADO GENERAL cuando el precio varía en la hoja de cada color y en COLORES se actualiza con fórmula. De esta manera las 3 hojas están enlazadas con el precio. 
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy