Diseño de macros en Excel
Ejercicio. Control de errores
1. Crea una macro que solicite dos números al usuario, los sume y muestre el resultado por pantalla. Debemos tener en cuenta que el usuario podría introducir un dato erróneo. Estos son los pasos que deben efectuarse:
- Definimos las variables
- Recogemos los datos con la función InputBox
- Sumamos los números
- Mostramos el resultado por pantalla con MsgBox
- Usaremos la función On Error GoTo para mostrar un mensaje en caso de que se produzca un error al ejecutar la macro
Esta podría ser una posible solución:
Sub calc()
Dim a As Single
Dim b As Single
On Error GoTo fin
a = InputBox("Primer número")
b = InputBox("Segundo número")
c = a + b
MsgBox "La suma de " & a & " y " & b & " es " & c
Exit Sub
fin:
MsgBox "No son números correctos"
End Sub
2. Crea una macro que, dada una columna de una tabla en Excel que contenga números, recorra las celdas de la columna y copie las celdas con datos negativos a una hoja nueva. Controlar los posibles errores que pudieran surgir. Estos son los pasos que deben efectuarse:
- Definimos las variables
- Seleccionamos la columna entera, partiendo de la base de que estará seleccionada una celda de esa columna.
- Contamos las filas que contienen datos.
- Asignamos el nombre de la hoja actual a una variable. Esto nos permitirá identificar la hoja cuando lo necesitemos.
- Añadimos una hoja nueva donde copiaremos los números negativos. La llamamos “negativos”
- Volvemos a la hoja original.
- Recorremos las celdas de la columna.
- En caso de que la celda contenga un número sea negativo lo copiamos en la hoja “negativos”. Sería conveniente usar un contador de la cantidad de números negativos. Esto nos facilitará colocar el número en la hoja.
- Usaremos la función On Error GoTo para mostrar un mensaje en caso de que se produzca un error al ejecutar la macro
Esta podría ser una posible solución:
Sub Macro()
Dim strNombreHoja As String
Dim intFilas As Integer
Dim intNegativos As Integer
Dim i As Integer
Dim valor As Single
On Error GoTo fin
strNombreHoja = ActiveSheet.Name
Selection.End(xlUp).Select
Range(Selection, Selection.End(xlDown)).Select
intFilas = Selection.Rows.Count
ActiveCell.Offset(0, 0).Select
Sheets.Add
ActiveSheet.Name = "Negativos"
Sheets("Negativos").Range("A1").Value = "Negativos"
Sheets(strNombreHoja).Select
intNegativos = 0
For i = 1 To intFilas
valor = Val(ActiveCell.Value)
If valor < 0 Then
intNegativos = intNegativos + 1
Sheets("Negativos").Select
Sheets("Negativos").Range("A1").Select
ActiveCell.Offset(intNegativos, 0).Select
ActiveCell.Value = valor
Sheets(strNombreHoja).Select
End If
ActiveCell.Offset(1, 0).Select
Next i
Exit Sub
fin:
MsgBox "Se ha producido el error " & Err.Description
End Sub