miércoles, 16 de febrero de 2011

Usando una macro de excel para invocar putty

En ocasiones, por necesidades operativas tenemos que  loguearnos a una serie de servidores, para hacer x o y actividad. Para lo cual tenemos una hoja de excel parecida a la siguiente:

  
¿No sería mejor que al dar doble click en la celda con la dirección ip se invocara inmediatamente putty en esa ip?
Para conseguirlo necesitamos:
  1. Crear un libro de excel con capacidad de macros (.xlsm)
  2. Distinguir cuando se trata de una ip 
  3. Personalizar el evento de doble click para que haga la validación correspondiente
  4. Invocar putty
1. Guardamos nuestro libro de excel seleccionando el formato "Libro de Excel habilitado para macros (*.xlsm)". Presionamos ALT+F11 para invocar el entorno de desarrollo.
2. Distinguir cuando se trata una ip.
Dando doble click en Thisworkbook dentro del explorador de proyectos,

agregamos la siguiente función Boolean al libro
Private Function Is_IPV4_Address(ByVal pstrIp As String) As Boolean
   
    Dim lavarCompos As Variant
    Dim varCompo As Variant
    Dim intValue As Integer
    On Error Resume Next
    Is_IPV4_Address = False
    lavarCompos = Split(Trim(pstrIp), ".")
    If UBound(lavarCompos) = 3 Then
        For Each varCompo In lavarCompos
            intValue = CInt(varCompo)
            If intValue >= 0 And intValue <= 255 Then
                Is_IPV4_Address = True And CInt(lavarCompos(0)) > 0
            Else
                Is_IPV4_Address = False
                Exit For
            End If
        Next
    End If
End Function

Esta sencilla función simplemente dará un valor de verdadero cuando se le proporcione como argumento una cadena separable por puntos(.)  y que cada una de las cadenas entre los puntos sea un punto. Adicionalmente deben ser 4 ternas de numeros, es decir algo así como una dirección ip.

3. Personalizar el evento doble clic.
Basta con agregar un evento con la siguiente cabecera:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean
Es decir vamos a hacer nuestra validacion previamente al evento doble clic. Aqui es importante notar el parametro Cancel, ya que en caso de que el contenido de la celda en que se hace doble clic (el parametro Target) sea una dirección ip invocaremos nuestro codigo y cancelaremos la acción predeterminada del doble clic dandole el valor de True al parametro Cancel.

4. Invocar putty
Eso lo conseguimos invocando el procedimiento Shell asi:
Shell "C:\Archivos de Programa\putty\putty.exe " & Target.Text, vbNormalFocus
He de hacer notar que efectivamente la ruta de putty se encuentra en hard code. Sin embargo esto lo puede cambiar cada quien en la implementación de este ejemplo.

Así sin mas preambulos nuestro evento quedaría de la siguiente forma:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Is_IPV4_Address(Trim(Target.Text)) Then
        Shell "C:\Archivos de Programa\putty\putty.exe " & Target.Text, vbNormalFocus
        Cancel = True
    End If
End Sub

Y se veria asi:



Pueden descargar el archivo aqui

0 comentarios:

Publicar un comentario