Visual Basic para Aplicaciones - Filtrar datos para entrar un DNI o NIF

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Filtrar datos para entrar un DNI o NIF

Publicado por Ramon (9 intervenciones) el 13/06/2017 18:57:18
Buenas tardes, amigos;
Tengo 65 años y se me ha dado por VBA. No domino el tema y por eso recurro a vosotros. Mi problema es el siguiente:
Intento filtrar un DNI (8 caracteres) o NIE (7), para luego calcular la letra correspondiente, pero no me funciona. Si entro 7 caracteres con letra de prefijo va bien. Si entro 8 caracteres para dni va bien. El problema está cuando entran 7 para DNI u 8 caracteres para NIE.
Os dejo, mi pobre código por si alguien se quiere molestar para ayudarme. Muchas gracias por adelantado:


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
Private Sub CommandButton1_Click()
Sheets("Hoja1").Select
 
If Len(nif.Value) > 6 And Len(nif.Value) < 9 Then
    Dim letra_final As String
    Dim resto As Integer
    Dim para_calculo As String
    Do While True
        If tipo = "NIE" And letra <> "" And Len(nif) = 7 Then
            If letra = "X" Or letra = "x" Then
                para_calculo = "0" + nif
            End If
            If letra = "Y" Or letra = "y" Then
                para_calculo = "1" + nif
            End If
            If letra = "Z" Or letra = "z" Then
                para_calculo = "2" + nif
            End If
            Exit Do
        End If
        If tipo = "DNI" And Len(nif) = 8 Then
            letra = ""
            para_calculo = nif
            nif.SetFocus
            Exit Do
        End If
    Loop
    '**********************************************************
    resto = para_calculo Mod 23 + 1
    nif = CStr(nif)
    letra_final = Mid("TRWAGMYFPDXBNJZSQVHLCKE", resto, 1)
    nif.Value = letra + nif + letra_final
    '**********************************************************
    Range("a1000000").End(xlUp).Offset(1, 0).Select
    ActiveCell.Value = nif.Value
    ActiveCell.Offset(0, 1) = arxiu.Value
    ActiveCell.Offset(0, 2) = alta.Value
    ActiveCell.Offset(0, 3) = genere.Value
    ActiveCell.Offset(0, 4) = nom.Value
    ActiveCell.Offset(0, 5) = cognom1.Value
    ActiveCell.Offset(0, 6) = cognom2.Value
    ActiveCell.Offset(0, 7) = frontoffice.Value
    ActiveCell.Offset(0, 8) = backoffice.Value
    ActiveCell.Offset(0, 9) = inter.Value
    ActiveCell.Offset(0, 10) = irer.Value
    ActiveCell.Offset(0, 11) = c_nom.Value
    ActiveCell.Offset(0, 12) = c_potencia.Value
    ActiveCell.Offset(0, 13) = c_regulat.Value
    ActiveCell.Offset(0, 14) = c_bosocial.Value
    ActiveCell.Offset(0, 15) = c_discrimina.Value
    ActiveCell.Offset(0, 16) = c_taigua.Value
    ActiveCell.Offset(0, 17) = c_tgas.Value
Else
    MsgBox "El Nif ha de tener  7 u 8  cifras "
    nif.Value = ""
'    nif.SetFocus
End If
tipo.Value = ""
letra.Value = ""
nif.Value = ""
arxiu.Value = ""
alta.Value = ""
genere.Value = ""
nom.Value = ""
cognom1.Value = ""
cognom2.Value = ""
frontoffice.Value = ""
backoffice.Value = ""
inter.Value = ""
irer.Value = ""
c_nom.Value = ""
c_potencia.Value = ""
c_regulat.Value = ""
c_bosocial.Value = ""
c_discrimina.Value = ""
c_taigua.Value = ""
c_tgas.Value = ""
 
tipo.SetFocus
End Sub
 
Private Sub CommandButton2_Click()
    Unload Me
End Sub
 
Private Sub UserForm_initialize()
    '    Me.Width = 540
    '    Me.Height = 270
    '    Me.Width = Application.Width
    '    Me.Height = Application.Height
    tipo.AddItem "DNI"
    tipo.AddItem "NIE"
 
    letra.AddItem "X"
    letra.AddItem "Y"
    letra.AddItem "Z"
 
    genere.AddItem "HOMBRE"
    genere.AddItem "MUJER"
    genere.AddItem "OTROS"
End Sub
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

Filtrar datos para entrar un DNI o NIF

Publicado por JuanC (565 intervenciones) el 13/06/2017 19:12:08
te paso otra estructura de código más limpia (falta completar)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
If tipo = "NIE" Then
   If VBA.Len(VBA.Trim(nif.Value)) <> 7 Then
      Exit Sub
   End If
 
   Select Case VBA.UCase(letra)
          Case "X": para_calculo = "0" + nif
          Case "Y": para_calculo = "1" + nif
          Case "Z": para_calculo = "2" + nif
          Case Else:
                    Exit Sub
   End Select
 
ElseIf tipo = "DNI" Then
 
       If VBA.Len(VBA.Trim(nif.Value)) <> 8 Then
          Exit Sub
       End If
 
       para_calculo = nif
 
End If
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