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.

Respuesta
2

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.

¡Gracias! 

es para quitarse el sobrero como nos atendéis.

yo me quito el que me han traído sus majestades.

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas