Access - No coinciden los tipos

 
Vista:
Imágen de perfil de Samuel

No coinciden los tipos

Publicado por Samuel (7 intervenciones) el 25/06/2015 20:46:05
Quiero ejecutar esta función en un cuadro de texto pero me dice que no coinciden los tipos
El código es este:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
Public Function RFC(nombre As String, _
paterno As String, _
materno As String, _
nacimiento As Date) As String
 
Dim nombreRFC, paternoRFC, maternoRFC, claveRFC As String
 
'Aplicar formato y remover palabras y nombres de textos
nombreRFC = RemoverNombres(RemoverPalabras(FormatoTextoRFC(nombre)))
paternoRFC = RemoverPalabras(FormatoTextoRFC(paterno))
maternoRFC = RemoverPalabras(FormatoTextoRFC(materno))
 
'Generar las 4 primeras letras y sustituir palabras prohibidas
claveRFC = SustituirProhibidas(LetrasRFC(nombreRFC, paternoRFC, maternoRFC))
 
'Concatenar dígitos de fecha de nacimiento
claveRFC = claveRFC & Format(nacimiento, "yymmdd")
 
'Generar homonimia y concatenar al RFC
claveRFC = claveRFC & Homoclave(FormatoTextoRFC(nombre), _
FormatoTextoRFC(paterno), FormatoTextoRFC(materno))
 
'Generar dígito verificador y concatenar al RFC
claveRFC = claveRFC & DigitoVerificador(claveRFC)
 
'Devolver RFC final
RFC = claveRFC
End Function
 
Private Function FormatoTextoRFC(ByVal texto As String) As String
 
texto = UCase(texto)
texto = Replace(texto, "Á", "A")
texto = Replace(texto, "É", "E")
texto = Replace(texto, "Í", "I")
texto = Replace(texto, "Ó", "O")
texto = Replace(texto, "Ú", "U")
 
FormatoTextoRFC = texto
End Function
 
Private Function RemoverPalabras(ByVal texto As String) As String
 
Dim palabras As Variant
Dim i As Integer
 
palabras = Array(" PARA ", " AND ", " CON ", " DEL ", " LAS ", " LOS ", _
" MAC ", " POR ", " SUS ", " THE ", " VAN ", " VON ", " AL ", " DE ", _
" EL ", " EN ", " LA ", " MC ", " MI ", " OF ", " A ", " E ", " Y ")
 
texto = " " & texto
For i = LBound(palabras) To UBound(palabras)
    texto = Replace(texto, palabras(i), " ")
Next i
 
RemoverPalabras = Trim(texto)
End Function
 
Private Function RemoverNombres(ByVal texto As String) As String
 
Dim nombres As Variant
Dim i As Integer
 
nombres = Array(" MARIA ", " JOSE ", " MA. ", " MA ", " J. ", " J ")
 
If InStr(texto, " ") > 0 Then
    texto = " " & texto
    For i = LBound(nombres) To UBound(nombres)
        texto = Replace(texto, nombres(i), " ")
    Next i
End If
 
RemoverNombres = Trim(texto)
End Function
 
Private Function LetrasRFC(ByVal nombre As String, _
ByVal paterno As String, _
ByVal materno As String) As String
 
Dim vocales, vocal, letras As String
Dim i As Integer
 
vocales = "AEIOU"
 
If Len(materno) = 0 Then
    letras = Left(paterno, 2) & Left(nombre, 2)
ElseIf Len(paterno) < 3 Then
    letras = Left(paterno, 1) & Left(materno, 1) & Left(nombre, 2)
Else
    For i = 2 To Len(paterno)
        If InStr(vocales, Mid(paterno, i, 1)) > 0 Then
            vocal = Mid(paterno, i, 1)
            Exit For
        End If
    Next i
    letras = Left(paterno, 1) & vocal & Left(materno, 1) & Left(nombre, 1)
End If
 
LetrasRFC = letras
End Function
 
Private Function SustituirProhibidas(ByVal texto As String) As String
 
Dim prohibidas As Variant
Dim i As Integer
 
prohibidas = Array("BUEI", "BUEY", "CACA", "CACO", "CAGA", "CAGO", _
"CAKA", "CAKO", "COGE", "COJA", "COJE", "COJI", "COJO", "CULO", _
"FETO", "GUEY", "JOTO", "KACA", "KACO", "KAGA", "KAGO", "KAKA", _
"KOGE", "KOJO", "KULO", "MAME", "MAMO", "MEAR", "MEAS", "MEON", _
"MION", "MOCO", "MULA", "PEDA", "PEDO", "PENE", "PUTA", "PUTO", _
"QULO", "RATA", "RUIN")
 
For i = LBound(prohibidas) To UBound(prohibidas)
    texto = Replace(texto, prohibidas(i), Left(texto, 3) & "X")
Next i
 
SustituirProhibidas = texto
End Function
 
Private Function Homoclave(ByVal nombre As String, _
ByVal paterno As String, _
ByVal materno As String) As String
 
Dim nombreCompleto, cadenaNums, equivalencia, caracter As String
Dim i, numero1, numero2, suma, cociente, residuo As Integer
 
equivalencia = "123456789ABCDEFGHIJKLMNPQRSTUVWXYZ"
nombreCompleto = nombre & " " & paterno & " " & materno
 
For i = 1 To Len(nombreCompleto)
    caracter = Mid(nombreCompleto, i, 1)
    Select Case caracter
        Case " "
            cadenaNums = cadenaNums & "00"
        Case "&"
            cadenaNums = cadenaNums & "10"
        Case "Ñ"
            cadenaNums = cadenaNums & "40"
        Case "A" To "I"
            cadenaNums = cadenaNums & CStr(Asc(caracter) - 54)
        Case "J" To "R"
            cadenaNums = cadenaNums & CStr(Asc(caracter) - 53)
        Case "S" To "Z"
            cadenaNums = cadenaNums & CStr(Asc(caracter) - 51)
    End Select
Next i
 
cadenaNums = "0" & cadenaNums
 
For i = 1 To Len(cadenaNums) - 1
    numero1 = Val(Mid(cadenaNums, i, 2))
    numero2 = Val(Mid(cadenaNums, i + 1, 1))
    suma = suma + numero1 * numero2
Next i
 
cociente = Int(Val(Right(CStr(suma), 3)) / 34)
residuo = Val(Right(CStr(suma), 3)) Mod 34
 
Homoclave = Mid(equivalencia, cociente + 1, 1) & _
Mid(equivalencia, residuo + 1, 1)
End Function
 
Private Function DigitoVerificador(ByVal texto As String) As String
 
Dim cadenaNums, caracter, digito As String
Dim i, j, cont, numero, suma, residuo As Integer
 
For i = 1 To Len(texto)
    caracter = Mid(texto, i, 1)
    Select Case caracter
        Case " "
            cadenaNums = cadenaNums & "37"
        Case "&"
            cadenaNums = cadenaNums & "24"
        Case "Ñ"
            cadenaNums = cadenaNums & "38"
        Case "A" To "N"
            cadenaNums = cadenaNums & CStr(Asc(caracter) - 55)
        Case "O" To "Z"
            cadenaNums = cadenaNums & CStr(Asc(caracter) - 54)
        Case "0" To "9"
            cadenaNums = cadenaNums & Format(caracter, "00")
    End Select
Next i
 
cont = 0
For j = 1 To 23 Step 2
    numero = Val(Mid(cadenaNums, j, 2))
    suma = suma + (numero * (13 - cont))
    cont = cont + 1
Next j
 
residuo = suma Mod 11
 
Select Case residuo
    Case 0:
        digito = "0"
    Case 10:
        digito = "A"
    Case Else
        digito = 11 - residuo
End Select
 
DigitoVerificador = digito
End Function

Espero que me puedan ayudar
De Antemano Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

No coinciden los tipos

Publicado por Neckkito (1157 intervenciones) el 26/06/2015 15:28:54
Samuel:

Cuando os dé un error de código lo que se necesita para entender el error es, básicamente, tres cosas:

- El número de error
- La descripción del error
- Cuando le das al botón "Depurar" indicar qué línea se marca en amarillo.

Con el "pedazo" código que tienes es imposible darte una solución. Sólo comentarte que a la función le pasas unos argumentos. Comprueba que, cuando se los pasas, los 3 primeros son de tipo texto y que el último es de tipo fecha.

Por otra parte decirte que en tu línea

Dim nombreRFC, paternoRFC, maternoRFC, claveRFC As String

salvo que lo hayas hecho adrede, no estás indicando que todas las variables son String. Estás indicando que la última (claveRFC) es string, y el resto son Variant. Si las quieres explícitamente como cadenas de texto debes declararlas así:

Dim var1 as string, var2 as string, etc.

Como esta tienes unas cuantas más en tu código.

Pero bueno... sin más datos difícil es contestar tu consulta.

Saludos,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar