Saltar al contenido

Ver el contenido de un textbox cuando supere una fecha determinada


rustin

Recommended Posts

publicado

Buenas!

Tengo una duda. Dentro de mi formulario, tengo 12 textbox (uno por cada mes meses) cuyo contenido, por ejemplo es 50 en cada uno de ellos. La idea es que no se vea el contenido de los textbox hasta que no vaya llegando el día 1 de cada mes. Es decir, que el textbox de enero, el día 1 de enero se vea el "50"; el 1 de febrero se vea el textbox de febrero, en marzo aparezca en la casilla de marzo otros 50 y así hasta diciembre.

Qué tendría que hacer?

Gracias!

publicado

@rustin, te dejo una solución. Ten en cuenta que deberás nombrar los textbox como TextBox1 para enero... TextBox12 para diciembre

Private Sub UserForm_Activate()
Dim con As Control, mes As String

mes = Month(Date)

For Each con In UserForm1.Controls
    If con.Name = "TextBox" & mes Then
        con.ForeColor = 0
    ElseIf con.Name <> "TextBox" & mes Then
        con.ForeColor = vbWhite
    End If
Next con

End Sub

 

publicado

Partiendo de la misma premisa que Haplox:

Private Sub UserForm_Activate()
For x = Month(Date) + 1 To 12
   Controls("TextBox" & x).Visible = False
Next
End Sub

 

publicado

Gracias por la respuesta tan rápida. A lo mejor no me he explicado bien y el término "que no se vea" no es el correcto.

Como verás en el adjunto, querría tener un control de los pagos de los clientes, que siempre tienen la misma cuota, en este caso 50€. Querría usar este formulario a modo de consulta para saber cuanto debe cada cliente, ¿Cómo? Pues que cada dia 1 de cada mes se aparezca automáticamente 50 en la casilla del mes correspondiente y que a su vez, en la casilla de abajo del todo "suma total" me sume los importes que debe. Creo que el método que me comentas no serviría.

Gracias de nuevo.

cobro.png

publicado
Hace 2 horas, rustin dijo:

 Creo que el método que me comentas no serviría.

Pues entonces empieza tu pregunta de la forma correcta, no a medias para que luego digas que encima no funciona -_-. Tienes los códigos. Solo cambiando lo que se haría con él tienes la solución. Te toca a ti

publicado
Hace 17 minutos , Haplox dijo:

Pues entonces empieza tu pregunta de la forma correcta, no a medias para que luego digas que encima no funciona -_-. Tienes los códigos. Solo cambiando lo que se haría con él tienes la solución. Te toca a ti

@HaploxSi, tienes toda la razón, de hecho he empezado mi mensaje anterior asumiendo que yo mismo no me había explicado bien y agradeciendo tu respuesta. El hecho de que diga que no me he explicado bien va implícito que asumo que tu respuesta no me ha valido debido a mi no buena comunicación.

Lo de "Pues entonces empieza tu pregunta de la forma correcta" creo que sobra. Primero porque si tengo una duda, no quiero marear a nadie, y menos a mi, y cuanto antes supere mi problema mejor para todos, así que si hubiera sabido una mejor manera de explicar las cosas, lo hubiera hecho desde el principio. Segundo, como te he dicho antes, empecé diciendo en mi mensaje que me había explicado mal por lo que si asumo mi culpa, no entiendo el porqué de recriminarme que pregunte de forma correcta, ya lo he hecho yo mismo. Y tercero, amigo, es un foro de dudas. Habrá gente con mucha experiencia, con poca, con muchísima (como es tu caso) o con ninguna (como es la mía); si ves que no me expreso bien o que no comunico como debería, es que este ámbito no lo domino y por ello estoy aquí, para pedir ayuda por algo no conozco, un poco de paciencia, que como te repetí, yo mismo cuando vi que no me cuadraba tu respuesta di por hecho que no me había explicado bien. Ahora el pataleo, la recriminación y el "te toca a ti" lo veo innecesario. Si ves a un tío con una "L" en el coche y ves que va lento, encima no le pites. 

Aún y así, gracias por dedicar tu tiempo e intentar ayudar de una forma u otra.

 

publicado
Hace 5 minutos , rustin dijo:

Aún y así, gracias por dedicar tu tiempo e intentar ayudar de una forma u otra.

Con lo fácil que era subir esa imagen de principio y explicar lo de la suma. En fin...

publicado

Por cierto... Ya solo hacer un condicional para que si no está pagado algún mes también sea 50

mes = Month(Date)

For Each con In UserForm1.Controls
    If con.Name = "TextBox" & mes Then
        con.Value = 50
    ElseIf con.Name <> "TextBox" & mes Then
        con.Value = 0
    End If
Next con

End Sub
  • 2 weeks later...
publicado

He estado haciendo pruebas y no sale como me gustaría así que creo que voy a cambiar el sistema y simplificarlo todo lo máximo posible. Voy a adjuntar el archivo e igualmente una captura y a voy a empezar con el nuevo planteamiento a ver si consigo aclararme ( y aclararos).

Supongamos que dentro del formulario tengo un textbox llamado "text_precio" cuyo valor en la base de datos es de 60€ y suponiendo que estamos en 01/01/2019 lo que me gustaría es:

Cuando sea 1 de enero, me aparezca en el textbox de enero ("text_enero") 60€. Cuando llegue el 1 de febrero, me aparezca en la parte de febrero ("text_febrero") , otros 60€, y así sucesivamente, y que a su vez, en la "deuda total" me aparezca la suma de todas las cantidades que estén en ese momento. La idea es que automáticamente me genere una "deuda" con el alumno a principio de cada mes y yo manualmente, una vez que vayan pagando, los vaya borrando.

Digo esto, por si hay alguna forma más sencilla de hacerla, (que seguro que la hay), me lo digáis y así me lo curro.

Gracias y disculpas por tanta torpeza

CONTROL MESES PAGADOS.xlsm

alumnos.png

publicado
En 26/11/2018 at 11:33 , Antoni dijo:

Te subo algo en cuanto tenga un ratito.

Estupendo Antoni. Muchas gracias

Ya con esto terminaría y no molestaría mas :)

publicado

EL tiempo a dedicar a tu consulta sobrepasa mi tiempo disponible los días laborables, por lo que difìcilmente podré ponerme a ello hasta el fin de semana.

De paso contesta ¿Solo de Enero a Agosto?,  ya de paso sube un archivo con información en la hoja Alumnos, porqué en el archivo que has subido no hay datos.

publicado

Claro que si! ahí va la base de datos modificada y preparada.

Adjunto una captura de la ficha. Resumo brevemente lo que necesito. El 1 de enero, me debería de aparecer en la casilla de enero la cantidad de  111€. El 2 de febrero, en la casilla del mismo mes aparezca 111€, y así sucesivamente con todos los meses. Cabe destacar que las cantidades que aparezcan en las casillas, deberían de estar ahí permanentemente hasta que se borraran de forma manual.

Si fuese más fácil, no me importaría que en las casillas que están pendientes de llegar el mes, aparezca un "0".

Y para terminar, en la casilla "deuda total" me gustaría que hubiese un sumatorio de las cantidades pendientes de pago las cuales se vayan actualizando automáticamente una vez aparezca o elimine una cantidad

 

base de datos 1.0.xlsm

ficha.png

publicado

Bueno, creo que mas o menos esto es lo que estás buscando.

Verás que he añadido la hoja Deuda, se emplea para llevar el control de la generación mensual de la deuda.

Al inicio del curso debes borrar la columna B de dicha hoja.

Uso la propiedad Tag de los textbox de los meses para poder tratarlos como un conjunto en lugar de hacerlo uno a uno.

También he añadido una validación para el contenido de los meses antes de guardar.

Ya comentarás.

base de datos 1.0 (2).xlsm

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Current Donation Goals

    • Raised 0.00 EUR of 130.00 EUR target
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Vale mil gracias, en vdd se agradece todo el apoyo y comentarios
    • Hola nuevamente. Por eso la importancia de lo que mencionas tú como "ruta relativa". Tal cual comentas, y aún sin llegar a algunos detalles importantes para ayudarte, en realidad tal cual te comenté le día miércoles, pues sí podías hacer como comentabas, era cosa de obtener los Id de Windows (como tú los llamas) y la ruta de OneDrive en casa usuario y eso sí se puede obtener con VBA y luego pasarlo a PQ, pero medio que te cerraste en que "PQ no puede trabajar con rutas relativas", cosa cierta pero siempre hay formas. Si SAP puede o no guardar en OneDrive o SharePoint, pues si está mapeado en la PC ¡claro que se puede! Pero bueno, creo que si te es útil tu propia propuesta ¡avanza con eso!
    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.