Hacer un falso autonumerable si fuera posible en letra
Para una tabla de huéspedes de la que tengo que combinar con word para realizar unos partes y estos tienen que ir numerados en letra ej uno, dos, tres, etc.
Alfredo, con un único campo Id no puedes. Sí podrías si tuvieras un campo IdCliente, autonumérico y en otro campo hacer la transformación. Por ejemplo, supongamos que tengo una tabla con IdCliente, donde le añado otro campo OtroId texto. Si hago un formulario con ésta tabla
En este caso, ya que hay datos preexistentes, le pongo en el evento Al recibir el enfoque del cuadro de texto OtroId le digo
Private Sub OtroId_GotFocus() OtroId = Convertir([IdCliente]) End Sub
Y en un módulo declaro la función
Public Function Convertir(ByVal value As Double) As String Select Case value Case 0: Convertir = "CERO" Case 1: Convertir = "UNO" Case 2: Convertir = "DOS" Case 3: Convertir = "TRES" Case 4: Convertir = "CUATRO" Case 5: Convertir = "CINCO" Case 6: Convertir = "SEIS" Case 7: Convertir = "SIETE" Case 8: Convertir = "OCHO" Case 9: Convertir = "NUEVE" Case 10: Convertir = "DIEZ" Case 11: Convertir = "ONCE" Case 12: Convertir = "DOCE" Case 13: Convertir = "TRECE" Case 14: Convertir = "CATORCE" Case 15: Convertir = "QUINCE" Case Is < 20: Convertir = "DIECI" & Convertir(value - 10) Case 20: Convertir = "VEINTE" Case Is < 30: Convertir = "VEINTI" & Convertir(value - 20) Case 30: Convertir = "TREINTA" Case 40: Convertir = "CUARENTA" Case 50: Convertir = "CINCUENTA" Case 60: Convertir = "SESENTA" Case 70: Convertir = "SETENTA" Case 80: Convertir = "OCHENTA" Case 90: Convertir = "NOVENTA" Case Is < 100: Convertir = Convertir(Int(value \ 10) * 10) & " Y " & Convertir(value Mod 10) Case 100: Convertir = "CIEN" Case Is < 200: Convertir = "CIENTO " & Convertir(value - 100) Case 200, 300, 400, 600, 800: Convertir = Convertir(Int(value \ 100)) & "CIENTOS" Case 500: Convertir = "QUINIENTOS" Case 700: Convertir = "SETECIENTOS" Case 900: Convertir = "NOVECIENTOS" Case Is < 1000: Convertir = Convertir(Int(value \ 100) * 100) & " " & Convertir(value Mod 100) Case 1000: Convertir = "MIL" Case Is < 2000: Convertir = "MIL " & Convertir(value Mod 1000) Case Is < 1000000: Convertir = Convertir(Int(value \ 1000)) & " MIL" If value Mod 1000 Then Convertir = Convertir & " " & Convertir(value Mod 1000) Case 1000000: Convertir = "UN MILLON" Case Is < 2000000: Convertir = "UN MILLON " & Convertir(value Mod 1000000) Case Is < 1000000000000# Convertir = Convertir(Int(value / 1000000)) & " MILLONES " If (value - Int(value / 1000000) * 1000000) Then Convertir = Trim(Convertir) & " " & Convertir(value - Int(value / 1000000) * 1000000) Case 1000000000000#: Convertir = "UN BILLON" Case Is < 2000000000000#: Convertir = "UN BILLON " & Convertir(value - Int(value / 1000000000000#) * 1000000000000#) Case Else Convertir = Convertir(Int(value / 1000000000000#)) & " BILLONES" If (value - Int(value / 1000000000000#) * 1000000000000#) Then Convertir = Convertir & " " & Convertir(value - Int(value / 1000000000000#) * 1000000000000#) End Select End Function
Pero puedes hacerlo de muchas formas.
Gracias esta genial.
lo que pasa es que yo no quería utilizar un campo auto-numerable de access sino crearlo y no se hacerlo.
muchas gracias y Felices Reyes.
Puedes hacerlo de muchas formas. Lo que no me queda claro es si quieres que desde un formulario te añada un campo Idcliente numérico a la tabla(aunque ya tenga registros), o si teniendo un campo Idcliente en la tabla, que trabaje como un autonumérico pero sin serlo. Por ejemplo, en la tabla Copia el campo IdCliente es numérico. Luego en el formulario
En este caso, en el evento Al activar registro del formulario le digo
Private Sub Form_Current() If Me.NewRecord Then IdCliente = Nz(DLast("idcliente", "copia")) + 1 End If OtroId = Convertir([IdCliente]) End Sub
Es decir, que si es un registro nuevo, el valor de Idcliente sea igual al del valor anterior más uno. Se lo digo así, por si te desplazaras por los registros, como no son "nuevos" no te modifica el valor que ya tienen.
Es más podrías suprimir el campo Idcliente, que te quedaría así,
poniendo el evento anterior como
Private Sub Form_Current() If Me.NewRecord Then Dim i As Long i = Nz(DCount("*", "copia")) + 1 OtroId = Convertir("" & i & "") End If End Sub
En este caso, te "cuenta" los registros que hay y su valor lo transforma en texto. El inconveniente de este sistema es que supongamos que la tabla tiene 20 registros. Si eliminas uno cualquiera, cuando "vuelva a contar" se encontraría con que ahora hay 19 registros, por tanto te "repetiría" el OtroId como 20. Por eso es conveniente usar un campo numérico.
De todas formas, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando dos o tres ejemplos.
Si lo haces, en el asunto del mensaje pon tu alias Alfredo Sanz, ya que si no sé quien me escribe ni los abro. Y ahora me voy a jugar con el jersey que me han traído los reyes.
- Compartir respuesta