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:
Espero que me puedan ayudar
De Antemano Gracias
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
0