VBA Excel - Dudas sobre ingreso de datos de TextBox que no permita duplicados de una tabla de Excel y formato de fechas.
Tengo 2 dudas sobre la programación de formularios que estoy haciendo, espero puedan ayudarme.
1) Tengo un textbox1 donde ingreso un número de un Documento de Identidad y automáticamente jala los datos a partir de ese número en los otros textbox (por ejemplo en la cabecera de una hoja de excel que contiene N° Documento de Identidad / Apellidos y Nombres / Centro de Costo / Ocupación / ... Etc). Esos datos, al pulsar un CommandButton1, son registrados en una hoja llamada "MatrizMod". Para que me jale datos al ingresar el Documento de Identidad al textbox debo ingresarlo completo los 8 números que lo componen obligatoriamente.
Lo que quiero es que al ingresar el Número de 8 dígitos y presione TAB o de click en otro campo me salga un aviso de que el dato ya ha sido ingresado dado que el número existe en la hoja de registros "MatrizMod" grabado anteriormente (y de ser posible me salga un aviso de si deseo continuar con el ingreso de datos o no, y al poner no se borre lo que ingresé en el textbox1 e ingrese otro número).
He intentado este código que encontré y modifiqué pero no he tenido éxito. Quisiera saber si hay algo que deba agregar:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
dato = TextBox1.Value
contarsi = Application.WorksheetFunction.CountIf(Sheets("MatrizMod").Columns(1), dato)
If contarsi = TextBox1.Value Then
MsgBox "El trabajador ya está en lista, use el botón de Renovación"
TextBox1.SetFocus
Exit Sub
End If
End Sub2) La otra pregunta corresponde a un problema con mi macro. Mi formulario al tener los datos listos, no solo graba los datos de los Textbox, sino agrega fórmulas correspondientes a 2 celdas que están ligadas a una celda con una fecha (que es ingresada de la fecha que contenga en el TextBox9 de mi formulario) pero que no realizan la fórmula y me sale #¡VALOR!, si esa fecha ingresada en mi formulario la vuelvo a tipear sin cambiar formato ni nada, sí acepta la formulación y lanza un resultado. Podría pensar que es por el formato conque lo graba, pero el problema es el mismo número que es ingresado en sí. Adjunto los códigos relacionados a dicho Textbox9:
Private Sub CommandButton1_Click()
Dim emptyRow As Long
Sheets("MatrizMod").Select
emptyRow = Range("A" & Rows.Count).End(xlUp).Row + 1
Cells(emptyRow, 1).Value = TextBox1.Value
(...)
Cells(emptyRow, 7).FormulaR1C1 = "=IF(RC[+2]=""Estable"",""ESTABLE"",INDEX(RC[+3]:RC[+24],1,COUNT(RC[+3]:RC[+24])))"
'INDEX(RC[+3]:RC[+24] donde RC[+3] es la celda donde se coloca el dato de la fecha y en esa celda se da error.
If OptionButton1.Value = True Then
Cells(emptyRow, 9).Value = OptionButton1.Caption
Cells(emptyRow, 10).Value = TextBox9.Value
Else
Cells(emptyRow, 9).Value = "Estable"
Cells(emptyRow, 10).Value = "ESTABLE"
End If
End Sub
Private Sub OptionButton1_Click()
If Me.OptionButton1 Then
(...)
TextBox9.Enabled = True
End If
Dim lngWhite As Long
lngWhite = RGB(255, 255, 255)
If TextBox4.Enabled = True Then
(...)
TextBox9.BackColor = lngWhite
End If
End Sub
Private Sub OptionButton2_Click()
If OptionButton2 = True Then
TextBox9.Enabled = False
ComboBox2.Value = "A Plazo Indeterminado"
(...)
TextBox9.Value = ""
End If
Dim lngGray As Long
lngGray = RGB(216, 208, 200)
TextBox9.BackColor = lngGray
End If
End Sub
Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
(...)
If IsNumeric(TextBox5) Then
TextBox9 = DateAdd("d", MesesRenovar, InicioContrato)
FinContrato = DateValue(TextBox9)
End If
End Sub
