Userform muy lento

Otra vez me he quedado estancado y necesito ayuda.
Lo primero. ¿Me podies aconsejar algún curso online o de venta por internet para asentar las bases de VBA? Por ahora mirando en internet y con alguna pregunta me las arreglo pero me gustaría saber desde 0 cada cosa de VBA. Se que con la practica se aprende pero necesito una guía o asentar las cosas.
Lo segundo y al pastel:
He realizado un userform donde tentó un control de calendario 11.0.(gracias a Luis P) En el mismo userform tengo un montón de combobox donde se cargan los datos de los pacientes y algunos textbox.
Por ahora la cosa esta así:
1)Cargo el userform.
2)Doy a cualquier día del calendario y en los combobox y textbox se cargan los datos según el día que se elige.
Mi idea es que cuando yo cambio los datos de un combobox o textbox se guarde directamente en la celda correspondiente.
He conseguido hacerlo pero al cambiar de día en el calendario tarda mucho en cargar los datos.
Paso código:
Option Explicit
Dim n As Long
Private Sub Calendar1_Click()
Sheets("Citas médicas").Select
    [a65536].Select
    Selection.End(xlUp).Select
    n = Selection.Offset(1, 0).Row
    [o1].Select
Dim I As Long
For I = 1 To n
If Sheets("Citas médicas").Range("a" & I) = Calendar1 Then
    Sheets("Citas médicas").Range("a" & I).Select
    Exit For
End If
Next
'cargamos los datos de la columna paciente'
ComboBox1 = ActiveCell.Offset(0, 2)
ComboBox2 = ActiveCell.Offset(1, 2)
ComboBox3 = ActiveCell.Offset(2, 2)
ComboBox4 = ActiveCell.Offset(3, 2)
ComboBox5 = ActiveCell.Offset(4, 2)
ComboBox6 = ActiveCell.Offset(5, 2)
ComboBox7 = ActiveCell.Offset(6, 2)
ComboBox8 = ActiveCell.Offset(7, 2)
ComboBox9 = ActiveCell.Offset(8, 2)
ComboBox10 = ActiveCell.Offset(9, 2)
ComboBox11 = ActiveCell.Offset(10, 2)
ComboBox12 = ActiveCell.Offset(11, 2)
ComboBox13 = ActiveCell.Offset(12, 2)
ComboBox14 = ActiveCell.Offset(13, 2)
ComboBox15 = ActiveCell.Offset(14, 2)
ComboBox16 = ActiveCell.Offset(15, 2)
ComboBox17 = ActiveCell.Offset(16, 2)
ComboBox18 = ActiveCell.Offset(17, 2)
ComboBox19 = ActiveCell.Offset(18, 2)
'visitas extra de la columna paciente'
TextBox1 = ActiveCell.Offset(20, 1)
TextBox2 = ActiveCell.Offset(21, 1)
TextBox3 = ActiveCell.Offset(22, 1)
TextBox4 = ActiveCell.Offset(23, 1)
ComboBox20 = ActiveCell.Offset(20, 2)
ComboBox21 = ActiveCell.Offset(21, 2)
ComboBox22 = ActiveCell.Offset(22, 2)
ComboBox23 = ActiveCell.Offset(23, 2)
End Sub
HASTA AQUI LA COSA VA PERFECTA Y MUY RAPIDA PERO LO SIGUIENTE ES LO QUE LO HACE LENTO
'Si se cambia al paciente que se guarden los datos en la celda correspondiente'
Private Sub ComboBox1_Change()
ActiveCell.Offset(0, 2) = ComboBox1
End Sub
Private Sub ComboBox2_Change()
ActiveCell.Offset(1, 2) = ComboBox2
End Sub
Private Sub ComboBox3_Change()
ActiveCell.Offset(2, 2) = ComboBox3
End Sub
Private Sub ComboBox4_Change()
ActiveCell.Offset(3, 2) = ComboBox4
End Sub
Private Sub ComboBox5_Change()
ActiveCell.Offset(4, 2) = ComboBox5
End Sub
Private Sub ComboBox6_Change()
ActiveCell.Offset(5, 2) = ComboBox6
End Sub
Private Sub ComboBox7_Change()
ActiveCell.Offset(6, 2) = ComboBox7
End Sub
Private Sub ComboBox8_Change()
ActiveCell.Offset(7, 2) = ComboBox8
End Sub
Private Sub ComboBox9_Change()
ActiveCell.Offset(8, 2) = ComboBox9
End Sub
Private Sub ComboBox10_Change()
ActiveCell.Offset(9, 2) = ComboBox10
End Sub
Private Sub ComboBox11_Change()
ActiveCell.Offset(10, 2) = ComboBox11
End Sub
Private Sub ComboBox12_Change()
ActiveCell.Offset(11, 2) = ComboBox12
End Sub
Private Sub ComboBox13_Change()
ActiveCell.Offset(12, 2) = ComboBox13
End Sub
Private Sub ComboBox14_Change()
ActiveCell.Offset(13, 2) = ComboBox14
End Sub
Private Sub ComboBox15_Change()
ActiveCell.Offset(14, 2) = ComboBox15
End Sub
Private Sub ComboBox16_Change()
ActiveCell.Offset(15, 2) = ComboBox16
End Sub
Private Sub ComboBox17_Change()
ActiveCell.Offset(16, 2) = ComboBox17
End Sub
Private Sub ComboBox18_Change()
ActiveCell.Offset(17, 2) = ComboBox18
End Sub
Private Sub ComboBox19_Change()
ActiveCell.Offset(18, 2) = ComboBox19
End Sub
Private Sub ComboBox20_Change()
ActiveCell.Offset(20, 2) = ComboBox20
End Sub
Private Sub ComboBox21_Change()
ActiveCell.Offset(21, 2) = ComboBox21
End Sub
Private Sub ComboBox22_Change()
ActiveCell.Offset(22, 2) = ComboBox22
End Sub
Private Sub ComboBox23_Change()
ActiveCell.Offset(23, 2) = ComboBox23
End Sub
Private Sub TextBox1_Change()
ActiveCell.Offset(20, 1) = TextBox1
End Sub
Private Sub TextBox2_Change()
ActiveCell.Offset(21, 1) = TextBox2
End Sub
Private Sub TextBox3_Change()
ActiveCell.Offset(22, 1) = TextBox2
End Sub
Private Sub TextBox4_Change()
ActiveCell.Offset(23, 1) = TextBox4
End Sub

Tarda tanto porque realizo muchas procedimientos porque quiero que me guarde los datos directamente.
¿Tenéis alguna idea para que no me tarde tanto o algún código que englobe esto?
Yo estoy seguro que si y por eso os lo pregunto.
Muchas gracias de antemano!

1 Respuesta

Respuesta
1
Estas utilizando muchos eventos change, deberías utilizar un botón para pasar de una vez todos los datos a la columna, si necesitas luego ver una cita especifica, seleccionas el calendario ( la fecha) y al seleccionar debes cargar los controles con la info que exista en la columna 2 a cada uno de los controles del form, así si necesitas modificar algo, solo lo cambias le das click al botón guardar y queda editado en la misma intentar.
El procedimiento de carga es el inverso del que estas utilizando para pasar los datos a la hoja
ActiveCell.Offset(0, 2)=ComboBox1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas