¿Como puedo mejorar la programación en VB para excel?

Para Elsa. Buenas noches. Tengo un libro en excel para administrar una Biblioteca y necesito optimizar el código. De manera que no sea redundante y ejecute las operaciones con el mínimo consumo de recursos del computador. Gracias... Andrés Álvarez . Por otra parte el código de la fecha funciona perfectamente pero el de la hora no lo hace me coloca 2,8767564664.

1 Respuesta

Respuesta
3

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í ;)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas