Ya dejé imágenes en la consulta anterior para que observes que se cargan bien las horas y fechas con el código enviado. Seguramente aún no agregaste esos códigos en el UF de Modificar.
Bien, ¿cómo mejorar la programación? Estos son los errores más frecuentes:
1- Para empezar retirar todo el código que no se utilice. En mi revisión de tus formularios empecé a mirar en el Userform1 el código de un control que luego no lo encontré dibujado.
2- Definir las propiedades de los controles al momento del diseño, desde el panel de Propiedades y no en los eventos. Por ejemplo, no hace falta indicarle a Excel cuánto mide cada columna cada vez que se entra a un control Listbox... se define de antemano desde el panel de Propiedades, salvo que el proceso requiera que éstas sean cambiadas:
ListBox1.ColumnCount = 9
ListBox1.ColumnWidths = 30 & ";" & 53 & ";" & 65 & ";" & 60 & ";" & 150 & ";" & 130 & ";" & 170 & ";" & 90 & ";" & 90
3- Cuando el formulario tiene muchos controles, al momento de limpiarlos utilizar un bucle.
'limpiar conroles de un mismo grupo
For Each ct In Me.Controls
If TypeName(ct) = "TextBox" Then ct.Value = ""
If TypeName(ct) = "CombobBox" Then ct.ListIndex = -1
Next ct
'TextGrup.Value = ""
'TextSubg.Value = ""
'TextSec.Value = ""
'TextIdent.Value = ""
'TextBienesb.Value = ""
' TextCota.Value = ""
'TextAutorb.Value = ""
'TextCoautor.Value = ""
' TextTitulob.Value = ""
'Asigna_CBox.Value = ""
'Tema_Cbox.Value = ""
'TextEdit.Value = ""
'Idioma_Cbox.Value = ""
'TextIsbn.Value = ""
' TextEdic.Value = ""
' TextAñoEdic.Value = ""
' TextTomo.Value = ""
'TextUbica.Value = ""
'Soport_Cbox.Value = ""
' TextConserva.Value = ""
3b - Si solo se requiere limpiar controles de un sector del UF, colocarlos dentro de un Frame (no Imagen) y reemplazar la expresión 'Me' por el nombre del Frame.
Por ejemplo, si tuvieras un botón para limpiar solo los controles contenidos dentro del cuadro marcado de azul:
4- No seleccionar cada celda al momento de enviar o capturar datos, sino utilizar Offset como en la imagen.
ActiveCell.Offset(0, 0).Value = Val(Text_Id.Value)
ActiveCell.Offset(0, 1).Value = Text_Fecha.Value
5 - No seleccionar cada celda al momento de enviarles información a los combox o listbox. En lugar de instrucciones como estas .
Do While ActiveCell.Value <> ""
UserForm1.ListBox1.AddItem
'otras instruccions
ActiveCell.Offset(1, 0).Select
Loop
Utilizar este otro tipo de bucle:
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
For j = 0 To 8
ListBox1.AddItem
ListBox1.List(i, j) = Cells(i, 1).Offset(0, j).Value
Next
Next i
La lista no se agota aquí. Esto es lo que pude observar en 2 de tus formularios.
Sdos.
Elsa
* Para aprender sobre todos los pormenores de los Userforms el tema sigue aquí ;)