TODOPIC
Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: ENO45 en 18 de Enero de 2006, 22:00:00
-
hola lo que tengo que hacer y no tengo idea como es restar 2 horas que cargo en dos textbox para luego mostrarla en un tercer textbox como hago eso
lo que yo hice es esto pero no funciona a ver si me pueden ayudar
Private Sub Timer1_Timer()
Dim A As String
Dim B As String
Dim N As String
A = Text1.Text
B = Text2.Text
N = B - A
Text3.Text = N
End Sub
-
Hola ENO45, probaste de hacer esto:
Private Sub Timer1_Timer()
Dim A As String
Dim B As String
Dim N As String
A = val(Text1.Text)
B = val(Text2.Text)
N = B - A
Text3.Text = N
End Sub
Suerte
Atte. CARLOS
-
no eso no funciona, lo que tengo qhe restar son 2 horas (ej 22:01:00 - 22:02:00) y lo que me enviaste es para restare numeros enteros
-
Hola. el VB no puede restar Cadenas de texto que contengan caracteres no numericos ENO45!! fijate que en un formato de hora como hh:mm:ss los numeros enteros estan separados por ":".
Converti ambas horas(hh:mm:ss) a segundos y luego restalas. Al resultado volvelo a convertir al formato hh:mm:ss.
Para pasar de hh:mm:ss a segundos hace:
segundos = (cint(hh)*3600)+(cint(mm) * 60) + cint(ss)
Para pasar de segundos a hh:mm:ss hace:
hh = round(segundos / 3600)
mm = round((segundos - (hh*3600)) / 60)
ss = segundos - (hh*3600) - (mm*60)
Exitos
-
disculpame pero no entiendo el programa como hago para cargar las horas, minutos y segundos de cada textbox al programa
segundos = (cint(hh)*3600)+(cint(mm) * 60) + cint(ss)
-
Por ejemplo:
Tenes un Textbox. El formato de la hora DEBE ser de la siguiente manera:
hh:mm:ss
ok?
ejemplos:
12:21:34
07:15:04
Un metodo facil, pero esclavo y limitado a ese formato es este:
hh= left(TextHora1.Text,2)
mm=mid(TextHora1.Text,4,2)
ss = right(TextHora1.Text,2)
Si el usuario es quien ingresa las horas, minutos y segundos, te conviene comprobar que las horas ingresadas sean validas.
FIJATE QUE SI O SI , TANTO LAS horas(hh), minutos(mm) y segundos(ss) deben contener 2 cifras cada uno en este metodo. Sino el programa va a tirar error ya que se va a colar un ":" en alguno(o mas de uno) de los valores.
Hay casi infinitos metodos(o al menos a mi se me ocurren muchisimos) para hacer esto. Lo mas complejo de esto que queres hacer, creelo o no, es comprobar que tanto la hora ingresada como su formato son VALIDOS.
Exitos...
-
Hace mucho que no uso VB y es probable que diga alguna tontería, pero creo recordar que los campos de fecha y hora, si se asignan a una variable tipo VARIANT, toman un formato numérico con el que es muy fácil operar, ya que se puede restar o sumar directamente sobre él.
-
hola brunof me estas salvando de varias.
el ejemplo que me diste no funciona cuando la hora pasande las 09:00:00 dice error 6 desbordamiento ¿que sera? y otra cosa cuando por ejemplo pones la hora 06:30:30 cuanodo quiero volver a la hora me da otra hora segun lo que yo vi es que cunado redondea pasa a una hora mas grande como se soluciona este problema
desde ya muy agradecido por toda tus ayudas
-
Hola. el desbordamiento se produce porque declaraste la variable segundos como Integer. Declarala como Long
Dim segundos As Long
ok?
Con respecto a lo segundo:
Perdon, fue mi equivocacion. La funcion Round redonde hacia arriba si el numero excede la mitad del entero en el Vb...


Aca te va el codigo correcto:
Para pasar de la hora en el texto a segundos:
Dim hh As Integer
Dim mm As Integer
Dim ss As Integer
Dim Segundos As Long
hh = CInt(Left(TextHora1.Text, 2))
mm = CInt(Mid(TextHora1.Text, 4, 2))
ss = CInt(Right(TextHora1.Text, 2))
Segundos = (CInt(hh) * 3600) + (CInt(mm) * 60) + CInt(ss)
y para pasar de segundos a la hora:
hh = Fix(Segundos / 3600)
mm = Fix((Segundos - (hh * 3600)) / 60)
ss = Segundos - (hh * 3600) - (mm * 60)
TextHora1.text = hh & ":" & mm & ":" & ss
Exitos.
-
con el error del desbordamiento sigue sucediendo lo mismo
dice : error 6 en tiempo de ejecucion
desbordamiento
que puede ser y señana el error en la linea:
Segundos = (CInt(hh) * 3600) + (CInt(mm) * 60) + CInt(ss)
-
Si...esta produciendo un desbordamiento.
cambia esto:
Dim hh As Long
Dim mm As Long
Dim ss As Long
Segundos = (CLng(hh) * 3600) + (CInt(mm) * 60) + CInt(ss)
Exitos.
-
anda un espectaculo lo unico tengo otro problema, cuando quiero pasar de segundos a hora me surge un problema es que por ejemplo me debuelve 3:10:0 en ves de 03:10:00 es que la quieo comparar con la hora actual y si no son iguales no hace nada
espero que se pueda solucionar.
(me parece que te estoy debiendo un par de cervezas por la ayuda)
-
Hola...no cobro tan caro!jaja pero te las acepto!



Cambia esto:
TextHora1.text = hh & ":" & mm & ":" & ss
Por esto:
If hh < 10 Then TextHora1.Text = "0" & hh & ":" Else TextHora1.Text = hh & ":"
If mm < 10 Then TextHora1.Text = TextHora1.Text & "0" & mm & ":" Else TextHora1.Text = TextHora1.Text & mm & ":"
If ss < 10 Then TextHora1.Text = TextHora1.Text & "0" & ss Else TextHora1.Text = TextHora1.Text & ss
Los que continua a los Else va todo en el mismo renglon. Aca pasan abajo porque no entra...
pero en el Vb solamente te tiene que quedar de 3 renglones este codigo... Exitos.
-
Como te decia...en el editor no entraba, pero de vago no le di vista previa...entran sin problemas...
tonces hacele caso omiso a mi comentario.
Exitos
-
anda joya muchas gracias