Páginas

martes, 27 de mayo de 2014

VBA Excel: Como enviar un email desde Excel con VBA

Primero hay que activar la "librería de objetos de Outlook".  Ir a Tools/References y seleccionar Microsoft Office Outlook Object Library:



Luego de eso, hay que crear un objeto de outlook, en este caso un mail item. Este objeto tendrá sus métodos y propiedades:

Sub SendEmail()

Dim mlook As Outlook.MailItem
Set mlook = Outlook.Application.CreateItem(olMailItem)
mlook.To = "eljayan@gmail.com"
mlook.Subject = "test"
mlook.Send

End Sub

domingo, 25 de mayo de 2014

Gael Monfils bailando en Roland Garros 2014

"Turn Down for What" ante la atenta mirada del dj Bob Sinclar. Tambien se puede ver a Novak haciéndoles barra, me hubiera gustado verlo participar en esa batalla. Todos unos entertainers!

jueves, 22 de mayo de 2014

Esto hice hoy en la oficina, me merezco una galleta por lo menos!

Una función para excel que rastrea el proceso de customs clearance y cada dia va indicando si estamos al dia o atrasados en alguna tarea. Al final indica si se cumplió o no con el KPI.

Function KPI_TRACKING(Adu As Variant, arrival_date As Date, delivery_broker As Date, payment_request As Date, check_delivery_date As Date, submit_date As Date, warehouse_date As Date)

'despliega alertas para saber como va el proceso de clearance.
'comineza por verificar que se haya ingresado la fecha de llegada:
If arrival_date = 0 Then
    KPI_TRACKING = "Enter arrival date."
    Else
'luego se verifica que se haya ingresado la aduana de destino.
    If Adu = 0 Then
        KPI_TRACKING = "Enter ADU."
        Else
'verifica si se ha entregado o no los documentos al broker
        If delivery_broker = 0 Then
'si no se han entregado documentos hay que validar la aduana de destino .
'si es un tramite maritimo hay que entregar los documentos 12 dias antes de la llegada, de lo contrario estamos atrasados.
            If Adu = "028" Then
                If (arrival_date - Date) < 12 Then
                    KPI_TRACKING = "Delivery to broker is late"
                    Else
                    KPI_TRACKING = "On Schedule."
                End If
'si la carga es aerea, hay que entregar la carga 7 dias antes del arribo, de lo contrario estamos atrasados.
            Else
                If (arrival_date - Date) < 7 Then
                    KPI_TRACKING = "Delivery to broker is late."
                    Else
                    KPI_TRACKING = "On Schedule."
                End If
            End If
'si el tramite ya fue entregado al agente lo primero que hay que hacer es verificar que nos hayan enviado la preliquidacion
        Else
'si no nos han enviado la preliquidacion y faltan menos de 4 dias para el arribo, estamos tarde, de lo contrario estamos ok:
            If payment_request = 0 Then
                If arrival_date - Date < 4 Then
                KPI_TRACKING = "Payment request is late."
                Else
                KPI_TRACKING = "On Schedule."
                End If
'si ya nos enviaron la preliquidacion hay que verificar si ya salio el cheque:
            
'AQUI ME QUEDE--------------------
            Else
'si el cheque no ha salido hay que ver si el cheque sale un dia antes de la fecha de arribo.
                If check_delivery_date = 0 Then
                    If (arrival_date - 1) >= Date Then
                        KPI_TRACKING = "On Schedule."
                    Else
                        KPI_TRACKING = "Check is late."
                    End If
'si el cheque ya salió hay que verificar que si ya se hizo la declaracion de impuestos
                Else
'si la declaracion no se ha hecho, hay que ver que se haga dentro de los 3 primeros dias de arribo
                    If submit_date = 0 Then
                        If (Date - arrival_date) > 3 Then
                        KPI_TRACKING = "Declaration is late."
                        Else
                        KPI_TRACKING = "On Schedule."
                        End If
                    Else
'si la declaracion ya se hizo hay que chequear si ya se entregó a bodega.
'si no se ha entregado a bodega:
                        If warehouse_date = 0 Then
'en caso de los embarques maritimos, CONFIRMAR SI EL KPI PARA MARITIMO ES 7
                            If Adu = "028" Then
                                If (Date - arrival_date) <= 7 Then
                                    KPI_TRACKING = "On Schedule"
                                Else
                                    KPI_TRACKING = "Delivery to Warehouse is late."
                                End If
'en caso de embarques aereos, CONFIRMAR SI EL KPI PARA AEREOS ES 6:
                            Else
                                If (Date - arrival_date) <= 6 Then
                                    KPI_TRACKING = "On Schedule"
                                Else
                                    KPI_TRACKING = "Delivery to Warehouse is late."
                                End If
                            End If
'y si ya se entregó a bodega.
                        Else
'En caso de los embarques maritimos
                            If Adu = "028" Then
                                If (warehouse_date - arrival_date) <= 7 Then
                                KPI_TRACKING = "KPI Succeeded."
                                Else
                                KPI_TRACKING = "KPI FAILED."
                                End If
'en caso de los embarques aereos
                            Else
                                If (warehouse_date - arrival_date) <= 6 Then
                                KPI_TRACKING = "KPI Succeeded."
                                Else
                                KPI_TRACKING = "KPI FAILED."
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End If
End If


End Function

miércoles, 21 de mayo de 2014

VBA Excel: Funcion para buscar un texto en todas las hojas de un Libro


Function newclient(clientID As String) As String
Dim count As Integer

For Each Worksheet In Worksheets
    If Not Worksheet.UsedRange.Find(clientID, lookat:=xlWhole) Is Nothing Then
    count = count + 1
    MsgBox (count)
    End If
Next Worksheet

If count > 1 Then
newclient = "Old client"
Else
newclient = "New client"
End If
End Function

martes, 20 de mayo de 2014

VBA Excel: Como agregar un item al menu de boton derecho.

Para agregarlo:

Sub addtoshortcut()
Dim bar As CommandBar
Dim newcontrol As CommandBarButton
deletefromshortcut
Set bar = Application.CommandBars("Cell")
Set newcontrol = bar.Controls.Add _
    (Type:=msoControlButton, ID:=1, _
    temporary:=True)
    With newcontrol
        .Caption = "&Container Count"
        .OnAction = "containercount"
        .Style = msoButtonIconAndCaption
    End With
End Sub

Para dejarlo como estaba:

Sub deletefromshortcut()
    On Error Resume Next
    Application.CommandBars("Cell").Controls _
    ("$Container Count").Delete
End Sub

lunes, 12 de mayo de 2014

VBA Excel: Asignar funciones personalizadas a una categoría

Se debe crear una macro y ejecutarla una sola vez:

Sub add_category()

Application.MacroOptions macro:="calc_adval", Category:=1
Application.MacroOptions macro:="calc_fodinfa", Category:=1
Application.MacroOptions macro:="calc_vat", Category:=1
Application.MacroOptions macro:="calc_liquidation", Category:=1

End Sub

mis funciones cal_val, cal_fodinfa etc... fueron agregadas a la categoría 1 que es Finanzas.

El listado de las categorías donde se pueden colocar las funciones:

Integer
Category
1
Financial
2
Date & Time
3
Math & Trig
4
Statistical
5
Lookup & Reference
6
Database
7
Text
8
Logical
9
Information
10
Commands
11
Customizing
12
Macro Control
13
DDE/External
14
User Defined
15
First custom category
16
Second custom category
17
Third custom category
18
Fourth custom category
19
Fifth custom category
20
Sixth custom category
21
Seventh custom category
22
Eighth custom category
23
Ninth custom category
24
Tenth custom category
25
Eleventh custom category
26
Twelfth custom category
27
Thirteenth custom category
28
Fourteenth custom category
29
Fifteenth custom category
30
Sixteenth custom category
31
Seventeenth custom category
32
Eighteenth custom category

martes, 6 de mayo de 2014

VBA Excel: Como aplicar la funcion Networkdays() para encontrar el numero de dias habiles entre dos fechas

La calve para utilizar cualquier funcion de excel en VBA es:

Application.WorksheetFunction.[Nombre de la funcion]

El resto se llena con la sintaxis normal de cada funcion.

clearance_start = ThisWorkbook.Sheets("samples").Range("ab" & k).Value 
clearance_finish = ThisWorkbook.Sheets("samples").Range("ba" & k).Value 
clearance_days = Application.WorksheetFunction.NetworkDays(clearance_start, clearance_finish)