Vous êtes sur la page 1sur 59

Excel y otros programas

Crear una barra de progreso en Excel




Option Explicit

Sub BarraDeProgreso()

Dim R As Integer
Dim MT As Double
For R = 1 To 180
MT = Timer
Do
Loop While Timer - MT < 0.05
Application.StatusBar = "Progress: " & R & " de 180: " & _
Format(R / 180, "Percent") & " --- " & "Cumplimiento"
DoEvents
Next R
Application.StatusBar = False

End Sub
Importar celdas Excel a Excel (ADO)
Con ADO podemos conectar con casi cualquier base de datos, incluyendo Excel mismo. En
este ejemplo mostramos como conectar con otro libro Excel desde Excel. Luego
importaremos los datos. Todo esto sin abrir el otro libro Excel (la base de datos).
La importacin es muy eficaz, tarda poco, y puede ayudar mucho en la automizacin de
tus rutinas diarias.
Procedimiento
Empezamos con un libro Excel vaco. Luego crearemos un mdulo VBA dentro de este
libro. En este mdulo escribiremos el cdigo. El libro de las celdas a importar debe tener
rtulos en la primera fila, y los datos a partir de la segunda.
Sub Conectar_Excel_ADO()
'importar datos de un libro Excel sin abrirlo.

'dimensiones
Dim datConnection As ADODB.Connection
Dim recSet As ADODB.Recordset
Dim recCampo As ADODB.Field
Dim strDB, strSQL As String
Dim i As Long

'ruta al archivo Excel (la base de datos)
'strDB = ThisWorkbook.Path & "\" & _
"MiArchivoExcel.xls"
strDB = "C:\MiArchivoExcel.xls" 'si otra carpeta

'conectar
Set datConnection = New ADODB.Connection
Set recSet = New ADODB.Recordset
datConnection.Open "DRIVER=Microsoft Excel _
Driver (*.xls);" & "DBQ=" & strDB

'consulta SQL
'strSQL = "SELECT * FROM [NuestroRango]"
strSQL = "SELECT * FROM [Hoja1$A1:Q1000]"

'abrimos el recordset
recSet.Open strSQL, datConnection, adOpenStatic

'copiar datos
ActiveSheet.Cells.ClearContents
ActiveSheet.Cells(2, 1).CopyFromRecordset recSet

'copiar rotulos (campos)
i = 1
For Each recCampo In recSet.Fields
ActiveSheet.Cells(1, i) = _
recCampo.Name: i = i + 1
Next recCampo

'desconectar (importante!)
recSet.Close
datConnection.Close

'cerrar los objetos
Set recSet = Nothing
Set datConnection = Nothing

End Sub

Importar datos de Word a Excel
Al importar datos a Excel (en este caso texto) de un documento Word podemos aplicar la
funcin VBA de Create Object. Esta funcin nos deja conectar con los otros programas
Office. De esta manera es bastante sencillo mandar datos entre Excel y el resto del suite
Office de Microsoft.
Este ejemplo de Excel VBA presenta una manera de importar las filas de texto de un
documento Word. El usuario elige desde cual documento Word la importacin se va a
realizar, mediante el dilogo Windows predefinido de Abrir.
Para que esto funcione, no olivides marcar la casilla de Microsoft Word x.xx Object Library
en el men de Herramientas Referencias del editor VBA.
Option Base 1
Public varText()

Sub abrirWordDesdeExcel()

Dim strWordArchivo As Variant
Dim i, r, intLineas As Integer
Dim appWord As Word.Application
Dim appDoc As Word.Document
Dim rngDoc As Word.Range

'dialogo 'abrir archivo'
strWordArchivo = Application.GetOpenFilename _
("Documentos Word (*.doc), *.doc"): On Error GoTo 99

'crear el objeto Word
Set appWord = CreateObject("Word.Application")
Set appDoc = appWord.Documents.Open(strWordArchivo)

'leer archivo Word
intLineas = appDoc.Paragraphs.Count: ReDim varText(intLineas)

r = 1
For i = 1 To intLineas
Set rngDoc = appDoc.Range( _
Start:=appDoc.Paragraphs(i).Range.Start, _
End:=appDoc.Paragraphs(i).Range.End)
varText(i) = rngDoc.Text
r = r + 1
Next i

'traspasar datos a celdas (o utilizar matriz para otra cosa de VB...)
For x = 1 To UBound(varText)
Cells(x, 1) = varText(x)
'terminar los objetos creados
appDoc.Close: Set appDoc = Nothing
appWord.Quit: Set appWord = Nothing
99:
End Sub

Macro para pegar celdas Excel en Word

Esta macro nos deja automatizar el proceso de pegar las celdas Excel seleccionadas, en un
documento nuevo de Word.
Procedimiento
Esta macro debe agregarse a las macros personales, para estar a mano desde cualquier libro
Excel.
Sub Copiar_Excel_a_Word()

'mandar las celdas Excel seleccionadas a nuevo documento Word
'copiar rango selecionado
Selection.Copy

'crear nueva aplicacin Word
Dim appWord As Word.Application
Set appWord = New Word.Application

With appWord
.Visible = True
.Activate
End With

'crear nuevo documento Word
appWord.Documents.Add

'pegar celdas Excel
appWord.Selection.Paste

'liberar el objeto Word
Set appWord = Nothing

End Sub


Excel y bases de datos
Importar tabla Access a Excel

Aqu explicamos cmo importar una tabla de una base de datos Access, a una hoja Excel.
Esta maniobra tambin puede realizarse desde los mens del propio programa Access.
Pero qu pasa si tenemos que acceder a un archivo Access, y no tenemos el programa
Access instalado? Entonces podemos recurrir al cdigo VBA, y programar una macro.
Adems, esta importacin tarda poqusimo muy interesante si importamos muchas tablas
al da.
Sub Importar_Access()

'dimensiones
Dim datConnection As ADODB.Connection
Dim recSet As ADODB.Recordset
Dim strDB, strSQL As String
Dim strTabla As String
Dim lngTablas As Long
Dim i As Long

'elegir uno de estas dos rutas al archivo Access
strDB = ThisWorkbook.Path & "\" & "db.mdb"
'strDB = "C:\vba\db.mdb" 'si en otra carpeta

'nombre de la tabla del archivo Access
strTabla = "salarios_2003"

'crear la conexin
Set datConnection = New ADODB.Connection
Set recSet = New ADODB.Recordset
datConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source =" & strDB & ";"

'consulta SQL
strSQL = "SELECT * FROM " & strTabla & ""
recSet.Open strSQL, datConnection
'copiar datos a la hoja
ActiveSheet.Cells(2, 1).CopyFromRecordset recSet

'copiar rtulos
lngCampos = recSet.Fields.Count
For i = 0 To lngCampos - 1
ActiveSheet.Cells(1, i + 1).Value = recSet.Fields(i).Name
Next

'desconectar
recSet.Close: Set recSet = Nothing
datConnection.Close: Set datConnection = Nothing

End Sub

Excel y archivos Ascii

A veces queremos guardar datos en un archivo de texto (archivo Ascii), por ejemplo de tipo
CSV o de tipo sequencial (posiciones fijas). Es decir, utilizar un archivo de texto como una
sencilla base de datos.
Si los datos que tenemos que guardar son pocos, conviene guardarlos en un archivo Ascii
en vez de una base de datos de verdad como Access.
Hay que tener un cuenta que los datos guardados en archivos Ascii ocuparn ms espacio
que en una base de datos de verdad. Pero para guardar hasta unos mil lneas de texto no hay
problema ninguno.
Comando OPEN
El OPEN nos hace posible crear/abrir un archivo de texto, para luego proceder a escribir a
este archivo.
Hay tres modos:
Output
Abrir (o crear) el archivo (suprime todo ya grabado) para escribir. Es decir que, si el
archivo existe, borrar todo los datos ya grabados.
Open strArchivoTexto For Output As #f
Append
Abrir (o crear) para escribir (seguir por la ltima lnea).
Open strArchivoTexto For Append As #f
Input
Abrir para lectura (a Excel).
Open strArchivoTexto For Input As #f
Sobre la #f: Para trabajar con el contenido de estos archivos hay que llamar a los archivos
de una manera numrica. Si utilizamos el FREEFILE, no habr que preocuparse de esta
numeracin.
Comando PRINT
El PRINT se emplea para la forma sequencial (posiciones fijas) = tal como est. En los
ejemplos abajo utilizaremos el comando PRINT.
Print #f, "Fecha de hoy: " & Date
Comando WRITE
El WRITE se utiliza para la forma sequencial CSV (Comma Separated Value Valor
separado por coma). Esto significa que aadir una coma entre cada bloque de texto. Esto
ayuda a la hora de importar un archivo Ascii a Excel.
Print #f, "Fecha de hoy: " & Date ; " Application.UserName
Cada bloque de texto se delimita del prximo por el carcter ;.
Escribir archivo Ascii OUTPUT
Sub Crear_Escribir_ArchivoAscii()

Dim strNombreArchivo, strRuta, strArchivoTexto As String
Dim f As Integer

'nombre y ruta del archivo de texto
strNombreArchivo = "MiArchivoAscii.txt"
strRuta = "C:\"
strArchivoTexto = strRuta & strNombreArchivo

'abrimos el archivo para escribir
f = FreeFile
Open strArchivoTexto For Output As #f

'escribimos al archivo
Print #f, "Fecha de hoy: " & Date
Print #f, "Usuario: " & Application.UserName

'cerramos el archivo de texto
Close f

End Sub


Escribir archivo Ascii APPEND
Sub Crear_Escribir_ArchivoAscii()

Dim strNombreArchivo, strRuta, strArchivoTexto As String
Dim f As Integer

'nombre y ruta del archivo de texto
strNombreArchivo = "MiArchivoAscii.txt"
strRuta = "C:\"
strArchivoTexto = strRuta & strNombreArchivo

'abrimos el archivo para escribir
f = FreeFile
Open strArchivoTexto For Append As #f

'escribimos al archivo
Print #f, "Fecha de hoy: " & Date
Print #f, "Usuario: " & Application.UserName

'cerramos el archivo de texto
Close f

End Sub

Leer archivo Ascii INPUT
Sub Leer_ArchivoAscii()

Dim strNombreArchivo, strRuta, strArchivoTexto As String
Dim f, i As Integer
Dim strTexto As String

'nombre y ruta del archivo de texto
strNombreArchivo = "MiArchivoAscii.txt"
strRuta = "C:\"
strArchivoTexto = strRuta & strNombreArchivo

'abrimos el archivo para lectura
f = FreeFile
Open strArchivoTexto For Input As #f

'leemos el archivo de texto a columna de Excel
i = 1
While Not EOF(f)
Line Input #f, strTexto
Cells(i, 1) = strTexto
i = i + 1
Wend

'cerramos el archivo de texto
Close f

End Sub

Importar tabla de dBase IV a Excel

dBase IV es una base de datos de los aos 80, que todava se utiliza. En caso de necesitar
importarla a Excel, podemos utilizar el siguiente marcado. Conectar a traves de ADO etc es
bastante complicado. Hay otra manera mucho ms fcil; abrirla como libro Excel.

Sub Importar_dBaseIV()
Dim dBase As String
Dim strMacro As String
strMacro = ActiveWindow.Caption

'abrir el archivo .dbf como archivo Excel
Workbooks.Open Filename:="C:\dbase.dbf"

'copiar contenido
dBase = ActiveWindow.Caption
Windows(dBase).Activate
Cells.Copy

'pegar contenido en archivo Excel
Windows(strMacro).Activate
Range("A1").Select: ActiveSheet.Paste

'cerrar archivo .dbf
Windows(dBase).Activate
Application.DisplayAlerts = False
Windows(dBase).Close
Application.DisplayAlerts = True

'aparcar en la nueva lista
Windows(strMacro).Activate
Columns.AutoFit

End Sub


Abrir archivo de texto (CSV) en Excel

Al abrir en Excel un archivo plano de texto (.txt etc) hay que tener en cuenta si trata de un
texto delimitado por comas,tabs etc, o no. Un texto delimitado se caracteriza por tener
delimitadores dentro del texto. Estos dicen por donde empezar una nueva columna.
Un archivo de estos, al abrirlo en Word etc, puede tener un aspecto bastante desorganizado.
Pero en realidad no es as. Basta cambiar fuente a una monoespacio (por ejemplo Courier)
para poder ver la estructura.
Hay varias maneras de importar estos datos a Excel. Aqu explicamos una de las maneras
mas sencillas, es decir abrirlo directamente en Excel. Antes de proceder hay que averiguar
si se trata de un texto delimitado o no.
Conceptos de apertura en Excel
Teorticamente hay tres posibilidades como proceder.
No. Concepto Resultado Delimitadores
1 Texto no delimitado Texto queda en la columna A -
2 Texto delimitado Texto queda en la columna A
Seguirn
presentes
3 Texto delimitado
Texto se divide en columnas segn
posiciones de los delimitadores
Desaparecen
El primer ejemplo es un archivo de texto con texto normal y corriente. No est pensado
para dividir en columnas.
El segundo est pensado para dividir en columnas, pero en este caso queremos conservar la
estructura delimitada por eso colocamos el texto en la columna A, y los delimitadores
seguirn presentes.
El tercero est pensado para dividir en columnas, y eso es tambin el proceso que se
efectuar.
Abrir archivo de texto en Excel sin dividir en columnas
Este cdigo deja al usuario elegir el archivo a abrir, y luego se abre el archivo de texto en
Excel. No divide en columnas, todos los datos permanecern el la columna A. Los
delimitadores quedan intactos.

Sub AbrirEnColumnaUnica()

'abre un archivo de texto en la columna A
'[sin dividir en columnas]

'dimensiones
Dim strNombreArchivo

'dilogo para abrir archivo
strNombreArchivo = Application.GetOpenFilename
If strNombreArchivo = False Then Exit Sub

'abre el archivo en la columna A
Workbooks.OpenText _
Filename:=strNombreArchivo, _
Origin:=xlWindows, _
StartRow:=1, _
FieldInfo:=Array(1, 1)

End sub
Abrir archivo de texto en Excel, y dividir el contenido en
columnas
En el segundo ejemplo abriremos el archivo de texto en Excel, y procedemos a dividir el
contenido en columnas, dependiendo del delimitador elegido. Los delimitadores
desaparecern.
Sub Abrir_y_DividirEnComumnas()

'abre un archivo de texto en Excel, divide en columnas
'hay que poner el tipo de delimitador (en este caso 'Space')

'dimensiones
Dim strNombreArchivo

'dilogo para abrir archivo
strNombreArchivo = Application.GetOpenFilename
If strNombreArchivo = False Then Exit Sub

'abrir el archivo y dividir en columnas
Workbooks.OpenText _
Filename:=strNombreArchivo, _
Origin:=xlWindows, _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Tab:=False, _
Semicolon:=False, _
Comma:=False, _
Space:=True, _
Other:=False, _
FieldInfo:=Array(1, 1)

End Sub

Excel y Outlook

Enviar hoja Excel por correo electrnico (Outlook etc.)

Resumen
Este truco sirve para enviar una hoja Excel por mail, utilizando Outlook u otro sistema de
correo instalado en el ordenador del usuario
'Jose Skraviuk
'ayudaexcel {at} yahoo.com.ar

Sub Mail_ActiveSheet()

Dim wb As Workbook
Dim strdate As String
Dim stEmail As String
Application.ScreenUpdating = False

strdate = Format(Now, "dd-mm-yy h-mm-ss")
strEmail = "aaa.bbb@ccc.com"
ActiveSheet.Copy

Set wb = ActiveWorkbook
With wb
.SaveAs ThisWorkbook.Name & " " & strdate & ".xls"
.SendMail strEmail, "Archivo Adjunto"
.ChangeFileAccess xlReadOnly
Kill .FullName
.Close False
End With

Application.ScreenUpdating = True
End Sub
Configuraciones
Hay que indicar la direccin email a emplear.
strEmail = "aaa.bbb@ccc.com"

Importar datos de Outlook a Excel

Con VBA de Excel podemos contactar con Outlook para devolver datos. En este ejemplo
vamos a importar algunos datos de los Contactos.
Objetos utilizados
Para contactar con Outlook desde Excel podemos utilizar el objeto GetNameSpace de la
MAPI Messaging Application Programming Interface.
Luego, el mtodo GetDefaultFolder nos deja acceder a las carpetas de Outlook, por
ejemplo el de los Contactos.
Parmetro Carpeta
3 Deleted Items (Elementos elimindos)
4 Outbox (Bandeja de salida)
5 Sent Items (Elementos enviados)
6 Inbox (Bandeja de entrada)
9 Calendar (Calendario)
10 Contacts (Contactos)
11 Journal (Diario)
12 Notes (Notas)
13 Tasks (Tareas)
16 Drafts (Borrador)
El cdigo
Sub ImportarContactos()

Dim olApp As Outlook.Application
Dim olContacts As Outlook.MAPIFolder
Dim olContact As Outlook.ContactItem
Dim i As Integer

Set olApp = New Outlook.Application

Set olContacts = _
olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)

'rotulos
Cells(1, 1) = "Nombre"
Cells(1, 2) = "E-mail"
Cells(1, 3) = "Ttulo"
Cells(1, 4) = "Empresa"
Cells(1, 5) = "Tel (casa)"
Cells(1, 6) = "Tel (mbil)"
Cells(1, 7) = "Tel (trabajo)"
Cells(1, 8) = "Fax (trabajo)"
Cells(1, 9) = "Dir. (empresa)"
Cells(1, 10) = "Postal (empresa)"
Cells(1, 11) = "Ciudad (empresa)"
Cells(1, 12) = "Pas (empresa)"
Cells(1, 13) = "Dir. (casa)"
Cells(1, 14) = "Postal (casa)"
Cells(1, 15) = "Ciudad (casa)"
Cells(1, 16) = "Pas (Casa)"

'importar contact items
For i = 2 To olContacts.Items.Count
If TypeOf olContacts.Items.Item(i) Is _Outlook.ContactItem Then
Set olContact = olContacts.Items.Item(i)
Cells(i, 1) = olContact.FullName
Cells(i, 2) = olContact.Email1Address
Cells(i, 3) = olContact.JobTitle
Cells(i, 4) = olContact.CompanyName
Cells(i, 5) = olContact.HomeTelephoneNumber
Cells(i, 6) = olContact.MobileTelephoneNumber
Cells(i, 7) = olContact.BusinessTelephoneNumber
Cells(i, 8) = olContact.BusinessFaxNumber
Cells(i, 9) = olContact.BusinessAddressStreet
Cells(i, 10) = olContact.BusinessAddressPostalCode
Cells(i, 11) = olContact.BusinessAddressCity
Cells(i, 12) = olContact.BusinessAddressCountry
Cells(i, 13) = olContact.HomeAddressStreet
Cells(i, 14) = olContact.HomeAddressPostalCode
Cells(i, 15) = olContact.HomeAddressCity
Cells(i, 16) = olContact.HomeAddressCountry
End If
Next

'eliminar variables de los objetos
Set olContact = Nothing
Set olContacts = Nothing
Set olApp = Nothing

'ordenar lista por Nombre
Cells.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess

End Sub


Libros y hojas Excel
Cerrar libro Excel (guardar cambios)
ActiveWorkbook.Close
ActiveWorkbook.Close Savechanges:=True
ActiveWorkbook.Close(True)
Cerrar libro Excel (sin guardar cambios)
ActiveWorkbook.Close(False)
ActiveWorkbook.Close Savechanges:=False
Cerrar libro Excel (variable, sin guardar cambios)
Application.DisplayAlerts = False
Windows(Libro_mayor).Close
Application.DisplayAlerts = True

<h2>Abrir libro Excel (ruta fija)</h2>
<pre lang="vb">Workbooks.Open FileName:="C:\Trabajo\Informe.xls"
Abrir libro Excel (dilogo)
Msg = MsgBox("Elija archivo para abrir.", vbOKOnly, (""))

strArchivo = Application.GetOpenFilename
On Error GoTo 99

Workbooks.OpenText Filename: = strArchivo
If strArchivo = "" Then Exit Sub
strArchivo = ActiveWindow.Caption
99:
Exit sub
Devolver nombre del libro Excel
strNombre = ActiveSheet.Parent.FullName
MsgBox ActiveWorkbook.FullName


Nombre de la hoja (variable)
'asigna nombre variable a la hoja a variable
strHoja = ActiveWindow.Caption
Windows(strHoja).Activate 'para activar el libro del nombre asignado
Insertar hoja nueva (elegir posicin)
ActiveWorkbook.Sheets.Add Before:=Worksheets("Informe1")
Insertar hoja nueva (primera posicin)
Sheets("Informe1").Copy After:=Worksheets(Worksheets.Count)
Mover hoja
Worksheets("informe5").Move After:=Worksheets("Informe4")
Ordenar hojas (orden alfabtico)
intNumeroHojas = ActiveWorkbook.Worksheets.Count
For i = 1 To intNumeroHojas
For j = i To intNumeroHojas
If LCase(Worksheets(j).Name) < LCase(Worksheets(i).Name) Then
Worksheets(j).Move Before:=Worksheets(i)
End If
Next j
Next i
Suprimir una hoja determinada
Application.DisplayAlerts = False

For i = 1 To Sheets.Count
Sheets(i).Activate
xxx = ActiveCell.Worksheet.Name
If xxx = "Informe" Then
ActiveWindow.SelectedSheets.Delete
End If
Next

Application.DisplayAlerts = True
Seleccionar primera hoja
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Seleccionar ltima hoja
ActiveWindow.ScrollWorkbookTabs Position:=xlLast

Formatos Excel y VBA

Excel pone a disposicin un montn de formatos. Abajo presentamos como modificar
algunos de ellos a travs de macros Excel VBA.
Redondear celdas
Set Area = Selection
For Each Cell In Area
z = Round(Cell, 2)
Cell.Value = z
Cell.NumberFormat = "#,##0.00"
Next Cell
Formatear fuente
Cells.Select
With Selection.Font
.Name = "MS Sans Serif"
.Size = 10
End With
Lneas de divisin
ActiveWindow.DisplayGridlines = False
Indice de colores
ActiveWorkbook.Colors(44) = RGB(236, 235, 194) 'verde
Colorear rango
Range("A1:B10").Interior.ColorIndex = 44
Cambiar entre estilos A1 / RC
Application.ReferenceStyle = xlA1Application.ReferenceStyle = xlR1C1


Filas Excel macros VBA

Encontrar ltima fila
intUltimaFila = _
Columns("A:A").Range("A65536").End(xlUp).Row
Encontrar ltima fila
intUltimaFila = _
ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
Encontrar ltima fila
MaxRow = Cells.SpecialCells(xlLastCell).Row
MaxCol = Cells.SpecialCells(xlLastCell).Column
Encontrar ltima celda (buscar al revs)
Dim lngUltimaCelda As Long
If WorksheetFunction.CountA(Cells) > 0 Then
lngUltimaCelda = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
MsgBox lngUltimaCelda
End If
Encontrar ltima fila (en columna especificada)
Dim intUltimaFila As Range

If WorksheetFunction.CountA(Columns(1)) > 0 Then
Set intUltimaFila = Range("65536").End(xlUp)
MsgBox intUltimaFila.Address
End If
Suprimir filas vacas
intLastRow = Columns("A:A").Range("A65536").End(xlUp).Row
For r = intLastRow To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
Suprimir filas vacas
Dim intNumDeFilas As Long

Selection.SpecialCells(xlCellTypeLastCell).Select
intNumDeFilas = Selection.Row
For i = 1 To intNumDeFilas
If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then
Rows(i).Delete
End If
Next
Suprimir filas vacas
intUltimaFila = _
ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
For r = intUltimaFila To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
Suprimir filas por condicin
Dim rngString As Range

Do
Set rngString = Cells.Find("Aglis", MatchCase:=False, _
LookAt:=xlPart, LookIn:=xlValues)
If Not rngString Is Nothing Then
rngString.EntireRow.Delete
End If
Loop Until rngString Is Nothing
Suprimir filas vacas por dos condicines X, Y
For i = intUltimaFila To 1 Step -1
Let strTest= Application.Cells(i, 2)
If strTest <> "X" And strTest <> "Y" Then Rows(i).Delete
Next i

Columnas de Excel y VBA

Presentamos unas macros para trabajar con columnas Excel desde Excel VBA.
Encontrar ltima columna (buscar al revs)
Sub EncontrarUltimaColumna()
Dim intUltimaCol As Integer

If WorksheetFunction.CountA(Cells) > 0 Then
intUltimaCol = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
MsgBox intUltimaCol
End If
End Sub
Encontrar ltima columna (en fila especificada)
Sub EncontrarUltimaColumna()
Dim intUltimaCol As Range

If WorksheetFunction.CountA(Rows(1)) > 0 Then
Set intUltimaCol = Range("IV1").End(xlToLeft)
MsgBox intUltimaCol.Address
End If
End Sub
Suprimir columnas vacas en el rango
Sub SuprimirColumnas()
Dim cCount As Integer, c As Integer
Dim DeleteRange as Range

DeleteRange =("A1:B10")

If DeleteRange Is Nothing Then Exit Sub
'Ejemplo: DeleteEmptyColumns Range("A1:Z1")
If DeleteRange.Areas.Count > 1 Then Exit Sub

With DeleteRange
cCount = .Columns.Count
For c = cCount To 1 Step -1
If Application.CountA(.Columns(c)) = 0 _
Then .Columns(c).EntireColumn.Delete
Next c
End With
End Sub
Suprimir cada n-columnas
Sub SuprimirColumnas()
Dim rCount As Long, r As Long
Dim DeleteRange as range

DeleteRange =("A1:B10")

If DeleteRange Is Nothing Then Exit Sub
If DeleteRange.Areas.Count > 1 Then Exit Sub
If n < 2 Then Exit Sub

With DeleteRange
cCount = .Columns.Count
For c = n To cCount Step n - 1
.Columns(c).EntireColumn.Delete
Next c
End With
End Sub


Repasar archivos Excel de una carpeta

Esta macro de Excel presenta una solucin para repasar todos los archivos Excel (o de
cualquier tipo) de una carpeta. Incluso nos deja abrir cada archivo Excel automticamente
para luego importar datos de todos los archivos de esa carpeta determinada.
Presentar los archivos Excel de la carpeta
Los ejemplos emplean la funcin DIR, y el cdigo VBA presentado abajo, nos indica los
nombres de cada archivo Excel.
Sub RepasarCarpeta()
'en este ejemplo sacamos los nombres de los archivos de la carpeta.

'dimensiones
Dim strArchivoExcel As String
Dim strNombreCarpeta As String

'carpeta a repasar
strNombreCarpeta = "C:/MisArchivosExcel"

'preparar carpeta
ChDir strNombreCarpeta
strArchivoExcel = Dir("*.xls")

'repasamos los archivos de la carpeta
Do While strArchivoExcel <> ""
MsgBox strArchivoExcel
strArchivoExcel = Dir
Loop

End Sub
Sacar datos de todos los libros Excel de la carpeta
En este ejemplo aadimos la posibilidad de utilizar el objeto Workbook, para poder abrir (y
cerrar) cada archivo Excel (para lectura o modificacin).
Sub RepasarCarpeta2()
'en este ejemplo abriremos cada libro de la carpeta para sacar
' informacin de 'las celdas A1 y B1.

'dimensiones
Dim wb As Workbook
Dim strArchivoExcel As String
Dim strNombreCarpeta As String

'carpeta a repasar
strNombreCarpeta = "C:/MisArchivosExcel"

'preparar carpeta
ChDir strNombreCarpeta
strArchivoExcel = Dir("*.xls")

'repasamos los archivos de la carpeta
Do While strArchivoExcel <> ""
Set wb = Workbooks.Open(strNombreCarpeta & "\" & strArchivoExcel)
MsgBox wb.ActiveSheet.Cells(1, 1)
MsgBox wb.Application.Sheets("Hoja2").Cells(2, 1).Value
wb.Close False
Set wb = Nothing
strArchivoExcel = Dir
Loop

End Sub


Colores y filtros en Excel
Excel VBA y la paleta de colores

Excel emplea una paleta de 56 colores predefinidos. Puedes cambiar estos colores desde
Herramientas Opciones Color o desde cdigo VBA. Abajo presentamos unos ejemplos
de cdigo VBA para modificar la paleta de colores del libro Excel.
Por desgracia, a muchos de nosotros los colores de la hoja Excel predefinidos por Microsoft
parecen bastante fuertes, y a veces hacen que la hoja sea difcil de leer.
Los colores forman parte del diseo del libro, son importantes para una buena presentacin
de un informe. Pero por regla general tampoco se debe pasar utilizando demasiado color.
Excel y Colores RGB
Excel expresa colores del formato RGB (Red, Green, Blue). Red, Green, Blue son variables
cuales expresan el grado de estos colores, valores entre 1 y 255. Tambien podemos expresar
el color en formato HEX (hexadecimal).
KfmDesign presenta una buena pgina de Colores RGB y HEX.
Cambiar colores de la paleta Excel
Entonces, qu podemos hacer para que Excel siempre tenga los colores definidos por ti?
Una solucin sera crear una plantilla con nuestros formatos. Excel llamar esta plantilla al
crear un libro nuevo.
Otra solucin es crear una macro cual nosotros podemos llamar cuando nos convenga. Esto
nos da un poco ms de control. En este ejemplo cambiaremos los colores 40 y 41 (de los
56) de la paleta.
ActiveWorkbook.Colors(40) = RGB(234, 234, 234)
ActiveWorkbook.Colors(41) = RGB(236, 235, 194)
Cdigo VBA para cambiar colores de celdas Excel
Para cambiar los colores aplicados a una celda ejecutamos una de las siguientes
instrucciones.
Selection.Interior.ColorIndex = 40
Selection.Interior.ColorIndex = _
xlNone/xlColorIndexAutomatic/xlColorIndexNone
Selection.Interior.Color = RGB(234, 234, 234)
<pre lang="vb">
Selection.Interior.Color = ?000066? 'hexadecimal
Resetear paleta de colores
Para resetear los colores a los predefinidos de Excel, aplicamos el mtodo ResetColors.
ActiveWorkbook.ResetColors
Copiar colores de otro libro Excel
Tambin se puede copiar (importar) la paleta de otro libro Excel. Para esto cambiamos la
propiedad Colors del libro.
ActiveWorkbook.Colors = Workbooks("C:\MiLibroDeColores.xls").Colors
Devolver colores del libro Excel actual
A lo mejor nos interesa saber que color tiene una celda. La propiedad ColorIndex nos
ayuda.
i = Cells(1, 1).Interior.ColorIndex
MsgBox i
Aplicar colores por condiciones en Excel VBA
Podemos colorear celdas por condiciones, evaluando una cadena de texto, por ejemplo.
For Each Item In Intersect(ActiveSheet.UsedRange, Selection.Cells)
If Item.Text = "ColaCao" Then
Item.Interior.ColorIndex = 44
End If
Next



Colorear celdas Excel al hacer click

Este trocito de cdigo VBA Excel colorear celdas al hacer click sobre ellos. Es una macro
que utiliza el evento Worksheet_SelectionChange de las hojas de libro Excel.
Por eso hay que incluir este cdigo en los objetos de las hojas. En ejemplo abajo habra que
poner el cdigo en los contenedores de cdigo de una o mas de los objetos Hoja1, Hoja2 y
Hoja3.
Para colorear solo la celda activa
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveCell.Interior.ColorIndex = 3
End Sub
Para colorear todas las celdas seleccionadas
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target.Interior.ColorIndex = 3
End Sub


Filtrar con colores en Excel

Marcar encabezado de columnas filtradas
Este ejemplo Excel VBA surge en base a que si uno filtra con muchos criterios, pasa que a
veces nos perdemos que columnas tenemos filtrados.

En este caso se utiliza una macro, para que resalte el encabezado de las columnas filtradas.
El usuario tiene la posibilidad de elegir el color que prefiere. En este caso tiene unos
ejemplos pero se puede agregar ms colores.
Descargar archivo
Descargar archivo Excel (zip)
Contenedor del cdigo
El cdigo debe ir en el mdulo VBA correspondiente a la hoja para filtrar, por utilizar el
suceso Worksheet_Calculate(). Ver ejemplo.

El cdigoVBA
Option Explicit
'JOSE SKRAVIUK
'ayudaexcel {at} yahoo.com.ar

Private Sub Worksheet_Calculate()

Dim af As AutoFilter
Dim fFilter As Filter
Dim iFilterCount As Integer

If ActiveSheet.AutoFilterMode Then
Set af = ActiveSheet.AutoFilter
iFilterCount = 1
For Each fFilter In af.Filters
If fFilter.On Then
af.Range.Cells(1, iFilterCount).Interior.ColorIndex = Range("color")
Else
af.Range.Cells(1, iFilterCount).Interior.ColorIndex = xlNone
End If
iFilterCount = iFilterCount + 1
Next fFilter
Else
Rows(1).EntireRow.Interior.ColorIndex = xlNone
End If

End Sub


Scrollrow Imagen fija a un costado de la pantalla

Si queremos que el usuario vea una imagen en el costado superior izquierdo de la pantalla,
est donde est en la hoja, podemos aplicar el siguiente cdigo.
Trata de utilizar la propiedad SCROLLROW, que nos da la celda superior izquierdo de la
pantalla visible. Y SCROLLCOLUMN de la columna por supuesto. Luego insertamos un
comentario, en la cual ponemos una imagen y un poco de texto.
El resultado ser algo como

El cdigo
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim strRuta As String
Dim intRowActual as Double, intColumnActual As Double
Dim intRow as Double, intColumn As Double

'ruta a imagen
strRuta = "C:\imagen.jpg"

'fila/columna actual
intRowActual = ActiveCell.Row
intColumnActual = ActiveCell.Column

'fila/columna de scrollRow
intRow = ActiveWindow.ScrollRow + 1
intColumn = ActiveWindow.ScrollColumn

'insertamos comentario
Cells.ClearComments
With Cells(intRow, intColumn)
.AddComment
.Comment.Text Text:="Hola"
.Comment.Visible = True
End With

'aadimos imagen al comentario
Cells(intRow, intColumn).Comment.Shape.Select True
Selection.ShapeRange.Fill.UserPicture strRuta

'aparcamos en celda actual
Cells(intRowActual, intColumnActual).Select

End Sub

Vnculos y acceso en Excel
VBA para proteger hojas de un libro Excel

Con la ayuda de un truco de VBA de Excel puedes permitir que el usuario solo pueda abrir
por ejemplo la primera hoja (sin palabra de paso) pero no las otras (cuales requieren
palabra de paso). Esta funcin no est integrada en Excel (sorprendentemente), por eso hay
que recurrir a VBA.
Eventos empleados para la proteccin
Para esto vamos a utilizar el evento Workbook_SheetActivate, un evento que salta cada vez
que alguna hoja se active. Es decir, el evento se activar cuando el usuario hace click sobre
una etiqueta de una hoja. Si la hoja forma parte de las restringidas, Excel pedir palabra de
paso. Al introducir una palabra de paso erronea, se queda en la hoja anterior.
Grado de seguridad de la macro para proteger hojas
Cualquier persona puede entrar al cdigo VBA para ver la palabra de paso. Por eso debes
proteger el codigo (VBA editor Click derecho sobre EsteLibro Propiedades).
Este mtodo no da 100% de seguridad. Si activamos la proteccin de los mdulos VBA
tenemos bastante seguridad, pero hay que tener en cuenta que existen varios programas
comerciales para resolver el tema de palabras de paso de Excel.
Los procedimientos
Pon este cdigo en el contenedor EsteLibro del editor VBA (Herramientas Macro
Editor VBA).
Luego tienes que poner que hojas/palabra de paso (ver Preparar modelo del cdigo).
Cdigo VBA para proteger hojas Excel
Dim strStartHoja As String
Dim strSegundaHoja As String
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim z As Integer
Dim i As Integer
Dim x As Boolean
Dim varHoja As Variant
Dim varPaso As Variant
Dim varInput As Variant

'preparar modelo [admin. input]
varHoja = Array("Sheet2", "Sheet3") 'las hojas a proteger...
varPaso = "gofio" 'palabra de paso... [letras/nmeros]

'desconectar otros Events (evitar un tipo de bucle)
Application.EnableEvents = False

'comprobar hojas
strSegundaHoja = Sh.Name
For i = LBound(varHoja) To UBound(varHoja)
If varHoja(i) = strSegundaHoja Then x = True
Next i
If x = False Then GoTo 99

'ocultar la hoja temporalmente
z = ActiveWindow.Index
Windows(z).Visible = False

'comparar palabra de paso
varInput = InputBox("Palabra de paso:")
If varInput <> varPaso Then Sheets(strStartHoja).Select

'volver a mostrar la hoja
Windows(z).Visible = True

99:

'conectar Events
Application.EnableEvents = True

End Sub

'*************************************************

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'recordar hoja inicial
strStartHoja = Sh.Name
End Sub


Crear enlaces a las hojas Excel

Si nuestro libro Excel contiene muchas hojas (hasta 256) convendra hacer una lista de
enlaces a cada hoja. Esto puede ayudar mucho a los navegantes de nuestros libros.
Y como siempre, esta lista se puede crear manualmente. O se puede recurrir a una macro de
VBA, cual tardar al mximo un par de segundos para concluir el trabajo.
Procedimiento
Empezamos con un libro Excel cualquier, pero que tenga por lo menos dos hojas. Luego
vamos a crear un mdulo dentro de este libro. En este mdulo escribimos el cdigo.
Sub Links_hojas()

Dim wrbLibro As Workbook
Dim wrsHojaActiva As Worksheet, wsHoja As Worksheet
Dim intFila, intColumna As Integer

Set wrbLibro = ActiveWorkbook
Set wrsHojaActiva = ActiveSheet

'en que fila/columna empezar la lista
intFila = 4
intColumna = 1

'el bucle repasa todas las hojas
For Each wsHoja In wrbLibro.Worksheets

'para excluir hoja de los links
If wsHoja.Name = "Hoja4" Then GoTo ProxHoja

'crear links
If wsHoja.Name <> wrsHojaActiva.Name Then

wrsHojaActiva.HyperLinks.Add wrsHojaActiva.Cells(intFila, intColumna), _
"", SubAddress:="'" & wsHoja.Name & "'!A1", TextToDisplay:=wsHoja.Name

intFila = intFila + 1
End If

ProxHoja:
Next wsHoja

End Sub


Macro VBA para crear archivos de cada hoja Excel

Con un mnimo de cdigo vamos a crear archivos independientes de las hojas de un libro.
Un ejemplo sera un libro con 124 hojas, una hoja por empleado, y ahora queremos separar
las hojas de cada colega y crear libros independientes.
Procedimiento
Empezamos con el libro de una o varias hojas. Luego vamos a crear un mdulo dentro de
este libro. En este mdulo escribimos el cdigo.
Crear el mdulo
Entra a Herramientas Macros Editor VBA. A la izquierda ves (si no lo ves CTRL+R)
algo como ProyectoVBA (Tu libro). Marca ese proyecto. Insertar Mdulo.
Doble click en el mdulo nuevo, y a la derecha sale un espacio blanco, es para el cdigo.
Herramientas Referencias. Marca Microsoft ActiveX DataObjects x.x Library.
Ahora cierras el editor VBA, vuelves a Excel. Guardamos el libro.
Cdigo
Sub Crear_archivos_de_hojas()

Dim strHoja, strStartHoja, strRuta As String
Dim i As Integer

Application.ScreenUpdating = False
strStartHoja = ActiveCell.Worksheet.Name

'bucle todas hojas
For i = 1 To Sheets.Count

'copia la hoja a libro nuevo
Sheets(i).Activate
strHoja = ActiveCell.Worksheet.Name
Sheets(strHoja).Copy

'donde guardar los archivos creados
strRuta = "C:\excel\vba\ejemplos"

'guarda el libro nuevo
ActiveWorkbook.SaveAs Filename:=strRuta & "\" & strHoja, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWindow.Close Savechanges:=True

'repetir bucle'
Next

Sheets(strStartHoja).Activate
Application.ScreenUpdating = True

End Sub


Macro VBA para eliminar vnculos Excel

Con esta macro podrs eliminar vnculos a otras hojas/libros.
Elimina vnculos a otras hojas/libros
Referencias dentro de la hoja se mantienen.
Los vnculos se convierten en valores.
Antes de todo, recuerda hacer una copia de seguridad!
Copia de seguridad
Guarda una copia de seguridad de tu libro. Hazlo porque nunca sabes.
Crear el mdulo
Entra a Herramientas Macros Editor VBA. A la izquierda ves (si no lo ves CTRL+R)
algo como ProyectoVBA (Tu libro). Marca ese proyecto. Insertar Mdulo.
Doble click en el mdulo nuevo, y a la derecha sale un espacio blanco, es para el cdigo.
Herramientas Referencias. Marca Microsoft ActiveX DataObjects x.x Library.
Ahora cierras el editor VBA, vuelves a Excel. Guardamos el libro.
El cdigo
Sub QuitarVinculos()

Dim varVinculo As Variant
Dim wrsHoja As Worksheet
Dim objCelda As Object
Dim varMsg As Variant

'(0) Un pequeo control
varMsg = MsgBox("Ha guardado una copia de seguridad?", vbYesNo)
If varMsg = 7 Then Exit Sub

'(1) Quitar vnculos externos (a otros libros)
varLink = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
If Not IsEmpty(varLink) Then

i = 1
Do Until IsEmpty(varLink)
On Error GoTo 9
ActiveWorkbook.BreakLink Name:=varLink(i), _
Type:=xlLinkTypeExcelLinks
i = i + 1
Loop
End If
9:

'(2) Quitar vnculos internos (a otras hojas)
On Error Resume Next
For Each wrsHoja In ActiveWorkbook.Worksheets

For Each objCelda In wrsHoja.UsedRange.SpecialCells(xlCellTypeFormulas,
23)
If InStr(objCelda.Formula, "!") Then objCelda.Value = objCelda.Value
Next
Next

End Sub


Informacin del sistema o usuario
Objecto Application de Excel VBA

El objeto Application de VBA nos da informacin del usuario/mquina. En este artculo
presentaremos unas aplicaciones del un objeto muy bsico de Excel/VBA: Application.
Este representa todo el conjunto del programa Excel y sus libros de trabajo.
Unos ejemplos de propiedades del objeto Application
El objeto Application tiene muchas propiedades. Hay unas que pueden ser interesantes para
el programador de macros VBA de Excel.
Objeto Propiedad Devuelve
Application. UserName Nombre del usuario

OrganizationName Nombre de la empresa

OperatingSystem Sistema operativo

Version Versin de MS Excel

ProductCode Cdigo de MS Excel

StandardFont Fuente por defecto

StandardFontSize Tamao fuente por defecto

DecimalSeparator Carcter separador de miles

ActivePrinter Impresora por defecto

DefaultFilePath Ruta de acceso por defecto

UserLibraryPath Ruta a carpeta Add-ins
Sobre la versin de MS Excel arriba:
N Versin
12 Excel 2007
11 Excel 2003
10 Excel 2002 (XP)
9 Excel 2000
8 Excel 97
7 Excel 95
Algunos ejemplos prcticos del objeto Application de
Excel
Presentar la impresora activa del usuario
Para presentar la impresora activa del usuario, en una caja de dilogo, pondramos
Sub Devolver ImpresoraActiva()

Dim strImpresoraActiva as String
strImpresoraActiva = Application.ActivePrinter

Msgbox strImpresoraActiva

End sub
o todava ms fcil:
Sub Devolver ImpresoraActiva()

Msgbox Application.ActivePrinter

End sub
Crear lista extensa de informacin sobre la mquina del usuario
Abajo te presentamos una macro para presentar varios datos del usuario/maquina.

Sub Application_Data()

'dimensiones
Dim strDataArray(10) As String
Dim i, x As Integer

'devolver datos del objeto 'Application'
strDataArray(0) = Application.UserName
strDataArray(1) = Application.OrganizationName
strDataArray(2) = Application.OperatingSystem
strDataArray(3) = Application.Version
strDataArray(4) = Application.ProductCode
strDataArray(5) = Application.StandardFont
strDataArray(6) = Application.StandardFontSize
strDataArray(7) = Application.DecimalSeparator
strDataArray(8) = Application.ActivePrinter
strDataArray(9) = Application.DefaultFilePath
strDataArray(10) = Application.UserLibraryPath

'presentar los datos en celdas D3...
x = 0
For i = 3 To 13
Cells(i, 4) = strDataArray(x)
x = x + 1
Next i

End Sub
Sub SuprimirDatosEnceldas()

'suprimir datos antiguos
Range(Cells(3, 4), Cells(13, 4)).ClearContents

End Sub


Determinar idioma del usuario desde Excel VBA


Este marcado sirve para averiguar el idioma de Excel del usuario. La funcin
Application.International de Excel VBA nos ayuda.
Lo nico es que hay que saber los marcadores de telefona de los pases para descodficar la
respuesta de la funcin. Ver por ejemplo esta lista de prefijos telefnicos internacionales.
El cdigo
Sub DeterminarPais()

CodigoPais = Application.International(xlCountryCode)

If CodigoPais = 1 Then
MsgBox ("Hello")
ElseIf
CodigoPais = 34 Then MsgBox ("Hola")
End If

End Sub



Funcionalidad aadida

Abrir otro libro de Excel utilizando VBA
Este cdigo sirve para abrir otro libro Excel a travs del dilogo Abrir. All el usuario
elige el libro a abrir. Si el usuario pulsa Cancelar, el dilogo se cierra.
Este procedimiento en s no sirve para mucho (porque luego se debe hacer algo con este
libro, verdad), pero al final ser un procedimiento bsico en muchos de tus futuros
programas de Excel VBA.
Sub Abrir_archivo()

Dim strRutaArchivo As String

'un poco de informacin
MsgBox ("Abra el archivo Excel.")

'elegir archivo
strRutaArchivo = _
Application.GetOpenFilename("Libro de Microsoft Excel (*.xls), *.xls")

'abrir archivo
On Error GoTo 9
Workbooks.Open Filename:=strRutaArchivo
9:

End Sub


Messagebox y Excel VBA

Las messagebox son muy tiles (y fciles de usar), y crea una interfaz entre el usuario y el
programa. Sirven para
Mostrar informacin al usuario
Recibir informacin del usuario
Devolver informacin del usuario
Construccin sintctica de la messagebox
Msgbox "Mensaje", Botones/conos, "Ttulo"
o en el caso de devolver informacin
Respuesta = Msgbox("Mensaje", Botones/conos, "Ttulo")
Nota las parntesis en la segunda construccin.
Mensaje
Cualquier tipo de texto. Para crear un salto de lnea empleamos el carcter vbCrLf.
Actualizacin terminada:" & vbCrLf & "- Importacin de datos de venta.
Botones
Si quieres puedes aadir cualquier de estos cuatro botones (si no pones nada Excel te
pondr vbOkOnly por defecto).
vbOkOnly
vbOkCancel
vbYesNoCancel
vbAbortRetryIgnore
Iconos
Puedes elegir entre los siguientes.
vbCritical
vbQuestion
vbExclamation
vbInformation
Ttulo
Cualquier texto.
Devolver informacin
Si quieres que el programa utilice la respuesta del usuario, estas son las cifras que te
devuelve.
Ok = 1
Cancel = 2
Abort = 3
Retry = 4
Ignore = 5
Yes = 6
No = 7
Ejemplos
Te ponemos unos ejemplos mdelo para que te vayas acostumbrando a las diferentes
messagebox.
Sub MessageBox()
msgbox "Actualizacin terminada:", _
vbOKOnly, "Informacin"
End Sub

Sub MessageBox()
msgbox "Quieres seguir?", vbYesNo, "Informacin importante"
End Sub

Sub MessageBox()
Dim intRespuesta As Integer
intRespuesta = MsgBox("Quieres seguir?", vbQuestion + vbYesNo, _
Informacin importante")
If intRespuesta = 6 Then
MsgBox"Seguimos"
Else
MsgBox"Terminamos"
End If
End Sub

Sub MessageBox()
msgbox "Actualizacin terminada:" & _
vbCrLf & vbCrLf & _
"- Importacin de datos de venta." & vbCrLf & _
"- Clculos de impuestos." & vbCrLf & _
"- Venta por proveedor." & vbCrLf _
, vbOKOnly, "Actualizacin terminada."
End Sub

Sub MessageBox()
msgbox "Actualizacin terminada:" & vbCrLf & vbCrLf & _
"- Importacin de datos de venta." & vbCrLf & _
"- Clculos de impuestos." & vbCrLf & _
"- Venta por proveedor." & vbCrLf _
, vbExclamation + vbOKOnly, _
"Actualizacin terminada."
End Sub



Explorador de informes


Resumen de este ejemplo de Explorador de informes
Este ejemplo nos nuestra, de cmo armar un explorador de informes en Excel,
manejndonos desde un Panel Principal. Esto nos permite dar una mejor esttica a cualquier
aplicacin desarrollada en Excel.
La importancia del formato Excel de presentacin
Como hemos ido comentando en otros ejemplos de Excel y VBA de este sitio, la
presentacin de los libros Excel es algo muy importante, sobre todo si trata de informes
para distribuir.
Captura de pantalla de esta plantilla Excel

Instrucciones
Encontrars un ejemplo real del
Explorador de archivos Excel aqu
Para ver el cdigo utilizado, combine las siguientes Teclas: Alt + F11.

Como armar un reloj en Excel (mtodo OnTime).

Sobre el mtodo de Excel VBA OnTime
El mtodo OnTime de Excel ejecuta una macro en una hora designada o en intervalos fijos.
Cdigo VBA empleado para el mtodo OnTime
Sub Reloj()
Range("A1").Formula = "=NOW()"
Application.OnTime Now + TimeValue("00:00:01"), "reloj"
End Sub

Sub auto_Open()
Call Reloj
End Sub
Imprimir la hora en la hoja Excel
Segn el cdigo VBA descrito arriba, Excel pondr el tiempo en la celda A1. Para devolver
fragmentos (hora/minuto/segundo), emplea formulas como
= HORA(A1)
= MINUTO(A1)
= SEGUNDO(A1)

Crear una barra de progreso en Excel
Un ejemplo de una macro VBA de como crear una barra de progreso (progress bar) para
incluir en nuestras aplicaciones y plantillas Excel.

Crear una barra de progreso en Excel VBA.
De esta forma podemos aadir un medidor de progreso grfico a la barra de estado de
Excel.
El cdigo
Option Explicit

Sub BarraDeProgreso()

Dim R As Integer
Dim MT As Double
For R = 1 To 180
MT = Timer
Do
Loop While Timer - MT < 0.05
Application.StatusBar = "Progress: " & R & " de 180: " & _
Format(R / 180, "Percent") & " --- " & "Cumplimiento"
DoEvents
Next R
Application.StatusBar = False

End Sub

Casilla de Verificacin (evento Change)
Resumen
Se usa el evento change para simular una casilla de verificacin, en la columna A, y luego
combinamos con una suma condicional, que que solamente SUMA los meses que se
encuentran tildados.
Un ejemplo real
Al hacer clic sobre la columna A, tilda la celda.

Luego se puede aplicar una frmula matricial y condicional para sumar los meses tildados.
{=SUMA(SI($A$2:$A$13<>;$C$2:$C$13;0))}
El cdigo
El cdigo debe escribirse en la misma hoja Excel, ver imagen.

'Jose Skraviuk
'ayudaexcel {at} yahoo.com.ar

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Dim aOffset As Integer
On Error GoTo err_handler
Application.EnableEvents = False

If Not Application.Intersect _
(Target, Columns("A")) Is Nothing Then

If Target.Column = 4 Then
aOffset = 3
Else
aOffset = 2
End If

If IsEmpty(Target.Value) Then
With Target
.Font.Name = "Wingdings"
.Value = Chr(252)
End With
Target.Offset(0, iOffset).Select
Else
Target.Value = ""
Target.Offset(0, iOffset).Select
End If

End If

err_handler:
Application.EnableEvents = True

End Sub
Comentarios
Para evitar confusiones (sobre todo si estamos preparando una plantilla para otras
personas), podramos optar por la frmula SUMAPRODUCTO, que adems permite
aplicar varias condiciones de una manera fcil.
=SUMAPRODUCTO((A2:A13<>)*C2:C13)

Excel VBA Crear un sistema de ayuda

Resumen
Un bonito ejemplo de como usar el evento Change, para proporcionar ayuda acerca de la
celda seleccionada.
Este truco Excel permite proporcionar ayuda en lnea al usuario, acera de la celda
seleccionada. Esto puede resultar til a la hora de construir formularios (no los de VBA,
sino los formularios a rellenar de toda la vida) en una hoja Excel.

El cdigo
'Jose Skraviuk
'ayudaexcel@yahoo.com.ar

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

If ActiveCell = Range("B5") Then
Range("ayuda") = "Ud ha seleccionado la OPCION1, permite ver el
ejemplo n1"
Else
Range("ayuda") = ""
If ActiveCell = Range("D5") Then
Range("ayuda") = "Ud ha seleccionado la OPCION2, permite ver el
ejemplo n2"
Else
Range("ayuda") = ""
End If
End If

End Sub

El temporizador de Excel VBA
Si queremos que una instruccin se haga automticamente, a intervalos fijos, podemos
recurrir al mtodo Application.OnTime.
Procedimientos
Vamos a necesitar tres sencillas macros.
1. StartTemporizador Iniciar el temporizador
2. Tu_Sub Cualquier instruccin
3. StopTemporizador Cerrar el temporizador
Luego hacen falta dos botones en la hoja, uno para la macro StartTemporizador, y otro para
la StopTemporizador.
Declaraciones
Por encima de las macros descritas abajo, hacemos las declaraciones.
Public datHora As Date
Public Const conIntervalo = 60 'un minuto
Public Const conRunMacro = "Tu_Sub" 'tu proced.
Iniciar temporizador
La primera macro inicia el temporizador.
Sub StartTemporizador()
datHora = Now + TimeSerial(0, 0, conIntervalo)
'iniciar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub
Tu procedimiento
Aqu pones lo que quieres que Excel haga periodicamente.
Sub Tu_Sub()
MsgBox datHora 'o cualquier instruccin
'reiniciar el temporizador
StartTemporizador
End Sub
Cerrar temporizador
El temporizador hay que cerrarlo manualmente.
Sub StopTemporizador()
On Error Resume Next
'desactivar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub
Todo el cdigo
Ahora, el mdulo de las macros descritas arriba debe tener el siguiente aspecto.
Public datHora As Date
Public Const conIntervalo = 60 'un minuto
Public Const conRunMacro = "Tu_Sub" 'tu proced.

Sub StartTemporizador()
datHora = Now + TimeSerial(0, 0, conIntervalo)
'iniciar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub

Sub Tu_Sub()
MsgBox datHora 'o cualquier instruccin
'reiniciar el temporizador
StartTemporizador
End Sub

Sub StopTemporizador()
On Error Resume Next
'desactivar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub

WAIT mostrar un formulario VBA durante un tiempo
predeterminado
Con el mtodo WAIT puedes hacer que un formulario se cierre despus de un tiempo
determinado. Esto puede ser til para presentar informacin al usuario (La importacin ha
terminado con xito, El archivo est guardado etc). El truco est en utilizar el mtodo
WAIT de VBA.
Procedimiento
Crea un formulario frmMensaje con el mensaje que quieres que aparezca. Aade este
cdigo al formulario. El ejemplo nos dice que la rutina se va a esperar (Wait) hasta la
hora
Now + TimeValue("00:00:04")
Es decir la hora actual ms 4 segundos.
Sub MostrarFormulario()

Private Sub UserForm_Activate()
Application.Wait Now + TimeValue("00:00:04")
frmMensaje.Hide

End Sub
Luego, para mostrar el formulario en cualquier parte de tu programa, aplicas este cdigo.
frmMensaje.Show
En el ejemplo de abajo, el formulario se mostrar al abrir el libro (ponemos el cdigo en el
contenedor de cdigo VBA EsteLibro.
Private Sub Workbook_Open()
frmMensaje.Show
End Sub

Imprimir
Macro VBA Excel para imprimir adecuadamente
A veces vale la pena incluir una funcin para que el usuario del libro pueda imprimir
cmodamente (y seguro), por ejemplo desde un botn. De esta manera mantenemos el
control sobre lo que se va a imprimir, y de los parmetros que se mandarn a la impresora.
Abajo encontrars sencillos ejemplos de la aplicacin de cmo imprimir desde Excel VBA:
Seleccin
Hojas seleccionadas
Todas las hojas
Primero ajustamos los parmetros de la impresin, el apartado PageSetup. Luego se
imprime con el mtodo PrintOut.
Marcado VBA para imprimir las celdas seleccionadas
Sub Imprimir_seleccion()

'preparar la hoja para la impresin
With ActiveSheet.PageSetup
.PrintArea = ""
.Orientation = xlPortrait 'xlLandscape
.PaperSize = xlPaperA4 'formato A4
.BlackAndWhite = False 'incluir colores o no
.FitToPagesWide = 1 'reduce el tamao de la hoja (ancho)
.FitToPagesTall = 1 'reduce el tamao de la hoja (alto)
.CenterHorizontally = False 'centrar horizontalmente
.CenterVertically = False 'centrar verticalmente
End With

'imprimir las celdas seleccionadas (1 copia)
ActiveWindow.Selection.PrintOut copies:=1, collate:=True

End Sub
Cdigo VBA para imprimir las hojas seleccionadas
Sub Imprimir_seleccion()

'preparar la hoja para la impresin
With ActiveSheet.PageSetup
.PrintArea = ""
.Orientation = xlPortrait 'xlLandscape
.PaperSize = xlPaperA4 'formato A4
.BlackAndWhite = False 'incluir colores o no
.FitToPagesWide = 1 'reduce el tamao de la hoja (ancho)
.FitToPagesTall = 1 'reduce el tamao de la hoja (alto)
.CenterHorizontally = False 'centrar horizontalmente
.CenterVertically = False 'centrar verticalmente
End With

'imprimir las celdas seleccionadas (1 copia)
ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=True

End Sub
Cdigo VBA para imprimir todas las hojas del libro
Sub Imprimir_seleccion()

'preparar la hoja para la impresin
'bucle que repasa todas las hojas
For Each Worksheet In ActiveWorkbook.Sheets
With ActiveSheet.PageSetup
.PrintArea = ""
.Orientation = xlPortrait 'xlLandscape
.PaperSize = xlPaperA4 'formato A4
.BlackAndWhite = False 'incluir colores o no
.FitToPagesWide = 1 'reduce el tamao de la hoja (ancho)
.FitToPagesTall = 1 'reduce el tamao de la hoja (alto)
.CenterHorizontally = False 'centrar horizontalmente
.CenterVertically = False 'centrar verticalmente
End With
Next Worksheet 'fin del bucle

'imprimir las celdas seleccionadas (1 copia)
ActiveWorkbook.PrintOut From:=1, To:=1, copies:=1, collate:=True

End Sub

Excel y VBA
Copiar mdulo VBA a otro libro Excel
Mtodo para guardar un mdulo VBA/importarlo a otro libro Excel. Al exportar hojas a un
libro nuevo (el primer ejemplo de cdigo), los mdulos VBA no se copiarn, sino el libro
nuevo se quedar sin cdigo VBA.
Es decir, este ejemplo no vale para copiar mdulos VBA.


'copiar hojas a un libro nuevo
Sheets(Array("Hoja1", "Hoja2", "Hoja3")).Copy
Para exportar un mdulo VBA, primero hay que guardarlo como un archivo de texto, y
luego importarlo desde el libro nuevo.
Objetos del editor VBA
El editor VBA tiene 2 objetos bsicos:
VBProject
Todos los mdulos y componentes/referencias VBA del libro
VBComponent
Un mdulo (o formulario) especfico del VBProject
Para utilizarlos debes marcar la siguiente referencia del editor VBA:
Herramientas Referencias Microsoft Visual Basic for Applications Extensibility x.x.
Exportar mdulo VBA
'exportar mdulo VBA
Dim vbaProyecto As VBIDE.VBProject
Dim vbaModulo As VBIDE.VBComponent
Public strRuta as String

Set vbaProyecto = ThisWorkbook.VBProject
Set vbaModulo = vbaProyecto.VBComponents("Module1")
strRuta = ThisWorkbook.Path & "\modulo1_export.txt"
'o strRuta = "c:\modulo1_export.txt"

vbaModulo.Export strRuta
Importar mdulo VBA
'importar mdulo VBA
Dim vbaProyecto As VBIDE.VBProject
Dim vbaModulo As VBIDE.VBComponent
Public strRuta as String

strRuta = ThisWorkbook.Path & "\modulo1_export.txt"
'o strRuta = "c:\modulo1_export.txt"

Set vbaProyecto = ActiveWorkbook.VBProject
vbaProyecto.VBComponents.Import (strRuta)

'suprimir el archivo plano
Kill strRuta

Funciones

Calcular los Dgitos de control desde Excel VBA
En este ejemplo presentamos un ejemplo de marcado VBA para calcular los dgitos de
control de una cuenta bancaria espaola.

Qu son los dgitos de control?
Las cuentas bancarias espaolas consisten de 4 grupos de dgitos. Los dgitos de control
verifican los cdigos de Entidad y Oficina (el primer dgito), y el Nmero de Cuenta (el
segundo dgito). El algoritmo para calcular los dgitos de control se define en Norma
bancaria 34 de AEB (Asociacin Espaola de Banca).
Tarea
Queremos un programa que nos calcule los dgitos de control de una cuenta.
Un ejemplo de cuenta
0123 4567 xx 0123456789
Entidad 0123
Oficina 4567
Dgitos de control xx
Cuenta 0123456789
En el ejemplo arriba, los dgitos de control seran 81.
Empezamos
Abrimos un libro nuevo. Formateamos las celdas B3:E3 a TEXTO.

Crear el mdulo
Entra a Herramientas Macros Editor VBA. A la izquierda ves (si no lo ves CTRL+R)
algo como ProyectoVBA (Tu libro). Marca ese proyecto. Insertar Mdulo.
Doble click en el mdulo nuevo, y a la derecha sale un espacio blanco, es para el cdigo.
Herramientas Referencias. Marca Microsoft ActiveX DataObjects x.x Library.
Ahora cierras el editor VBA, vuelves a Excel. Guardamos el libro.
El cdigo
Sub DC_check()

Dim Bank As String
Dim Office As String
Dim DC As String
Dim Account As String
Dim BankOffice As String
Dim Valor1, Valor2, Valor3, Valor4, Valor5
DIm Valor6, Valor7, Valor8, Valor9, Valor10
Dim TestValue1 As Integer
Dim TestValue2 As Integer
Dim TestValueDC As Integer
'---------------------------------------------------
'recoger el nmero de cuenta
Bank = Range("B3").Text
Office = Range("C3").Text
DC = Range("D3").Text
Account = Range("E3").Text
BankOffice = Bank & Office
'---------------------------------------------------
'evaluar DC (1)
Valor1 = (Mid(BankOffice, 1, 1) * 4)
Valor2 = (Mid(BankOffice, 2, 1) * 8)
Valor3 = (Mid(BankOffice, 3, 1) * 5)
Valor4 = (Mid(BankOffice, 4, 1) * 10)
Valor5 = (Mid(BankOffice, 5, 1) * 9)
Valor6 = (Mid(BankOffice, 6, 1) * 7)
Valor7 = (Mid(BankOffice, 7, 1) * 3)
Valor8 = (Mid(BankOffice, 8, 1) * 6)

TestValue1 = Valor1 + Valor2 + Valor3 + Valor4 + _
Valor5 + Valor6 + Valor7 + Valor8

TestValue1 = (TestValue1 Mod 11)
TestValue1 = 11 - TestValue1

If TestValue1 = 10 Then TestValue1 = 1
If TestValue1 = 11 Then TestValue1 = 0
'---------------------------------------------------
'evaluar DC (2)
Valor1 = (Mid(Account, 1, 1) * 1)
Valor2 = (Mid(Account, 2, 1) * 2)
Valor3 = (Mid(Account, 3, 1) * 4)
Valor4 = (Mid(Account, 4, 1) * 8)
Valor5 = (Mid(Account, 5, 1) * 5)
Valor6 = (Mid(Account, 6, 1) * 10)
Valor7 = (Mid(Account, 7, 1) * 9)
Valor8 = (Mid(Account, 8, 1) * 7)
Valor9 = (Mid(Account, 9, 1) * 3)
Valor10 = (Mid(Account, 10, 1) * 6)

TestValue2 = Valor1 + Valor2 + Valor3 + Valor4 + Valor5 + _
Valor6 + Valor7 + Valor8 + Valor9 + Valor10

TestValue2 = (TestValue2 Mod 11)
TestValue2 = 11 - TestValue2

If TestValue2 = 10 Then TestValue2 = 1
If TestValue2 = 11 Then TestValue2 = 0
'---------------------------------------------------
'reconstituir las dos cifras del DC
TestValueDC = TestValue1 & TestValue2

'evaluar DC completo
If TestValueDC = DC Then
Test = True
MsgBox "Correcto."
Else
Test = False
MsgBox "DC no corresponde a esta cuenta." & vbCrLf & _
"[en este caso DC sera " & TestValueDC & ".]", vbOKOnly, vbInformation
End If

End Sub

Buscar fragmento de texto en una lista
La funcin INSTR nos permite buscar un fragmento de texto en una lista de cadenas de
texto. Nos devuelve la posicin dentro de la cadena. Esta cifra es clave: 0 = no coincide, >0
= s que coincide.
En este ejemplo buscaremos en una lista de apellidos. En el ejemplo abajo, Aban nos
devuelve dos apellidos. Otro ejemplo sera queiro, c ual nos devolvera Abanquiero.
Preparamos la hoja
En celdas C5:C12 tenemos la lista en que buscar (celdas D5:D12 tambin
pertenecen a la matriz.
En celda G2 introducimos el criterio.
En celdas G5:H5 el programa pondr la lista filtrada, all no tienes que introducir
nada.

Crear el mdulo
Entra a Herramientas Macros Editor VBA. A la izquierda ves (si no lo ves CTRL+R)
algo como ProyectoVBA (Tu libro). Marca ese proyecto. Insertar Mdulo.
Doble click en el mdulo nuevo, y a la derecha sale un espacio blanco, es para el cdigo.
Ejecutar macro
Para ejecutar esta macro entras a Herramientas Macros. All encontrars la macro
Buscar_Texto_En_Lista(). Marca esta, y Ejecutar.
Cdigo
Sub Buscar_Texto_En_Lista()

'dimensiones
Dim lngUltimaFila As Long
Dim strObjetoBuscar As String
Dim lngResultado As Long
Dim lngColumna As Long, lngFila As Long
Dim lngPegarColumna As Long, lngPegarFila As Long
Dim x As Integer, n As Integer

'quitar resultados anteriores
Range("G5:H4000").ClearContents

'columna + fila donde empezar/terminar bsqueda
lngColumna = 2
lngFila = 5
lngUltimaFila = Columns(lngColumna).Range("A65536").End(xlUp).Row

'columna + fila donde empezar a pegar resultados
lngPegarColumna = 6
lngPegarFila = 5

'objeto a buscar
strObjetoBuscar = Range("G2").Text
If strObjetoBuscar = "" Then GoTo 99
'minsculas
strObjetoBuscar = LCase(strObjetoBuscar)

'bucle: realizar bsqueda
For n = lngFila To lngUltimaFila

'evaluacin
lngResultado = InStr(1, Cells(n, 3),strObjetoBuscar, vbTextCompare)

'copiar/pegar
If lngResultado > 0 Then
Range(Cells(n, 2), Cells(n, 4)).Copy
Range( _
Cells(lngPegarFila, lngPegarColumna), _
Cells(lngPegarFila, lngPegarColumna + 2)) _
.Select
ActiveSheet.Paste
lngPegarFila = lngPegarFila + 1
End If

Next n

'aparcar
Application.CutCopyMode = False
Range("G2").Select

99:
End Sub

Sumar rangos variables con VBA Excel
Sumar un rango en Excel es fcil. Sumar un rango expresado por una variable en VBA es
un poco ms complicado (pero sigue siendo fcil).
No siempre se sabe de antemano que celdas formarn parte del rango a sumar. Entonces
tenemos que expresar el rango de forma variable.
En Excel es fcil sumar este rango mediante una sencilla frmula. Pero VBA no contiene
ninguna funcin igual. Entonces hay que hacer que VBA utilice las funciones de Excel.
Utilizar funciones Excel en VBA
Tenemos un rango varSuma, el rango a sumar. Para sumar las celdas de este rango tenemos
que llamar a la funcin SUM de Excel.
Application.WorksheetFunction.Sum(varSuma)
De esta manera puedes aplicar cualquier frmula de Excel en VBA, con tal de que
empieces la lnea de cdigo con
Application.WorksheetFunction...
Nuestro ejemplo
En este ejemplo el rango que nos interesa sumar son los valores correspondientes a BB,
es decir C8:C13.

Escribir la suma (en celda)
'el rango a sumar
varSuma = Range(Cells(8, 3), Cells(13, 3))
'sumar el rango
Cells(1, 1) = Application.WorksheetFunction.Sum(varSuma)

<h2>Escribir la suma (variable)</h2>
<div class="cb">
<pre>

'el rango a sumar
varSuma = Range(Cells(8, 3), Cells(13, 3))
'sumar el rango
SUMA = Application.WorksheetFunction.Sum(varSuma)

SQL para VBA de Excel
Excel y Bases de datos SQL
VBA de Excel te permite conectar con prcticamente cualquier base de datos externa para
sacar o grabar datos. Un ejemplo tpico de estas aplicaciones es la importacin
automatizada de datos a Excel desde una base de datos externa.
Esto significa que debemos incluir trozos de cdigo SQL en nuestra programacin VBA
para poder realizar esta tarea.
Qu es SQL?
SQL (Structured Query Language o Lenguaje de consultas estructurado) es un lenguage
que se utiliza para organizar, gestionar y recuperar datos de bases de datos. Con SQL se
puede consultar bases de datos para buscar/escribir etc datos.
Surgi de IBM a finales de los aos 70. Posteriormente adoptado por ANSI (American
National Standards Institute). La ltima version se llama SQL-99, y todas las bases de datos
comnes son compatibles.
Ejemplos de comandos SQL
Abajo presentamos informacin bsica sobre algunos de los comandos SQL que emplearas
al programar una macro de este tipo.
Captulo Comando Descripcin
SQL y tablas CREATE Crear nuevas tablas y campos

DROP Eliminar tablas

ALTER Modificar tablas o agregar campos

TRUNCATE Eliminar contenido de tablas
SQL y registros SELECT Consultar registros

SELECT INTO Consultar/escribir registros

INSERT Insertar nuevos registros

UPDATE Modificar registros

DELETE Eliminar registros
SQL y condiciones FROM Especificar tabla de origen

WHERE Espeificar condiciones

GROUP BY Separar registros seleccionados en grupos

ORDER BY
Ordenar registros seleccionados segn
criterio
SQL y operadores AND TRUE si dos registros cumplen condicin

OR TRUE si uno de dos registros cumple

NOT Negacin lgica devuelve el valor
contrario

< Menor que

> Mayor que

<> Distinto de

< = Menor o igual que

>= Mayor o igual que

= Igual que

BETWEEN Especificar intervalo de valores
SQL y variables

Incluir variables en las consultas

VBA: Consultas SQL Tablas
CREATE
Para crear nuevas tablas y campos.
CREATE TABLE nombre_tabla
(nombre_columna1 datatype,
nombre_columna2 datatype, )
Ejemplo
CREATE TABLE Nombres
(Apellido varchar (40), Nombre varchar(40))
Varchar significa que esa columna solo puede contener texto. La longitud mxima
(opcional) se puede poner entre parntesis. Otros formatos son
integer nmeros integrales
decimal nmeros con decimales
char todo tipo de contenido
date fecha en formato yyyymmdd.
DROP
Para suprimir tablas o bases de datos.
DROP TABLE nombre_tabla
DROP DATABASE nombre_basededatos
TRUNCATE
Para suprimir el contenido una tabla (y no toda la tabla en si). Puede ser muy til de vez en
cuando.
TRUNCATE TABLE nombre_tabla
ALTER
Para aadir/suprimir columnas en una base de datos.
ALTER TABLE nombre_tabla
ADD nombre_columna datatype
ALTER TABLE nombre_tabla
DROP nombre_columna
Ejemplo
ALTER TABLE Nombre
ADD Direccin varchar(40)
ALTER TABLE Nombre
DROP Apellido

VBA y consultas SQL Registros
SELECT
Para seleccionar (devolver) datos de la base de datos.
SELECT nombre_columna(s) FROM nombre_tabla
SELECT * FROM nombre_tabla
SELECT DISTINCT nombre_columna(s FROM nombre_tabla
INSERT
Para grabar nuevos registros en la base de datos.
INSERT INTO nombre_tabla VALUES (valor1, valor2, valor3.
Para insertar datos en una columna escpecfica:
INSERT INTO nombre_tabla (columna1, columna2)
VALUES (valor1, valor2, valor3)
UPDATE
Para modificar datos de una tabla.
UPDATE nombre_tabla
SET nombre_columna = nuevo valor, nombre_columna2 = nuevo valor2
WHERE nombre_columna = un valor
DELETE
Para suprimir datos de una tabla.
DELETE FROM nombre_tabla WHERE nombre_columna = un valor
Para suprimir todas las filas de una tabla:
DELETE FROM nombre_tabla
o
DELETE * FROM nombre_tabla

VBA y SQL: Condiciones
FROM
Para especificar tabla de origen. Utilizado con el comando SELECT.
SELECT DISTINCT nombre_columna(s)
FROM nombre_tabla
WHERE
Se utiliza para escpecificar condiciciones en la consulta de la base de datos. Utilizado con
el comando SELECT, ms un operador y luego la condicin en si.
SELECT nombre_columna
FROM nombre_tabla
WHERE nombre_columna2 operador valor
Unos de los operadores que WHERE admite son
Operador Explicacin
AND TRUE si dos registros cumple la condicion.
OR TRUE si uno de los registros cumple la condicion.
NOT Negacin lgica. Devuelve el valor contrario.
< Menor que.
> Mayor que.
<> Distinto de.
< = Menor Igual que.
>= Mayor Igual que.
= Igual que.
BETWEEN Especificar un intervalo de valores.
Si la condicin es de texto, hay que poner apstrofes (Lpez), si es numrico no se pone.
GROUP BY
Para separar registros seleccionados en grupos. Interesante si quieres sumar cada registro
distinto de una columna. Si no aplicas el GROUP BY, cada suma ser el total de todos los
registros, y no la suma de cada registro nico.
SELECT nombre_columna1, SUM(nombre_columna2)
FROM nombre_tabla
GROUP BY nombre_columna1
ORDER BY
Para ordenar los registros.
SELECT nombre_columna1, nombre_columna2, nombre_columna3
FROM nombre_tabla
ORDER BY nombre_columna1, nombre_columna3

VBA y programacin SQL Operadores
Operador Descripcin
AND TRUE si dos registros cumple la condicion.
OR TRUE si uno de los registros cumple la condicion.
NOT Negacin lgica. Devuelve el valor contrario.
< Menor que.
> Mayor que.
<> Distinto de.
< = Menor Igual que.
>= Mayor Igual que.
= Igual que.
BETWEEN Especificar un intervalo de valores.

Excel y consultas SQL Variables SQL

Algunas veces querrs hacer consultas SQL y poner una variable como condicin. Esto se
puede hacer perfectamente, solo hay que tener un poco de cuidado al formular la ortografa
de la consulta.
Ejemplo
Sacamos el salario de un empleado que especificamos en una celda de Excel, o en una caja
de texto de VBA etc. Luego convertimos este nombre a una variable llamada Empleado
Ahora incluimos la variable en la consulta SQL.
strSQL = SELECT Salario FROM tabla_Salarios WHERE Empleado LIKE &
Empleado &