Error de compilación en Access, no se esperaba un módulo

Intentando aplicar códigos publicados, Access me presenta "error de compilación, se esperaba una variable o procedimiento, no un módulo"

Dando por hecho que no se trata de un error en los códigos (no he visto comentarios al respecto), a ver si alguien puede ayudarme con esto. Tal vez un ejemplo sirva para aclarar los demás; en este último caso, para validar la letra del DNI acudí a el código siguiente:

Function LetraNif(strA As String) As String 
Dim cCADENA As String 
Dim cNUMEROS As String 
Dim strT As String, strB As String 
Dim a#, NIF#, b#, c# 
Dim i As Integer 
LetraNif = '' 
cNUMEROS = '0123456789' 
cCADENA = 'TRWAGMYFPDXBNJZSQVHLCKE' 
strT = Trim$(strA) 
If Len(strT) = 0 Then Exit Function 
strB = '' 
'---Dejar solo los numeros...
For i = 1 To Len(strA) 
If InStr(1, cNUMEROS, Mid$(strA, i, 1)) Then 
strB = strB + Mid$(strA, i, 1) 
End If 
Next 
strA = strB 
a# = 0 
NIF# = Val(strA) 
Do 
b# = Int(NIF# / 24) 
c# = NIF# - (24 * b#) 
a# = a# + c# 
NIF# = b# 
Loop While b# <> 0 
b# = Int(a# / 23) 
c# = a# - (23 * b#) 
LetraNif = Mid$(cCADENA, c# + 1, 1) 
End Function

(Después de cambiar las comillas simples por las dobles -porque me daba error-, en la ventana de depuración funcionaba perfectamente: Print LetraNIF ('1623532') = P...)

En el formulario, al evento después de actualizar del cuadro de texto donde va el número del DNI el procedimiento

Private Sub DNI_AfterUpdate () 
Letra = LetraNIF (DNI) 
End Sub

Es el que me presenta el mensaje de error, deteniéndose el vba en LetraNIF

1 respuesta

Respuesta
2

¿La has declarado Public o Private?

Personalmente creo que es mejor. Si tengo un formulario con dos cuadros de texto Texto1 y Texto2

El código lo veo más didáctico

Public Function LetraNIF(DNI As Long) As String
Dim tmp As Long
tmp = DNI - (Int(DNI / 23) * 23)
Select Case tmp
Case 0, 23: LetraNIF = "T"
Case 1: LetraNIF = "R"
Case 2: LetraNIF = "W"
Case 3: LetraNIF = "A"
Case 4: LetraNIF = "G"
Case 5: LetraNIF = "M"
Case 6: LetraNIF = "Y"
Case 7: LetraNIF = "F"
Case 8: LetraNIF = "P"
Case 9: LetraNIF = "D"
Case 10: LetraNIF = "X"
Case 11: LetraNIF = "B"
Case 12: LetraNIF = "N"
Case 13: LetraNIF = "J"
Case 14: LetraNIF = "Z"
Case 15: LetraNIF = "S"
Case 16: LetraNIF = "Q"
Case 17: LetraNIF = "V"
Case 18: LetraNIF = "H"
Case 19: LetraNIF = "L"
Case 20: LetraNIF = "C"
Case 21: LetraNIF = "K"
Case 22: LetraNIF = "E"
Case Else: LetraNIF = "Error"
End Select
End Function
Private Sub Texto1_AfterUpdate()
Texto2 = LetraNIF([Texto1])
End Sub

Nuevamente Gracias Icue por tu ayuda pero me sigue dando el mismo resultado así que, entiendo que algo mal (¿configurado?) en Access tiene que ser la causa de que no me funcione algo comprobado...

1º- si al crear una función no la inicias con Public ¿es Private?

2º- hay que indicarle algo (en algún menú, opción) a Access para que no de estos errores?

3º- este es un ejemplo concreto pero obtengo el mismo resultado al cargar (llamar) otras funciones que he probado

A la primera pregunta te diré que no. Tienes que decirle si es publica o privada

A la segunda, se puede hacer una comprobación de errores, tipo

On error...

A la tercera. Como no sé lo que has puesto no te puedo decir nada.

Te mando un ejemplo por correo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas