Excel TextBox UserForm Error 13 'No Coinciden Los Tipos'

No soy experta en programar en Excel a través del VB pero estoy haciendo un sistema de facturación y necesito que me guarde algunos datos de las retenciones. Hice un UserForm y agregué lo que necesito para luego guardarlo en una hoja. Dentro del Userform unos TextBox me hacen los cálculos pero cuando le doy al botón guardar me arroja el error 13 'No coinciden los tipos'. Me guarda la información en la hoja y hace todo lo que quiero pero me da ese error que no sé como quitar. Seguro es una tontería que no veo pero espero me puedan ayudar. Aquí coloco todo lo que he hecho:

Private Sub TextBox1_Change()

On Error Resume Next
Set busco = Sheets("BASE DE DATOS X FACTURA").Range("B:B").Find(Trim(TextBox1.Value), LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then
TextBox4.Value = busco.Offset(0, 2)
TextBox5.Value = busco.Offset(0, 1)
TextBox6.Value = busco.Offset(0, 0)
TextBox7.Value = busco.Offset(0, -1)
TextBox8.Value = busco.Offset(0, 3)
TextBox9.Value = busco.Offset(0, 6)
TextBox10.Value = busco.Offset(0, 4)
TextBox6 = Format(TextBox6, "00000")
TextBox8 = Format(TextBox8, " #,000.00")
TextBox9 = Format(TextBox9, " #,000.00")
TextBox10 = Format(TextBox10, " #,000.00")
TextBox11 = Format(TextBox11, " #,00")
TextBox12 = Format(TextBox12, " #,000.00")
TextBox13 = Format(TextBox13, " #,000.00")

End If
End Sub
Private Sub TextBox11_Change()

ActiveSheet.Unprotect
TextBox12 = (TextBox11 / 100) * TextBox9 (Aquí es donde me da el error)
TextBox13 = TextBox9 - TextBox12
TextBox9 = Format(TextBox9, " #,000.00")
TextBox11 = Format(TextBox11, " #,00")
TextBox12 = Format(TextBox12, " #,000.00")
TextBox13 = Format(TextBox13, " #,000.00")
ActiveSheet.Protect
End Sub

Private Sub guardar_Click()

ActiveSheet.Unprotect

Dim Fila As Integer
Dim Final As Integer
Dim Registro As Integer
Dim celda, Rango As String
For Fila = 6 To 1000
If Sheets("BASE DE DATOS RETENCIONES").Cells(Fila, 2) = "" Then
Final = Fila
Exit For
End If
Next
For Registro = 6 To Final
If Sheets("BASE DE DATOS RETENCIONES").Cells(Registro, 2) = frm_Retencion.TextBox2 Then
MsgBox "Retención ya Existe!"
frm_Retencion.TextBox1 = ""
frm_Retencion.TextBox2 = ""
frm_Retencion.TextBox3 = ""
frm_Retencion.TextBox4 = ""
frm_Retencion.TextBox5 = ""
frm_Retencion.TextBox6 = ""
frm_Retencion.TextBox7 = ""
frm_Retencion.TextBox8 = ""
frm_Retencion.TextBox9 = ""
frm_Retencion.TextBox10 = ""
frm_Retencion.TextBox11 = ""
frm_Retencion.TextBox12 = ""
frm_Retencion.TextBox13 = ""
Exit Sub
Exit For
End If
Next
If MsgBox("Los Datos Suministrados son Correctos?" + Chr(13) + "Desea Guardar?", vbOKCancel) = vbOK Then
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 1) = frm_Retencion.TextBox3
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 2) = frm_Retencion.TextBox2
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 3) = frm_Retencion.TextBox5
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 4) = frm_Retencion.TextBox4
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 5) = frm_Retencion.TextBox6
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 6) = frm_Retencion.TextBox11
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 7) = frm_Retencion.TextBox12
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 8) = frm_Retencion.TextBox13
frm_Retencion.TextBox1 = ""
frm_Retencion.TextBox2 = ""
frm_Retencion.TextBox3 = ""
frm_Retencion.TextBox4 = ""
frm_Retencion.TextBox5 = ""
frm_Retencion.TextBox6 = ""
frm_Retencion.TextBox7 = ""
frm_Retencion.TextBox8 = ""
frm_Retencion.TextBox9 = ""
frm_Retencion.TextBox10 = ""
frm_Retencion.TextBox11 = ""
frm_Retencion.TextBox12 = ""
frm_Retencion.TextBox13 = ""
Else
Exit Sub
End If

Sheets("BASE DE DATOS RETENCIONES").Cells(Final - 2, 1).Copy
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 1).Select
Selection.PasteSpecial Paste:=xlFormats
Application.CutCopyMode = False
Sheets("BASE DE DATOS RETENCIONES").Cells(Final - 2, 2).Copy
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 2).Select
Selection.PasteSpecial Paste:=xlFormats
Application.CutCopyMode = False
Sheets("BASE DE DATOS RETENCIONES").Cells(Final - 2, 3).Copy
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 3).Select
Selection.PasteSpecial Paste:=xlFormats
Application.CutCopyMode = False
Sheets("BASE DE DATOS RETENCIONES").Cells(Final - 2, 4).Copy
Sheets("BASE DE DATOS RETENCIONES").Cells(Final, 4).Select
Selection.PasteSpecial Paste:=xlFormats
Application.CutCopyMode = False
ActiveSheet.Protect
End Sub

Private Sub cancelar_Click()
Unload Me
End Sub

Seguro hay cosas que están de más pero como les dije anteriormente no sé mucho, sin embargo hace todo lo que quiero a excepción del error que no quiero que lo muestre cada vez que le doy a guardar. Nuevamente espero me puedan ayudar.

2 respuestas

Respuesta
1

H o l a 

prueba esto, para que le considere como numero a los textbox pon VAL

Private Sub TextBox11_Change()
TextBox12 = (Val(TextBox11) / 100) * Val(TextBox9) '(Aquí es donde me da el error)
TextBox13 = Val(TextBox9) - Val(TextBox12)
TextBox9 = Format(TextBox9, " #,000.00")
TextBox11 = Format(TextBox11, " #,00")
TextBox12 = Format(TextBox12, " #,000.00")
TextBox13 = Format(TextBox13, " #,000.00")
End Sub

valora la respuesta para finalizar saludos!

Muchas gracias por responder. No me sirvió. Sigue saliendo el error y en la misma línea. Es como si no le hubiese cambiado nada. 

Hice las prueba y funciona, envíame tu archivo [email protected] para revisarlo

¡Gracias! A la final logré que me saltara el error con lo siguiente:

On Error GoTo NoCoincidenTipos
NoCoincidenTipos:
If Err.Number = 13 Then
Exit Sub
Resume Next
End If

Respuesta
1

Veo un detalle, cuando pones el formato al textbox11

TextBox11 = Format(TextBox11, " #, 00")

Estás poniendo coma #, 00 eso hace que el número se convierta en texto, luego divides un texto entre 100 y te envía el error "13 'No coinciden los tipos'"

Entonces debes poner punto:

TextBox11 = Format(TextBox11, " #.00")

Sin embargo, se debería verificar el dato antes de realizar la división.

Cuando pones un número en formato, el valor del textbox lo estás convirtiendo en un texto, entonces antes de realizar cualquier operación tienes que convertir ese texto a número, utilizando la función CDbl.

Entonces podría ser así:

    If TextBox11.Value <> "" Then
        If IsNumeric(TextBox11.Value) Then
            TextBox12 = (CDbl(TextBox11.Value) / 100) * TextBox9
            TextBox11 = Format(TextBox11, " #.00")
        End If
    End If

Avísame si tienes dudas.

¡Gracias! 

A la final logré que me saltara el error con lo siguiente:

On Error GoTo NoCoincidenTipos
NoCoincidenTipos:
If Err.Number = 13 Then
Exit Sub
Resume Next
End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas