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 Sub
2) 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