Archive

Posts Tagged ‘If’

Pedir confirmación antes de ejecutar una macro en Excel

November 15, 2012 2 comments

Cuando escribimos una macro, siempre lo hacemos a conciencia y sabiendo los cambios que hará, pero para el usuario final, siempre debemos dejarle la decisión de aplicar los cambios o no.

Pareciera algo contradictorio, pero para cualquier aplicación, siempre es recomendable enviar un aviso informando al usuario que está a punto de ejecutar una acción y lo dejamos a su consideración.

El siguiente código, dentro de su simpleza contiene la lógica de decidir si sí o no continuamos la ejecución de la macro.

Cómo funciona

Primeramente asignamos una variable llamada Resp que es la que almacenará el resultado de la clase MsgBox, cuyos  valores serán Si o No (vbYes, vbNo).

La lógica del código es:

Si Resp es igual a SI, entonces ejecuta el código

Sino

Muestra un mensaje o ejecuta otro código

Código de la macro

Sub Confirmar()
Dim Resp As Byte
Resp = MsgBox("Deseas continuar con la ejeción de la macro?", _
    vbQuestion + vbYesNo, "EXCELeINFO")
If Resp = vbYes Then
    MsgBox "Se eligió continuar...", vbExclamation, "EXCELeINFO"
    'Aquí se ejecutaría el código
Else
    MsgBox "Se eligió cancelar...", vbCritical, "EXCELeINFO"
End If
End Sub

Animación de la macro en ejecución

Pedir confirmación antes de ejecutar

Categories: Excel, Macros, Trucos Tags: , , ,

Eliminar filas en Excel que no cumplan una condición, largo, contenido, color

October 10, 2012 1 comment

Este tip me ha ayudado a depurar bases de datos donde, por ejemplo, necesito que en la columna Número telefónico sólo haya números con un largo de 10 caracteres.

Cómo funciona

En la imagen de ejemplo tenemos una tabla con 2 columnas: NOMBRE, TELEFONO. Elegimos la celda B2 y corremos la siguiente macro:

Sub EliminarFilas()
'Hacemos un bucle Do While el cual se ejecutará hasta que haya una celda vacía
Do While ActiveCell.Value <> ""
    'La condición es que si el largo es diferente a 10...
    If Len(ActiveCell) <> 10 Then
        '... elimina la fila
        ActiveCell.EntireRow.Delete
        ActiveCell.Offset(-1, 0).Select
    Else
    End If
    'Recorre una fila hacia abajo
    ActiveCell.Offset(1, 0).Select
Loop
End Sub

Resultado

Sólo quedarán las filas donde haya habido números a 10 dígitos

image

Otras condiciones

La macro anterior tiene la siguiente línea la cual es la que condiciona el largo de la celda.

If Len(ActiveCell) <> 10 Then

Pero también puede ser que queramos condicionar contenido o formato de la celda.

Ejemplos de otras codiciones:

'Eliminia diferente a largo de 10
If Len(ActiveCell) <> 10 Then

'Elimina diferentes a 1234567890
If ActiveCell.Value <> "1234567890" Then

'Eliminar los que tengan fondo rojo
If ActiveCell.Interior.ColorIndex = 3 Then

'Eliminar que comiencen con ABC""
If Mid(ActiveCell.Value, 1, 3) = "ABC" Then

Macro para convertir serie en fecha en Excel

April 13, 2011 6 comments

Twittear este post Compartir en Facebook

En base a una consulta en los foros de TODOEXCEL donde solicitan que una serie de números, por ejemplo “140382” se convirtiera a formato de fecha “14-mar-11”, aprovecho para compartir la macro que realiza tal función.

Código:

'---------------------------------------------------------------------------------------
' Procedure : EXCELeINFOConvertirSerieEnFecha
' Author    : Sergio A Campos H
' Date      : 13/04/2011
' Purpose   : Convertir serie en fecha
'---------------------------------------------------------------------------------------
'
Sub EXCELeINFOConvertirSerieEnFecha()
    Dim Celda, Dia, Mes, Anio, FechaCompleta, Cuenta
    Application.Calculation = xlCalculationManual
    Application.StatusBar = "Convirtiendo ..."
    Cuenta = 0
    For Each Celda In Selection
        If Len(Celda.Value) = 5 Then
            Fecha = "0" & Celda.Value
        Else
            Fecha = Celda.Value
            If Len(Celda.Value) < 5 Then
                Cuenta = Cuenta + 1
            End If
        End If
        Anio = Right(Fecha, 2)
        Mes = Mid(Fecha, 3, 2)
        Dia = Left(Fecha, 2)
        Unidos = Mes & "-" & Dia & "-" & Anio
        FechaCompleta = WorksheetFunction.Text(Unidos, "dd-mmm-yyy")
        Celda.Value = FechaCompleta
    Next Celda
    Application.Calculation = xlCalculationAutomatic
    Application.StatusBar = False
    MsgBox Cuenta & " celdas con longitud menor a 5", vbInformation
End Sub