Optimizar macro

La verdad soy nuevo con las macros asi que no se mucho de códigos, pero quisiera poder optimizar el siguiente código., ya que, si realiza la tarea que necesito pero me parece que puede optimizarse; lo que más necesito es que cuando ya tengo muchos datos capturados en la hoja de excel "captura" tiene que buscar la primera celda vacía y para esto tiene que recorrer todos los datos capturados., como haría para mejorar esto, y en general todo el código.
Private Sub CommandButton2_Click()
Application.ScreenUpdating = True
Sheets("CAPTURA").Select
Range("a1").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell = TextBox1.Value
ActiveCell.Offset(0, 1).Select
If OptionButton1 = True Then
ActiveCell = "m"
Else
If OptionButton2 = True Then
ActiveCell = "f"
End If
End If
ActiveCell.Offset(0, 1).Select
If OptionButton3 = True Then
ActiveCell = "si"
Else
If OptionButton4 = True Then
ActiveCell = "no"
End If
End If
ActiveCell.Offset(0, 1).Select
If OptionButton5 = True Then
ActiveCell = "si"
Else
If OptionButton6 = True Then
ActiveCell = "no"
End If
End If
ActiveCell.Offset(0, 1).Select
If OptionButton7 = True Then
ActiveCell = "si"
Else
If OptionButton8 = True Then
ActiveCell = "no"
End If
End If
ActiveCell.Offset(0, 5).Select
ActiveCell = ComboBox1
ActiveCell.Offset(0, 2).Select
If OptionButton9 = True Then
ActiveCell = "si"
End If
ActiveCell.Offset(0, 3).Select
ActiveCell = ComboBox2
Sheets("CAPTURA").Select
Range("a1").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
TextBox1 = Empty
OptionButton1 = Empty
OptionButton2 = Empty
OptionButton3 = Empty
OptionButton4 = Empty
OptionButton5 = Empty
OptionButton6 = Empty
OptionButton7 = Empty
OptionButton8 = Empty
OptionButton9 = Empty
ComboBox1 = Empty
ComboBox2 = Empty
ComboBox3 = Empty
TextBox1.SetFocus
End Sub

2 Respuestas

Respuesta
2
En mi página de macros encontrarás varias instrucciones para encontrar fin de rangos.
Voy a utilizar la más corriente que es buscar de abajo hacia arriba en col A
Sheets("CAPTURA").Select
Range("A65536").End(xlup).Offset(1,0).Select
uso Offset para posicionarme ya en la primer vacía, esto es ahora ActiveCell
Luego no es necesario que 1ro selecciones la celda para luego moverle el dato. Directamente con Offset(fila, col) le indicás en qué col lo querés.
ActiveCell = TextBox1.Value
If OptionButton1 = True Then
ActiveCell.Offset(0,1) = "m"
Else
If OptionButton2 = True Then
ActiveCell.Offset(0,1) = "f"
End If
Para los OptionButton3 y 4 será : ActiveCell. Offset(0,2) y así vas incrementando el nro de col
Tampoco es necesario comparar cada optionbuttton. Si solo son 2 en cada frame o grupo, si uno no es true necesariamente será true el otro
If OptionButton3 = True Then
ActiveCell.Offset(0,2) = "si"
Else
ActiveCell.Offset(0,2) = "no"
End If
También se puede optimizar la parte de la limpieza de los controles... pero esa rutina ya la dejé muchas veces aquí en el tablón... sino dejá una nueva consulta una vez finalizada ésta y con mucho gusto te la responderé
PD) Te recomiendo especialmente mi manual de Programación VBA...
Respuesta
2
Sustituir esto puede acelerar tu codigo si tienes muchas filas
Sustituye esto
Range("a1").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
por esto
Dim i As Integer
i = 1
Do While Not Cells(i, 1).Value = ""
i = i + 1
Loop
Cells(i, 1).Select
Espero te ayude. Cualquier cosa me escribes.
No olvides finalizar la pregunta
Bacter

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas