La solucion que te di funciona.
La idea era simple, lo que tenias que hacer era unos ajustes necesarios para que operara:
Ahi te va el codigo completo:
Private Sub Form_Load()
MaskEdBox1.Mask = "##.###.###-&"
cmdGuardar.Enabled = False
Text1.Text = ""
Text2.Text = ""
End Sub
Private Sub MaskEdBox1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Call Verifica
Text1.SetFocus
End If
End Sub
Public Sub Verifica()
sRut = Trim(MaskEdBox1.Text)
If Es_Rut(sRut, 0) = True Then
If Len(Text1.Text) > 0 Then
If Len(Text2.Text) > 0 Then
cmdGuardar.Enabled = True
Else
cmdGuardar.Enabled = False
End If
Else
cmdGuardar.Enabled = False
End If
Else
cmdGuardar.Enabled = False
End If
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Call Verifica
Text2.SetFocus
End If
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Call Verifica
End If
End Sub
Public Function Es_Rut(ByVal X As String, ByVal Y As Integer) As Boolean
' Funcion que recibe el string con el Rut y lo analiza
' Y=0 no entrega mensaje
' Y=1 mensaje de RUT
' Y=2 mensaje de ficha
' Si es rut entrega Es_Rut=True
' Si no es rut entrega Es_Rut=False
X = Trim(X)
xLargo = Len(X)
xposicion = InStr(X, "-")
If xposicion <> 0 Then
xNumero = Format(Mid$(X, 1, xposicion - 1), "00000000")
xdv = Mid$(X, xposicion + 1, xLargo - xposicion + 1)
If IsNumeric(xNumero) Then
If Len(xdv) = 1 Then
If IsNumeric(dv) Then
xBandera = 1
Else
If UCase(dv) = "K" Then
xBandera = 1
Else
xBandera = 0
End If
End If
Else
xBandera = 0
End If
Else
xBandera = 0
End If
If xBandera = 1 Then
'posiciones : 8 7 6 5 4 3 2 1
'multiplicar por: 3 2 7 6 5 4 3 2
xpos8 = CInt(Mid(xNumero, 1, 1))
xpos7 = CInt(Mid(xNumero, 2, 1))
xpos6 = CInt(Mid(xNumero, 3, 1))
xpos5 = CInt(Mid(xNumero, 4, 1))
xpos4 = CInt(Mid(xNumero, 5, 1))
xpos3 = CInt(Mid(xNumero, 6, 1))
xpos2 = CInt(Mid(xNumero, 7, 1))
xpos1 = CInt(Mid(xNumero, 8, 1))
xSuma = xpos8 * 3 + xpos7 * 2 + xpos6 * 7 + xpos5 * 6 + xpos4 * 5 + xpos3 * 4 + xpos2 * 3 + xpos1 * 2
xentero = Int(xSuma / 11)
xValor = xSuma - xentero * 11
xresto = 11 - xValor
Select Case xresto
Case 0 To 9: dv = CStr(xresto)
Case 10: dv = "K"
Case 11: dv = "0"
End Select
If UCase(xdv) = dv Then
Es_Rut = True
Else
Es_Rut = False
If Y <> 0 Then
If Y = 1 Then
Msg = "El rut correcto debe ser " & Format(CDbl(xNumero), "#,##0") & "-" & dv
Else
Msg = "La ficha correcta debe ser " & Format(CDbl(xNumero), "#,##0") & "-" & dv
End If
MsgBox Msg, vbInformation, "Advertencia"
End If
End If
Else
Es_Rut = False
End If
Else
Es_Rut = False
End If
End Function