Jump to content

Cálculos en TextBox y Label.


pinoji

Recommended Posts

Buenos días Foristas. Una vez más por acá. Quizás más rápido de lo que yo hubiera querido, pero sigo teniendo problemas con los cálculos en VBA. Es algo que no acabo de aprender y necesito aprenderlo.

Acá en mi país cuando un trabajador se enferma y el Médico le da Reposo, emite un Certificado Médico, donde entre otros datos consigna los días a Descansar y la fecha Inicial cuando comienza ese Reposo. Imagino que en todos lados sea parecido, quizás difiera en el cálculo.

Yo quise automatizarle esto a mi esposa para que hiciera los cálculos de manera automática con sólo introducir los datos imprescindibles.

Primero: Declara el Salario devengado por cada uno de los últimos 12 meses y esto crea un Total de Salario. Esto lo logré hacer y funciona perfecto, porque lo que necesito es que se vaya mostrando en los TextBox o Label los resultados en Tiempo Real, pero hay otros cálculos que no he podido lograr, por ejemplo:

Promedio Mes que utilizo la función =SI.ERROR(PROMEDIO(D8:D19),"0.00")

Promedio Día que utilizo la función =SI.ERROR(D21/24,"0.00")

Días a Contar que utilizo =DIAS.LAB.INTL(H8,I8,11,I13) (en el cuarto argumento requiere del rango I13:I20)

Total Días a Pagar =F11-D23

Días x Promedio Días =SI.ERROR(F14*D22,"0.00")

Neto a Cobrar =SI.ERROR(F17*K9/100,"0.00")

El importe de los Meses se introduce manual, al igual que Fecha Inicio (Desde) y Fecha Final (Hasta), al igual que en No Considerar que son fechas de días Feriados, Festivos o simplemente No laborables (no incluye los domingos)

En el Combobox % a Aplicar defino el porciento que requiere el certificado según el Tipo.

En Días de Carencia se introduce manual. Esto son los 3 primeros días de cada certificado que no se les paga, a no ser que el certificado sea continuación de otro.

En la Hoja me funciona PERFECTAMENTE y obtengo lo que necesito, pero quiero hacerlo a través de VBA, pero no logro concretar los cálculos en los TextBox o Label. Esto es una asignatura que sigo teniendo pendiente pero que superaré.

Resumiendo, necesito me ayuden a que los TextBox TxtPromedioDia y TxtPromedioMes me vaya mostrando en Tiempo Real el resultado de las operaciones, así como en los 4 Label.

Aun no lo he terminado, pero con esto me estarían ayudando muchísimo.

Les agradecería su apoyo.

Gracias y que tengan un excelente día.

JIPM

Subsidio Foro .xlsm

Link to comment
Share on other sites

@pinoji , como veo que andas intentando aprender, antes de mirar tu fichero te doy la guía para hacer cálculos en VBA

Ten en cuenta que todos los datos que metas en TextBox o  Labels, siempre son Strings (texto), por lo que de alguna manera debes poder convertilos a números para poder operar con ellos.

La forma es declarar variables como números, y después asignárles los valores de los textbox o labels conviertiéndolos en numero. Con un eemplo lo verás más claro

Los tipos de números en que convertir depende de los que necesites. Si necesitas números con decimales, debes declararlos como Double, si no es así como Long.
 

Dim dias as Long, salario as Double

dias=Clng(TextBox1)
salario=Cdbl(TextBox2)

Aquí "Clng" es la función de VBA que convierte texto a Long (número sin decimales) y "Cdbl" la que convierte a Double.

Por cierto, cuando dimensionas a CADA variable le debes asignar su tipo. Si haces lo siguiente:

Dim salario as Double, diario, division

NO estas definiendo TODAS como Duble, las que no tienen valor SE DIMENSIONAN como "Variant" (por defecto VBA si no pones qué tipo de variable va a ser, y solo lo dimensionas como, por ejemplo "diario", lo hace como Variant.

Para trabajar con fechas, lo mejor es primero convertilars a "Long" (valor interno de las fechas en Excel), trabajar con ellas, y después devolver su valor con "Cdate" para devolver el valor de la fecha
 

Dim fecha1 as Long, fecha2 as Long

fecha1=Clng(TextBox1)
fecha2=Clng(TextBox)
.
.
operaciones con ellas (sumas, restas, etc)
.
.
TextBox3=Cdate(resultado de las operaciones)

A ver cómo se te da con esta pequeña ayuda ;)

Link to comment
Share on other sites

Buenos días Haplox. Espero que se encuentre bien de salud.

Muy interesante su comentario y por supuesto que es una tremenda ayuda, sobre todo para mi que apenas estoy comenzando con esto de VBA. Comenzaré a interiorizar y poner en practica estos elementos.

Pero sigo teniendo una duda; Como puedo en el Formulario que envié por ejemplo mientras voy declarando los salarios por meses, de manera automática y en tiempo real se vaya mostrando el el TextBox  correspondiente al Promedio Mes el resultado y así con el Promedio Días y los demás TextBox y Label como sucede con el Total de Salario.  En qué Evento lo declaro, cómo podría ser la sintaxis (...) porque para el Total de Salario con un poco de trabajo lo hice, pero he intentado con los demás y no puedo lograrlo.

Podrías ayudarme con un ejemplo para yo tener una referencia?

Gracias por atender mi duda y excelente fin de semana para ti y tu familia.

Saludos

Pino

Link to comment
Share on other sites

Hola Juanlui, buenas noches.

No entiendo a ciencias ciertas su pregunta. Creo entender que si conozco el Calendario EcoCalendario. Pues sí,  lo uso en mis proyectos y es muy fácil de usar. Consta de un Modulo, un Modulo Clase y un UserForm, los cuales los incluyes en tu proyecto y listo. Si esa es tu pregunta creo que está contestada, si es otra, por favor, dime y responderé con mucho placer. Usted me ayudó en su momento con una duda y creo estar en deuda con usted. Gracias por todo.

Saludos y excelente fin de semana.

JIPM

Link to comment
Share on other sites

Hace 4 horas, Janlui dijo:

Enigma, me permites conoce el calendario que mencionas EcoCalendario?

Gracias

Está en el mismo archivo publicado por @pinoji y es un aporte que hice hace tiempo en mi canal EcoExcel. De hecho hay una versión mejorada y me gustó mucho el desarrollo del mismo. Es fácil de usar y no ocupa tanto espacio.

Saludos.

Link to comment
Share on other sites

Enigma25, buenas noches. No conocía que usted estuviera al tanto de este Calendario y que además como dice "es un aporte que hice en mi canal EcoExcel..." Tenia entendido que era del Profesor David, pero no es la cuestión de mi comentario quien es o no el autor, lo que si quería comentar es que no se por qué razón me gustó este más que otros que me he encontrado, como el de Andrés Rojas Moncada, que por cierto es muy bueno, pero decidí usar este y me va bien, ahora me gustaría obtener esa versión mejorada. Podrías darme el link?

Gracias entonces por su aporte y acá tiene un seguidor y servidor.

Saludos.

Pino

Link to comment
Share on other sites

Hace 3 minutos , pinoji dijo:

Enigma25, buenas noches. No conocía que usted estuviera al tanto de este Calendario y que además como dice "es un aporte que hice en mi canal EcoExcel..." Tenia entendido que era del Profesor David, pero no es la cuestión de mi comentario quien es o no el autor, lo que si quería comentar es que no se por qué razón me gustó este más que otros que me he encontrado, como el de Andrés Rojas Moncada, que por cierto es muy bueno, pero decidí usar este y me va bien, ahora me gustaría obtener esa versión mejorada. Podrías darme el link?

Gracias entonces por su aporte y acá tiene un seguidor y servidor.

Un placer. Mi nombre es David Garcia y quien tiene el canal EcoExcel en Youtube y que tengo ese calendario para quienes lo deseen. Me doy a conocer como Enigma25 en el foro desde hace tiempo pero por temas de trabajo y demás, he dejado de participar pero le tengo un gran cariño a este foro porque me ha ayudado mucho y le debo tanto.

Aun no tengo los privilegios para aportar archivos pero espero que con el tiempo pueda dar mas aportes para que así, con el tiempo ya puedo adjuntar archivos.

De todos modos, el que usas, es básicamente el mismo. La mejora en si es de apariencia.

 

Link to comment
Share on other sites

Profesor, el placer es mío. Soy seguidor de su canal desde hace algún tiempo y he aprendido muchas cosas en él. No sabes a cuantas personas has ayudado al igual que este Foro que es excepcional, con miembros muy capaces, amables y sobre todo, tanto en usted como en este Foro el ALTRUISMO es una premisa. Yo verdaderamente admiro a aquellas personas que lo dan todo por ayudar a los demás. Por acá hay un grupo de personas (me incluyo, de hecho lo digo por mí) que desgraciadamente tenemos muchos problemas para acceder a Cursos On Line o tener una bibliografía acorde o una persona experta que lo guía y estos "espacios" vienen, de alguna manera, a "llenar" esos vacíos. Soy empírico, no se nada de Arquitectura, Algoritmo,  Programación estructurada, Pseudocódigos,  y  todos esos conceptos que se manejan en una Carrera Universitaria o quizás en Cursos, pero sí tengo el interés de aprender. Ya no tengo 20 años (tengo 56) y las capacidades de aprendizajes disminuyen mucho, las neuronas no son las mismas y hace apenas 9 meses que escribí mi primer código VBA y lo debo a los canales de YouTube y personas como ustedes. No son capaces de imaginas el trabajo que paso para poder hacer algo en Excel y VBA. No tengo Ordenador, poco tiempo, los apagones,  (...) pero aún así QUIERO aprender y me encuentro con personas como usted, Víctor Hernández (TOR-Code),  Carolina de Andrade, Andrés Rojas, Sergio Alejandro Campos, Antoni, JSD JSD, Haplox, Alexander, Jalui, Sergio Reigosa, Sergio el administrador de este Foro y muchos más presto a ayudar, a sacrificar su tiempo libre para atender nuestras dudas. En una ocasión lo dije y ahora lo repito, yo los considero Seres Superiores.

Pero bueno, basta charlas que este medio no es para eso. Agradecerle por sus aportes y que tenga una Excelente salud usted y su familia. Mi nombre es José Ignacio Pino Mondeja, vivo en Cuba, 56 años y me puede contactar por:     pinomondejajoseignacio@gmail.com.

Gracias a usted y todos los miembros del Foro

Link to comment
Share on other sites

Hace 17 horas, Enigma25 dijo:

Un placer. Mi nombre es David Garcia y quien tiene el canal EcoExcel en Youtube y que tengo ese calendario para quienes lo deseen. Me doy a conocer como Enigma25 en el foro desde hace tiempo pero por temas de trabajo y demás, he dejado de participar pero le tengo un gran cariño a este foro porque me ha ayudado mucho y le debo tanto.

Aun no tengo los privilegios para aportar archivos pero espero que con el tiempo pueda dar mas aportes para que así, con el tiempo ya puedo adjuntar archivos.

De todos modos, el que usas, es básicamente el mismo. La mejora en si es de apariencia.

 

@Enigma25Bueno saberlo que eres EcoExcel! Ahí me he tomado unos aportes que he encontrado en San Google, bueno y por el foro ya eres bastante bien conocido.

 

Los mejores éxitos en su vida.

Saludos

Link to comment
Share on other sites

A ver si entendí más o menos lo que necesitas. Para parte de la solución uso Función  de Otto Javier con alguna modificación.

'//////////////////////////////////////////////////////////////////
'// Función creada por Otto Javier González Diciembre de 2015
'// email: ottogonzalez@outlook.com
'// Canal de YouTube: https://www.youtube.com/ottojaviergonzalez
'//////////////////////////////////////////////////////////////////

Public Function Promediar(xForm As UserForm, xTextBoxName As String, xPromedio As Control)
Dim i As Control
Dim x As Double
Dim y As Double
    
On Error GoTo Errores
    
    For Each i In xForm.Controls
        If i.Name Like xTextBoxName & "*" Then
            If i <> Empty Then
                x = x + i
                y = y + 1
            End If
        End If
    Next
    
    xPromedio = 0
    xPromedio = FormatNumber(x / y, 1)
    FrmSubsidio.TxtTotalS = FormatNumber(x, 1)
Errores:
   Exit Function
   
End Function

 

Prueba.gif

Subsidio Foro .xlsm

Link to comment
Share on other sites

Buenas noches Foristas.

Buenas Noches JSD. Que bueno saber que estás ahí. Te has convertido en mi S.O.S y que privilegio para mí, aun sabiendo que  existe dentro de este Foro expertos con mucha experiencia y deseos de ayudar.

Voy a revisar con datos reales su propuesta, que de antemano creo es perfecta (no podía ser de otra manera), pero a priori vi algo que quizás no aclaré, o mejor dicho que no aclaré.  Acá se trabaja de Lunes a Sábado y se descansa los domingos y en la función Dias.Lab.Intl en el tercer argumento se define esto, que para mi caso es 11, pero tengo un rango de fechas que se llama No Considerar en el que agrego aquellas fechas como Feriados, Festivos, etc y que la función me va a descontar del total de los días. En la propuesta suya está:

Private Sub Hasta_Change()
     TotalDContar = Application.WorksheetFunction.NetworkDays_Intl(CDate(Desde), CDate(Hasta), 12, 17)
     If Carencia = "" Then Carencia = 0
     TotalDPagar = CDbl(TotalDContar) - CDbl(Carencia)
     TotalPDias = CDbl(TotalDPagar) * CDbl(TxtPromedioDia)
     If CmbAplicar = "" Then
        MsgBox "Debe marcar el porcentaje a aplicar"
        CmbAplicar.SetFocus
        CmbAplicar.BackColor = RGB(0, 255, 0)
        Exit Sub
     End If
     
     Neto = CDbl(TotalPDias) * CDbl(Left(CmbAplicar.Value, 2)) / 100
     Neto = FormatNumber(Neto)
End Sub

(...12, 17) y realmente no entiendo. Es que debo cambiar el 12 por 11?

y con el 17 qué hago? porque eso debe abarcar el rango I13:I20

Por favor, no lo tome a mal, pero más que resolver mi problema que ya se lo estoy agradeciendo, es más importante aprender, porque si no aprendo quedo en las mismas y yo necesito aprender.

Gracias mil. Mañana le escribo cuando haga una prueba con números reales, pero desde ahora mi agradecimiento.

Un abrazo.

JIPM

Link to comment
Share on other sites

Buenos días Foristas.

Buenos días JSD. Después de revisar con datos reales todo funciona perfecto excepto que me está dejando de contar un día. o sea,  todo parece indicar que el día que declaro en No Considerar no lo está tomando.

Saludos

JIPM 

Link to comment
Share on other sites

Buenas noches Foristas. Espero que se encuentren bien

Buenas noches JSD, igual para usted

Muchas Gracias JSD. Ese es el resultado que buscaba. Excelente su trabajo. No encuentro palabras para agradecer toda la ayuda que me ha brindado desde que inicié al Foro hasta hoy. Realmente lo aprecio y respeto mucho, al igual que el resto de los miembros de este Foro.

Doy el Tema por Cerrado.

Gracias a todos, en especial a usted y que tengan una excelente noche.

JIPM

Link to comment
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
×
×
  • Create New...

Important Information

Privacy Policy