Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: Bazooka en Enero 02, 2015, 11:15:05 am
-
Hola amigos ante que nada les deseo a todos lo integrantes del foro 'UN MUY FELIZ 2015'.
Ahora si!! hace como una hora estoy dando vuelta y no puedo resolver esto haber si alguno me ayuda.
NECESITO TENER UNA FUNCION QUE ME DEVUELVA EN CADA LLAMADO EL SIGUIENTE VALOR CON ESTE CRITERIO EL PRIMER VALOR POSIBLE SERIA
1A el sig. 2A , 3A, 4A, 5A y así HASTA LLEGAR AL TOPE ESTABLECIDO EN LA CONSTANTE (ejemplo 5) , luego sería
1B el sig. 2B , 3B, 4B, 5B
1C el sig. 2C , 3C, 4C, 5C
Const TOPE = 5
Private Sub Command1_Click()
Dim actual As String
actual = "1A"
Caption = DevuelveValor(actual)
End Sub
Private Function DevuelveValor(actual As String) As String
DevuelveValor = "1A" '"1B" "1C" .... "2A" "2B" "2C" .... "3C"
End Function
-
Hola, Bazooka.
Hice un pequeño ejemplo cuyo código copio acá, a ver si te sirve de guía (si es que entendí bien tu inquietud).
En un proyecto poné 4 textboxes llamadas "txtLI" (letra inicial), "txtLF" (letra final), "txtNI" (número inicial) y "txtNF" (número final). En las propiedades "text" poneles los valores que necesites.
También poné un control list y un botón.
Este es el código del botón:
Private Sub Command1_Click()
Dim Letra As Integer
Dim Numero As Integer
Dim i As Integer
Dim j As Integer
Dim LI As Integer
Dim LF As Integer
Dim NI As Integer
Dim NF As Integer
LI = Asc(txtLI.Text)
LF = Asc(txtLF.Text)
NI = txtNI.Text
NF = txtNF.Text
Letra = LI
For i = LI To LF
Numero = NI
For j = NI To NF
List1.AddItem Chr$(Letra) & Numero
Numero = Numero + 1
Next
Letra = Letra + 1
Next
End Sub
Espero haber entendido tu consulta.
Saludos.
Jerónimo
-
Miguel y
¿que comportamiento quieres si te dan el ultimo valor de tu serie?
¿quieres el valor siguiente (ej 2B) o toda la cadena (ej 2B, 3B, 4B 5B)?
¿siempre mantendras el formato numero/letra?
Asumiendo que sea un solo valor y el mismo formato podría ser asi:
Private Function DevuelveValor (Actual as String) as String
DevuelveValor = Val(Actual)+1 & Right(Actual, 1) 'El Val de un numero con cualquier letra siempre sera el numero
End Function
Private Sub Command1_Click()
Label1 = DevuelveValor("3B")
End Sub
devolvera 4B
Solo falta definir el limite y su comportamiento.
Saludos
-
Miguel y
¿que comportamiento quieres si te dan el ultimo valor de tu serie?
¿quieres el valor siguiente (ej 2B) o toda la cadena (ej 2B, 3B, 4B 5B)?
¿siempre mantendras el formato numero/letra?
Asumiendo que sea un solo valor y el mismo formato podría ser asi:
Private Function DevuelveValor (Actual as String) as String
DevuelveValor = Val(Actual)+1 & Right(Actual, 1) 'El Val de un numero con cualquier letra siempre sera el numero
End Function
Private Sub Command1_Click()
Label1 = DevuelveValor("3B")
End Sub
devolvera 4B
Solo falta definir el limite y su comportamiento.
Saludos
Hola amigo!! si siempre debe devolver el siguiente unicamente se pasa 1A, devolveria 1B si se pasa 4C devolveria 5C ,.
Y el formato es siempre el numero adelante.!!!
-
Hola, Bazooka.
Hice un pequeño ejemplo cuyo código copio acá, a ver si te sirve de guía (si es que entendí bien tu inquietud).
En un proyecto poné 4 textboxes llamadas "txtLI" (letra inicial), "txtLF" (letra final), "txtNI" (número inicial) y "txtNF" (número final). En las propiedades "text" poneles los valores que necesites.
También poné un control list y un botón.
Este es el código del botón:
Hola Jeronimo !! Si funciona correcto y estas enfocado en lo que pedi pero lo que necesito esta mas enfocado en una funcion que devuelva el valor siguiente tal como le explique a IVan abajo.
Muchas gracias por tu aporte amigo!
-
Pense que te habia entendido, pero en el ejemplo que pones
...se pasa 1A, devolveria 1B si se pasa 4C devolveria 5C ,....
Los dos primeros tienen 1 y cambia la letra, pero en el segundo caso cambia el numero pero se mantiene la letra, no entendí.
Salvo que se trate de una lista que no necesariamente tenga un patron y lo que se quiere es: "dado un valor devuelveme el que sigue", en ese caso seria como lo puso Jeronimo, trabajar sobre el posicionamiento y en todo caso puedes cambiar el listbox por un arreglo en memoria, ya seria opcional pero la lógica seria esa.
Sin embargo, si logras determinar un patron se puede concebir una formula y de alli no tendrias que almacenar nada sino manipular la formula, sino te queda ir a los datos almacenados.
Saludos
-
A ver la letra solo cambia cuando se llega al tope y se reinicia el numero a 1.
YA me has ayudado mucho y con la funcion que armaste logre hacer lo que necesitaba fijate.
Const Tope = 5
Private Function DevuelveValor(Actual As String) As String
Dim Letra As String
Dim Num As Byte
Letra = Right(Actual, 1)
Letra = Asc(Letra)
Num = Val(Actual) + 1
If Num > Tope Then
DevuelveValor = "1" & Chr$(Letra + 1)
Else
DevuelveValor = Val(Actual) + 1 & Right(Actual, 1) 'El Val de un numero con cualquier letra siempre sera el numero
End If
End Function
Private Sub Command2_Click()
Debug.Print DevuelveValor("2B") 'devuelve 3B por que es el siguiente valido
Debug.Print DevuelveValor("1A") 'devuelve 2A por que es el siguiente valido
Debug.Print DevuelveValor("5B") 'devuelve 1C por que el tope es 5
End Sub
-
Estaba escribiendo cuando vi que ya habías resuelto el problema.
Me alegro.
Saludos.
Jerónimo