martes, 21 de febrero de 2012

El Objeto QueryTable

El Objeto QueryTable (Tabla de consulta) representa un rango de datos externos en una hoja de calculo, las fuente externas pueden provenir de un servidor de SQL, una base de datos de Microsoft Access o una consulta Web. 

El siguiente procedimiento crea una consulta web para importar una tabla específica.

Si copiamos el siguiente procedimiento en un modulo y le damos a ejecutar observaremos que se ha creado una tabla de datos automáticamente, procedente de la pagina web eleconomista, dicha tabla se actualiza automáticamente cada minuto.

Sub IBEX()
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.eleconomista.es/indice/IBEX-35", Destination:=Range("$A$1"))
        .Name = "IBEX-35"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 1
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingRTF
        .WebTables = "3"
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = True
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End Sub

Este procedimiento lo podemos dividir en tres partes principales, donde creamos la consulta con ActiveSheet.QueryTables.Add , las propiedades de la tabla importada donde indicamos con RefreshPeriod la periodicidad con la que queremos que se actualice la tabla desde la página web, y por ultimo las opciones de importar, que como parte importante tenemos la opción WebTables  donde indicamos el número de índice de tabla que queremos importar.


domingo, 12 de febrero de 2012

Eventos no asociados a Objetos

Cada objeto lleva asociados unos determinados eventos que le pueden ocurrir, por ejemplo a un botón o una hoja,  puede ocurrir que al activar la hoja  queramos que se produzca una determinada acción, este evento seria  Private Sub Worksheet_Activate(), al cual nosotros le añadiremos el código de lo que queremos que haga la aplicación cuando se active la hoja.

Los dos eventos que vamos a comentar no están asociados a un objeto. En su lugar se accede a ellos mediante métodos del objeto de Application.

Evento OnTime:

El evento OnTime  tiene lugar en una hora concreta en el futuro, lo que podemos utilizar para lograr la ejecución automática de macros de Excel, por ejemplo.

La siguiente instrucción ejecuta el procedimiento de Alarma a las 07:00 a.m. del próximo 14 de Febrero (día de los enamorados).

Sub Ejec_Alarma()
Application.OnTime DateSerial(2012, 2, 14) + TimeValue("07:00:00"), "Msg_Alarma"
End Sub

Mensaje de alarma..

Sub Msg_Alarma()
Dim n As Integer
For n = 1 To 20
Beep
Next n
MsgBox "Hoy es el día de los enamorados..", vbInformation, "ALARMA"
End Sub

Para cancelar el evento OnTime utilizaremos la siguiente instrucción.

Application.OnTime DateSerial (2012, 2, 14) + _
TimeValue("07:00:00"), "Msg_Alarma", , False

Evento OnKey:

El evento OnKey ejecuta un procedimiento específico cuando una tecla o combinación de teclas se pulsan.
A continuación os relaciono una matriz con los códigos que representa cada tecla en el teclado.


Clave
Código
RETROCESO
{RETROCESO} o {BS}
BREAK
{PAUSA}
CAPS LOCK
{} BLOQ MAYÚS
CLEAR
{CLEAR}
SUPR o DEL
{DELETE} o {DEL}
FLECHA ABAJO
{DOWN}
FIN
{END}
ENTER (teclado numérico)
{ENTER}
ENTER
~ (tilde)
CES
Salir} o {ESC}
AYUDA
{AYUDA}
INICIO
{HOME}
INS
{INSERT}
FLECHA A LA IZQUIERDA
{Left}
BLOQ NUM
{BLOQ NUM}
PÁG
{} PGDN
PÁG
{} PGUP
REGRESAR
{Return}
FLECHA A LA DERECHA
{Derecha}
SCROLL LOCK
{} ScrollLock
TAB
{TAB}
FLECHA ARRIBA
{UP}
F1 a F15
{F1} a través {F15}

También se pueden especificar en combinación con las teclas SHIFT , CTRL y ALT.

Para combinar con las teclas
Precede el código clave por
SHIFT
+ (signo más)
CTRL
^ (acento circunflejo)
ALT
% (signo de porcentaje)

Pegue las siguientes instrucciones en un módulo:

Sub DemoOnKey()
      Application.OnKey "{TAB}", "Message"
End Sub

Sub Message()
    MsgBox "Hola"
End Sub

Vemos que al pulsar el tabulador se ejecuta el mensaje.

domingo, 5 de febrero de 2012

Forzar Cierre

Los procedimientos que se relacionan a continuación son complementos que puedes utilizar en cualquier código realizado por ti, de modo que cuando el procedimiento se complete, se apague automáticamente tu sistema.

En suma, es una muy buena aplicación que nos puede ayudar de muchas maneras. 

El comando shutdown permite a un usuario apagar un equipo desde la línea de comandos de Windows (cmd),  los argumentos son los siguientes:


Sin argumentos
Mostrar este mensaje (lo mismo que -?)
-I
Mostrar interfaz GUI, debe ser la primera opción
-L
Cierre la sesión (no se puede utilizar con la opción-m)
-S
Apagar el equipo
-R
Apagar y reiniciar el equipo
-Una
Anular el apagado del sistema
-M \ \ equipo
El equipo remoto para apagar / reiniciar / cancelar
-T xx
Ajuste de tiempo de espera de apagado en xx segundos
-C "comentario"
Comentario de apagado (máximo de 127 caracteres)
-F
Fuerza el cierre de aplicaciones sin previo aviso
-D [u] [p]: xx: yy
El código de motivo de apagado
u es el código de usuario
p es un proyecto de código de parada
xx es el código de las principales razones (entero positivo menor que 256)
yy es el código secundario del motivo (entero positivo menor que 65536)


Este comando lo utilizaremos en nuestro código con distintas combinaciones para forzar a nuestro sistema al cierre, al igual que utilizamos shutdown también podríamos utilizar cualquier otro comando del cmd, esto lo dejo a vuestra imaginación...


Sub ApagarPC()
      ActiveWorkbook.Save
      Application.DisplayAlerts = False
      Application.Quit
      Shell "shutdown -s -t 02", vbHide
End Sub


Sub ReiniciarPC()
      ActiveWorkbook.Save
      Application.DisplayAlerts = False
      Application.Quit
      Shell "shutdown -r -t 02", vbHide
End Sub


Sub ForzarPC()
      ActiveWorkbook.Save
      Application.DisplayAlerts = False
      Application.Quit
     Shell "shutdown -r -f -t 02", vbHide
End Sub


Espero que os sea de utilidad…..