Ejemplos VBA Excell

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 importación es muy eficaz, tarda poco, y puede ayudar mucho en la “automización” de tus rutinas diarias. Procedimiento Empezamos con un libro Excel vacío. Luego crearemos un módulo VBA dentro de este libro. En este módulo escribiremos el código. El libro d e las celdas a importar debe tener rótulos en la primera fila, y los datos a p artir 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"

Transcript of Ejemplos VBA Excell

Excel y otros programasCrear una barra de progreso en Excel

Option ExplicitSub BarraDeProgreso()Dim R As IntegerDim MT As DoubleFor R = 1 To 180MT = TimerDoLoop While Timer - MT < 0.05Application.StatusBar = "Progress: " & R & " de 180: " & _Format(R / 180, "Percent") & " --- " & "Cumplimiento"DoEventsNext RApplication.StatusBar = FalseEnd SubImportar 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.ProcedimientoEmpezamos 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.

'dimensionesDim datConnection As ADODB.ConnectionDim recSet As ADODB.RecordsetDim recCampo As ADODB.FieldDim strDB, strSQL As StringDim i As Long'ruta al archivo Excel (la base de datos)'strDB = ThisWorkbook.Path & "\" & _"MiArchivoExcel.xls" strDB = "C:\MiArchivoExcel.xls" 'si otra carpeta

'conectarSet datConnection = New ADODB.ConnectionSet recSet = New ADODB.RecordsetdatConnection.Open "DRIVER=Microsoft Excel _Driver (*.xls);" & "DBQ=" & strDB'consulta SQL'strSQL = "SELECT * FROM [NuestroRango]" strSQL = "SELECT * FROM [Hoja1$A1:Q1000]"'abrimos el recordsetrecSet.Open strSQL, datConnection, adOpenStatic'copiar datosActiveSheet.Cells.ClearContentsActiveSheet.Cells(2, 1).CopyFromRecordset recSet'copiar rotulos (campos)i = 1For Each recCampo In recSet.Fields ActiveSheet.Cells(1, i) = _ recCampo.Name: i = i + 1Next recCampo'desconectar (importante!)recSet.ClosedatConnection.Close'cerrar los objetosSet recSet = NothingSet datConnection = NothingEnd Sub

Importar datos de Word a ExcelAl 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 1Public varText()Sub abrirWordDesdeExcel()Dim strWordArchivo As VariantDim i, r, intLineas As IntegerDim appWord As Word.ApplicationDim appDoc As Word.DocumentDim rngDoc As Word.Range'dialogo 'abrir archivo'strWordArchivo = Application.GetOpenFilename _("Documentos Word (*.doc), *.doc"): On Error GoTo 99'crear el objeto WordSet appWord = CreateObject("Word.Application")Set appDoc = appWord.Documents.Open(strWordArchivo)'leer archivo WordintLineas = appDoc.Paragraphs.Count: ReDim varText(intLineas)r = 1For i = 1 To intLineasSet rngDoc = appDoc.Range( _Start:=appDoc.Paragraphs(i).Range.Start, _End:=appDoc.Paragraphs(i).Range.End)varText(i) = rngDoc.Textr = r + 1Next 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 creadosappDoc.Close: Set appDoc = NothingappWord.Quit: Set appWord = Nothing99: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.ProcedimientoEsta 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 selecionadoSelection.Copy'crear nueva aplicacin WordDim appWord As Word.ApplicationSet appWord = New Word.ApplicationWith appWord .Visible = True .ActivateEnd With'crear nuevo documento WordappWord.Documents.Add'pegar celdas ExcelappWord.Selection.Paste'liberar el objeto WordSet appWord = NothingEnd Sub

Excel y bases de datosImportar 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()'dimensionesDim datConnection As ADODB.ConnectionDim recSet As ADODB.RecordsetDim strDB, strSQL As StringDim strTabla As StringDim lngTablas As LongDim i As Long'elegir uno de estas dos rutas al archivo AccessstrDB = ThisWorkbook.Path & "\" & "db.mdb"'strDB = "C:\vba\db.mdb" 'si en otra carpeta

'nombre de la tabla del archivo AccessstrTabla = "salarios_2003"'crear la conexinSet datConnection = New ADODB.ConnectionSet recSet = New ADODB.RecordsetdatConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _"Data Source =" & strDB & ";"'consulta SQLstrSQL = "SELECT * FROM " & strTabla & ""recSet.Open strSQL, datConnection'copiar datos a la hojaActiveSheet.Cells(2, 1).CopyFromRecordset recSet'copiar rtuloslngCampos = recSet.Fields.Count For i = 0 To lngCampos - 1 ActiveSheet.Cells(1, i + 1).Value = recSet.Fields(i).Name Next'desconectarrecSet.Close: Set recSet = NothingdatConnection.Close: Set datConnection = NothingEnd 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 OPENEl OPEN nos hace posible crear/abrir un archivo de texto, para luego proceder a escribir a este archivo.Hay tres modos:OutputAbrir (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 #fAppendAbrir (o crear) para escribir (seguir por la ltima lnea).Open strArchivoTexto For Append As #fInputAbrir para lectura (a Excel).Open strArchivoTexto For Input As #fSobre 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 PRINTEl 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: " & DateComando WRITEEl 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.UserNameCada bloque de texto se delimita del prximo por el carcter ;.Escribir archivo Ascii OUTPUTSub Crear_Escribir_ArchivoAscii()Dim strNombreArchivo, strRuta, strArchivoTexto As StringDim f As Integer'nombre y ruta del archivo de textostrNombreArchivo = "MiArchivoAscii.txt"strRuta = "C:\"strArchivoTexto = strRuta & strNombreArchivo'abrimos el archivo para escribirf = FreeFileOpen strArchivoTexto For Output As #f'escribimos al archivoPrint #f, "Fecha de hoy: " & DatePrint #f, "Usuario: " & Application.UserName'cerramos el archivo de textoClose fEnd Sub

Escribir archivo Ascii APPENDSub Crear_Escribir_ArchivoAscii()Dim strNombreArchivo, strRuta, strArchivoTexto As StringDim f As Integer'nombre y ruta del archivo de textostrNombreArchivo = "MiArchivoAscii.txt"strRuta = "C:\"strArchivoTexto = strRuta & strNombreArchivo'abrimos el archivo para escribirf = FreeFileOpen strArchivoTexto For Append As #f'escribimos al archivoPrint #f, "Fecha de hoy: " & DatePrint #f, "Usuario: " & Application.UserName'cerramos el archivo de textoClose fEnd Sub

Leer archivo Ascii INPUTSub Leer_ArchivoAscii()Dim strNombreArchivo, strRuta, strArchivoTexto As StringDim f, i As IntegerDim strTexto As String'nombre y ruta del archivo de textostrNombreArchivo = "MiArchivoAscii.txt"strRuta = "C:\"strArchivoTexto = strRuta & strNombreArchivo'abrimos el archivo para lecturaf = FreeFileOpen strArchivoTexto For Input As #f'leemos el archivo de texto a columna de Exceli = 1While Not EOF(f)Line Input #f, strTextoCells(i, 1) = strTextoi = i + 1Wend'cerramos el archivo de textoClose fEnd 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 StringDim strMacro As StringstrMacro = ActiveWindow.Caption'abrir el archivo .dbf como archivo ExcelWorkbooks.Open Filename:="C:\dbase.dbf"'copiar contenidodBase = ActiveWindow.CaptionWindows(dBase).ActivateCells.Copy'pegar contenido en archivo ExcelWindows(strMacro).ActivateRange("A1").Select: ActiveSheet.Paste'cerrar archivo .dbfWindows(dBase).ActivateApplication.DisplayAlerts = FalseWindows(dBase).CloseApplication.DisplayAlerts = True'aparcar en la nueva listaWindows(strMacro).ActivateColumns.AutoFitEnd 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 ExcelTeorticamente hay tres posibilidades como proceder.No.ConceptoResultadoDelimitadores

1Texto no delimitadoTexto queda en la columna A-

2Texto delimitadoTexto queda en la columna ASeguirn presentes

3Texto delimitadoTexto se divide en columnas segn posiciones de los delimitadoresDesaparecen

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 columnasEste 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]

'dimensionesDim strNombreArchivo'dilogo para abrir archivostrNombreArchivo = Application.GetOpenFilenameIf strNombreArchivo = False Then Exit Sub'abre el archivo en la columna AWorkbooks.OpenText _Filename:=strNombreArchivo, _Origin:=xlWindows, _StartRow:=1, _FieldInfo:=Array(1, 1)End subAbrir archivo de texto en Excel, y dividir el contenido en columnasEn 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')

'dimensionesDim strNombreArchivo'dilogo para abrir archivostrNombreArchivo = Application.GetOpenFilenameIf strNombreArchivo = False Then Exit Sub'abrir el archivo y dividir en columnasWorkbooks.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.)

ResumenEste 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 WorkbookDim strdate As StringDim stEmail As StringApplication.ScreenUpdating = Falsestrdate = Format(Now, "dd-mm-yy h-mm-ss")strEmail = "[email protected]"ActiveSheet.CopySet wb = ActiveWorkbookWith wb.SaveAs ThisWorkbook.Name & " " & strdate & ".xls".SendMail strEmail, "Archivo Adjunto".ChangeFileAccess xlReadOnlyKill .FullName.Close FalseEnd WithApplication.ScreenUpdating = TrueEnd SubConfiguracionesHay que indicar la direccin email a emplear.strEmail = "[email protected]"

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 utilizadosPara 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.ParmetroCarpeta

3Deleted Items (Elementos elimindos)

4Outbox (Bandeja de salida)

5Sent Items (Elementos enviados)

6Inbox (Bandeja de entrada)

9Calendar (Calendario)

10Contacts (Contactos)

11Journal (Diario)

12Notes (Notas)

13Tasks (Tareas)

16Drafts (Borrador)

El cdigoSub ImportarContactos()Dim olApp As Outlook.ApplicationDim olContacts As Outlook.MAPIFolderDim olContact As Outlook.ContactItemDim i As IntegerSet olApp = New Outlook.ApplicationSet olContacts = _olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)'rotulosCells(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 itemsFor i = 2 To olContacts.Items.CountIf TypeOf olContacts.Items.Item(i) Is _Outlook.ContactItem ThenSet olContact = olContacts.Items.Item(i)Cells(i, 1) = olContact.FullNameCells(i, 2) = olContact.Email1AddressCells(i, 3) = olContact.JobTitleCells(i, 4) = olContact.CompanyNameCells(i, 5) = olContact.HomeTelephoneNumberCells(i, 6) = olContact.MobileTelephoneNumberCells(i, 7) = olContact.BusinessTelephoneNumberCells(i, 8) = olContact.BusinessFaxNumberCells(i, 9) = olContact.BusinessAddressStreetCells(i, 10) = olContact.BusinessAddressPostalCodeCells(i, 11) = olContact.BusinessAddressCityCells(i, 12) = olContact.BusinessAddressCountryCells(i, 13) = olContact.HomeAddressStreetCells(i, 14) = olContact.HomeAddressPostalCodeCells(i, 15) = olContact.HomeAddressCityCells(i, 16) = olContact.HomeAddressCountryEnd IfNext'eliminar variables de los objetosSet olContact = NothingSet olContacts = NothingSet olApp = Nothing'ordenar lista por NombreCells.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuessEnd Sub

Libros y hojas ExcelCerrar libro Excel (guardar cambios)ActiveWorkbook.CloseActiveWorkbook.Close Savechanges:=TrueActiveWorkbook.Close(True)Cerrar libro Excel (sin guardar cambios)ActiveWorkbook.Close(False)ActiveWorkbook.Close Savechanges:=FalseCerrar libro Excel (variable, sin guardar cambios)Application.DisplayAlerts = FalseWindows(Libro_mayor).CloseApplication.DisplayAlerts = TrueAbrir libro Excel (ruta fija)Workbooks.Open FileName:="C:\Trabajo\Informe.xls"Abrir libro Excel (dilogo)Msg = MsgBox("Elija archivo para abrir.", vbOKOnly, (""))strArchivo = Application.GetOpenFilenameOn Error GoTo 99Workbooks.OpenText Filename: = strArchivoIf strArchivo = "" Then Exit SubstrArchivo = ActiveWindow.Caption99:Exit subDevolver nombre del libro ExcelstrNombre = ActiveSheet.Parent.FullNameMsgBox ActiveWorkbook.FullName

Nombre de la hoja (variable)'asigna nombre variable a la hoja a variablestrHoja = ActiveWindow.CaptionWindows(strHoja).Activate 'para activar el libro del nombre asignadoInsertar hoja nueva (elegir posicin)ActiveWorkbook.Sheets.Add Before:=Worksheets("Informe1")Insertar hoja nueva (primera posicin)Sheets("Informe1").Copy After:=Worksheets(Worksheets.Count)Mover hojaWorksheets("informe5").Move After:=Worksheets("Informe4")Ordenar hojas (orden alfabtico)intNumeroHojas = ActiveWorkbook.Worksheets.CountFor 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 jNext iSuprimir una hoja determinadaApplication.DisplayAlerts = FalseFor i = 1 To Sheets.Count Sheets(i).Activate xxx = ActiveCell.Worksheet.Name If xxx = "Informe" Then ActiveWindow.SelectedSheets.Delete End IfNextApplication.DisplayAlerts = TrueSeleccionar primera hojaActiveWindow.ScrollWorkbookTabs Position:=xlFirstSeleccionar ltima hojaActiveWindow.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 celdasSet Area = SelectionFor Each Cell In Area z = Round(Cell, 2) Cell.Value = z Cell.NumberFormat = "#,##0.00"Next CellFormatear fuenteCells.SelectWith Selection.Font .Name = "MS Sans Serif" .Size = 10End WithLneas de divisinActiveWindow.DisplayGridlines = FalseIndice de coloresActiveWorkbook.Colors(44) = RGB(236, 235, 194) 'verdeColorear rangoRange("A1:B10").Interior.ColorIndex = 44Cambiar entre estilos A1 / RCApplication.ReferenceStyle = xlA1Application.ReferenceStyle = xlR1C1

Filas Excel macros VBA

Encontrar ltima filaintUltimaFila = _ Columns("A:A").Range("A65536").End(xlUp).RowEncontrar ltima filaintUltimaFila = _ ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.CountEncontrar ltima filaMaxRow = Cells.SpecialCells(xlLastCell).RowMaxCol = Cells.SpecialCells(xlLastCell).ColumnEncontrar ltima celda (buscar al revs)Dim lngUltimaCelda As LongIf WorksheetFunction.CountA(Cells) > 0 Then lngUltimaCelda = Cells.Find(What:="*", After:=[A1], _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row MsgBox lngUltimaCeldaEnd IfEncontrar ltima fila (en columna especificada)Dim intUltimaFila As RangeIf WorksheetFunction.CountA(Columns(1)) > 0 Then Set intUltimaFila = Range("65536").End(xlUp) MsgBox intUltimaFila.AddressEnd IfSuprimir filas vacasintLastRow = Columns("A:A").Range("A65536").End(xlUp).RowFor r = intLastRow To 1 Step -1 If Application.CountA(Rows(r)) = 0 Then Rows(r).DeleteNext rSuprimir filas vacasDim intNumDeFilas As LongSelection.SpecialCells(xlCellTypeLastCell).SelectintNumDeFilas = Selection.RowFor i = 1 To intNumDeFilas If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then Rows(i).Delete End IfNextSuprimir filas vacasintUltimaFila = _ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.CountFor r = intUltimaFila To 1 Step -1If Application.CountA(Rows(r)) = 0 Then Rows(r).DeleteNext rSuprimir filas por condicinDim rngString As RangeDo Set rngString = Cells.Find("Aglis", MatchCase:=False, _ LookAt:=xlPart, LookIn:=xlValues) If Not rngString Is Nothing Then rngString.EntireRow.Delete End IfLoop Until rngString Is NothingSuprimir filas vacas por dos condicines X, YFor i = intUltimaFila To 1 Step -1 Let strTest= Application.Cells(i, 2) If strTest "X" And strTest "Y" Then Rows(i).DeleteNext 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 IntegerIf WorksheetFunction.CountA(Cells) > 0 Then intUltimaCol = Cells.Find(What:="*", After:=[A1], _ SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column MsgBox intUltimaColEnd IfEnd SubEncontrar ltima columna (en fila especificada)Sub EncontrarUltimaColumna()Dim intUltimaCol As RangeIf WorksheetFunction.CountA(Rows(1)) > 0 Then Set intUltimaCol = Range("IV1").End(xlToLeft) MsgBox intUltimaCol.AddressEnd IfEnd SubSuprimir columnas vacas en el rangoSub SuprimirColumnas()Dim cCount As Integer, c As IntegerDim DeleteRange as RangeDeleteRange =("A1:B10")If DeleteRange Is Nothing Then Exit Sub'Ejemplo: DeleteEmptyColumns Range("A1:Z1")If DeleteRange.Areas.Count > 1 Then Exit SubWith DeleteRange cCount = .Columns.Count For c = cCount To 1 Step -1 If Application.CountA(.Columns(c)) = 0 _ Then .Columns(c).EntireColumn.DeleteNext cEnd WithEnd SubSuprimir cada n-columnasSub SuprimirColumnas()Dim rCount As Long, r As LongDim DeleteRange as rangeDeleteRange =("A1:B10")If DeleteRange Is Nothing Then Exit SubIf DeleteRange.Areas.Count > 1 Then Exit SubIf n < 2 Then Exit SubWith DeleteRange cCount = .Columns.Count For c = n To cCount Step n - 1 .Columns(c).EntireColumn.Delete Next cEnd WithEnd 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 carpetaLos 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.

'dimensionesDim strArchivoExcel As StringDim strNombreCarpeta As String'carpeta a repasarstrNombreCarpeta = "C:/MisArchivosExcel"'preparar carpetaChDir strNombreCarpetastrArchivoExcel = Dir("*.xls")'repasamos los archivos de la carpetaDo While strArchivoExcel ""MsgBox strArchivoExcelstrArchivoExcel = DirLoopEnd SubSacar datos de todos los libros Excel de la carpetaEn 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.

'dimensionesDim wb As WorkbookDim strArchivoExcel As StringDim strNombreCarpeta As String'carpeta a repasarstrNombreCarpeta = "C:/MisArchivosExcel"'preparar carpetaChDir strNombreCarpetastrArchivoExcel = Dir("*.xls")'repasamos los archivos de la carpetaDo While strArchivoExcel ""Set wb = Workbooks.Open(strNombreCarpeta & "\" & strArchivoExcel) MsgBox wb.ActiveSheet.Cells(1, 1) MsgBox wb.Application.Sheets("Hoja2").Cells(2, 1).Valuewb.Close FalseSet wb = NothingstrArchivoExcel = DirLoopEnd Sub

Colores y filtros en ExcelExcel 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 RGBExcel 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 ExcelEntonces, 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 ExcelPara cambiar los colores aplicados a una celda ejecutamos una de las siguientes instrucciones.Selection.Interior.ColorIndex = 40Selection.Interior.ColorIndex = _xlNone/xlColorIndexAutomatic/xlColorIndexNoneSelection.Interior.Color = RGB(234, 234, 234)

Selection.Interior.Color = ?000066? 'hexadecimalResetear paleta de coloresPara resetear los colores a los predefinidos de Excel, aplicamos el mtodo ResetColors.ActiveWorkbook.ResetColorsCopiar colores de otro libro ExcelTambin se puede copiar (importar) la paleta de otro libro Excel. Para esto cambiamos la propiedad Colors del libro.ActiveWorkbook.Colors = Workbooks("C:\MiLibroDeColores.xls").ColorsDevolver colores del libro Excel actualA lo mejor nos interesa saber que color tiene una celda. La propiedad ColorIndex nos ayuda.i = Cells(1, 1).Interior.ColorIndexMsgBox iAplicar colores por condiciones en Excel VBAPodemos 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 IfNext

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 activaPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)ActiveCell.Interior.ColorIndex = 3End SubPara colorear todas las celdas seleccionadasPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)Target.Interior.ColorIndex = 3End Sub

Filtrar con colores en Excel

Marcar encabezado de columnas filtradasEste 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 archivoDescargar archivo Excel (zip)Contenedor del cdigoEl 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 AutoFilterDim fFilter As FilterDim iFilterCount As IntegerIf 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 fFilterElse Rows(1).EntireRow.Interior.ColorIndex = xlNone End IfEnd 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 cdigoPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)Dim strRuta As StringDim intRowActual as Double, intColumnActual As DoubleDim intRow as Double, intColumn As Double'ruta a imagenstrRuta = "C:\imagen.jpg"'fila/columna actualintRowActual = ActiveCell.RowintColumnActual = ActiveCell.Column'fila/columna de scrollRowintRow = ActiveWindow.ScrollRow + 1intColumn = ActiveWindow.ScrollColumn'insertamos comentarioCells.ClearCommentsWith Cells(intRow, intColumn).AddComment.Comment.Text Text:="Hola".Comment.Visible = TrueEnd With'aadimos imagen al comentarioCells(intRow, intColumn).Comment.Shape.Select TrueSelection.ShapeRange.Fill.UserPicture strRuta'aparcamos en celda actualCells(intRowActual, intColumnActual).SelectEnd Sub

Vnculos y acceso en ExcelVBA 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 proteccinPara 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 hojasCualquier 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 procedimientosPon 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 ExcelDim strStartHoja As StringDim strSegundaHoja As StringPrivate Sub Workbook_SheetActivate(ByVal Sh As Object)Dim z As IntegerDim i As IntegerDim x As BooleanDim varHoja As VariantDim varPaso As VariantDim 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 hojasstrSegundaHoja = Sh.NameFor i = LBound(varHoja) To UBound(varHoja)If varHoja(i) = strSegundaHoja Then x = TrueNext iIf x = False Then GoTo 99'ocultar la hoja temporalmentez = ActiveWindow.IndexWindows(z).Visible = False'comparar palabra de pasovarInput = InputBox("Palabra de paso:")If varInput varPaso Then Sheets(strStartHoja).Select'volver a mostrar la hojaWindows(z).Visible = True99:'conectar EventsApplication.EnableEvents = TrueEnd Sub'*************************************************

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)'recordar hoja inicialstrStartHoja = Sh.NameEnd 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.ProcedimientoEmpezamos 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 WorkbookDim wrsHojaActiva As Worksheet, wsHoja As WorksheetDim intFila, intColumna As IntegerSet wrbLibro = ActiveWorkbookSet wrsHojaActiva = ActiveSheet'en que fila/columna empezar la listaintFila = 4intColumna = 1'el bucle repasa todas las hojasFor Each wsHoja In wrbLibro.Worksheets'para excluir hoja de los linksIf wsHoja.Name = "Hoja4" Then GoTo ProxHoja'crear linksIf wsHoja.Name wrsHojaActiva.Name ThenwrsHojaActiva.HyperLinks.Add wrsHojaActiva.Cells(intFila, intColumna), _"", SubAddress:="'" & wsHoja.Name & "'!A1", TextToDisplay:=wsHoja.NameintFila = intFila + 1End IfProxHoja:Next wsHojaEnd 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.ProcedimientoEmpezamos 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 mduloEntra 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.CdigoSub Crear_archivos_de_hojas()Dim strHoja, strStartHoja, strRuta As StringDim i As IntegerApplication.ScreenUpdating = FalsestrStartHoja = ActiveCell.Worksheet.Name'bucle todas hojasFor i = 1 To Sheets.Count'copia la hoja a libro nuevoSheets(i).ActivatestrHoja = ActiveCell.Worksheet.NameSheets(strHoja).Copy'donde guardar los archivos creadosstrRuta = "C:\excel\vba\ejemplos"'guarda el libro nuevoActiveWorkbook.SaveAs Filename:=strRuta & "\" & strHoja, _FileFormat:=xlNormal, Password:="", WriteResPassword:="", _ReadOnlyRecommended:=False, CreateBackup:=FalseActiveWindow.Close Savechanges:=True'repetir bucle'NextSheets(strStartHoja).ActivateApplication.ScreenUpdating = TrueEnd 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 seguridadGuarda una copia de seguridad de tu libro. Hazlo porque nunca sabes.Crear el mduloEntra 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 cdigoSub QuitarVinculos()Dim varVinculo As VariantDim wrsHoja As WorksheetDim objCelda As ObjectDim varMsg As Variant'(0) Un pequeo controlvarMsg = 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) Theni = 1Do Until IsEmpty(varLink)On Error GoTo 9ActiveWorkbook.BreakLink Name:=varLink(i), _Type:=xlLinkTypeExcelLinksi = i + 1LoopEnd If9:'(2) Quitar vnculos internos (a otras hojas)On Error Resume NextFor Each wrsHoja In ActiveWorkbook.WorksheetsFor Each objCelda In wrsHoja.UsedRange.SpecialCells(xlCellTypeFormulas, 23)If InStr(objCelda.Formula, "!") Then objCelda.Value = objCelda.ValueNextNextEnd Sub

Informacin del sistema o usuarioObjecto 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 ApplicationEl objeto Application tiene muchas propiedades. Hay unas que pueden ser interesantes para el programador de macros VBA de Excel.ObjetoPropiedadDevuelve

Application.UserNameNombre del usuario

OrganizationNameNombre de la empresa

OperatingSystemSistema operativo

VersionVersin de MS Excel

ProductCodeCdigo de MS Excel

StandardFontFuente por defecto

StandardFontSizeTamao fuente por defecto

DecimalSeparatorCarcter separador de miles

ActivePrinterImpresora por defecto

DefaultFilePathRuta de acceso por defecto

UserLibraryPathRuta a carpeta Add-ins

Sobre la versin de MS Excel arriba:NVersin

12Excel 2007

11Excel 2003

10Excel 2002 (XP)

9Excel 2000

8Excel 97

7Excel 95

Algunos ejemplos prcticos del objeto Application de ExcelPresentar la impresora activa del usuarioPara presentar la impresora activa del usuario, en una caja de dilogo, pondramosSub Devolver ImpresoraActiva()Dim strImpresoraActiva as StringstrImpresoraActiva = Application.ActivePrinterMsgbox strImpresoraActivaEnd subo todava ms fcil:Sub Devolver ImpresoraActiva()Msgbox Application.ActivePrinterEnd subCrear lista extensa de informacin sobre la mquina del usuarioAbajo te presentamos una macro para presentar varios datos del usuario/maquina.Sub Application_Data()'dimensionesDim strDataArray(10) As StringDim i, x As Integer'devolver datos del objeto 'Application'strDataArray(0) = Application.UserNamestrDataArray(1) = Application.OrganizationNamestrDataArray(2) = Application.OperatingSystemstrDataArray(3) = Application.VersionstrDataArray(4) = Application.ProductCodestrDataArray(5) = Application.StandardFontstrDataArray(6) = Application.StandardFontSizestrDataArray(7) = Application.DecimalSeparatorstrDataArray(8) = Application.ActivePrinterstrDataArray(9) = Application.DefaultFilePathstrDataArray(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 iEnd SubSub SuprimirDatosEnceldas()'suprimir datos antiguosRange(Cells(3, 4), Cells(13, 4)).ClearContentsEnd 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 cdigoSub DeterminarPais()CodigoPais = Application.International(xlCountryCode)If CodigoPais = 1 Then MsgBox ("Hello")ElseIf CodigoPais = 34 Then MsgBox ("Hola")End IfEnd Sub

Funcionalidad aadida

Abrir otro libro de Excel utilizando VBAEste 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 informacinMsgBox ("Abra el archivo Excel.")'elegir archivostrRutaArchivo = _Application.GetOpenFilename("Libro de Microsoft Excel (*.xls), *.xls")'abrir archivoOn Error GoTo 9Workbooks.Open Filename:=strRutaArchivo9: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 usuarioConstruccin sintctica de la messageboxMsgbox "Mensaje", Botones/conos, "Ttulo"o en el caso de devolver informacinRespuesta = Msgbox("Mensaje", Botones/conos, "Ttulo")Nota las parntesis en la segunda construccin.MensajeCualquier tipo de texto. Para crear un salto de lnea empleamos el carcter vbCrLf.Actualizacin terminada:" & vbCrLf & "- Importacin de datos de venta.BotonesSi quieres puedes aadir cualquier de estos cuatro botones (si no pones nada Excel te pondr vbOkOnly por defecto).vbOkOnlyvbOkCancelvbYesNoCancelvbAbortRetryIgnore IconosPuedes elegir entre los siguientes.vbCriticalvbQuestionvbExclamationvbInformationTtuloCualquier texto.Devolver informacinSi quieres que el programa utilice la respuesta del usuario, estas son las cifras que te devuelve.Ok = 1Cancel = 2Abort = 3Retry = 4Ignore = 5Yes = 6No = 7EjemplosTe 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 IntegerintRespuesta = MsgBox("Quieres seguir?", vbQuestion + vbYesNo, _Informacin importante")If intRespuesta = 6 Then MsgBox"Seguimos"Else MsgBox"Terminamos"End IfEnd 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 informesEste 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 presentacinComo 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

InstruccionesEncontrars un ejemplo real delExplorador de archivos Excel aquPara ver el cdigo utilizado, combine las siguientes Teclas: Alt + F11.

Como armar un reloj en Excel (mtodo OnTime).

Sobre el mtodo de Excel VBA OnTimeEl mtodo OnTime de Excel ejecuta una macro en una hora designada o en intervalos fijos.Cdigo VBA empleado para el mtodo OnTimeSub Reloj() Range("A1").Formula = "=NOW()" Application.OnTime Now + TimeValue("00:00:01"), "reloj"End SubSub auto_Open() Call RelojEnd SubImprimir la hora en la hoja ExcelSegn 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 ExcelUn 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 cdigoOption ExplicitSub BarraDeProgreso()Dim R As IntegerDim MT As DoubleFor R = 1 To 180MT = TimerDoLoop While Timer - MT < 0.05Application.StatusBar = "Progress: " & R & " de 180: " & _Format(R / 180, "Percent") & " --- " & "Cumplimiento"DoEventsNext RApplication.StatusBar = FalseEnd Sub

Casilla de Verificacin (evento Change)ResumenSe 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 realAl 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 cdigoEl 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 IntegerOn Error GoTo err_handlerApplication.EnableEvents = FalseIf Not Application.Intersect _(Target, Columns("A")) Is Nothing ThenIf Target.Column = 4 Then aOffset = 3Else aOffset = 2End IfIf IsEmpty(Target.Value) Then With Target .Font.Name = "Wingdings" .Value = Chr(252) End With Target.Offset(0, iOffset).SelectElse Target.Value = "" Target.Offset(0, iOffset).SelectEnd IfEnd Iferr_handler:Application.EnableEvents = TrueEnd SubComentariosPara 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

ResumenUn 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'[email protected]

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 IfEnd IfEnd Sub

El temporizador de Excel VBASi queremos que una instruccin se haga automticamente, a intervalos fijos, podemos recurrir al mtodo Application.OnTime.ProcedimientosVamos a necesitar tres sencillas macros.1. StartTemporizador Iniciar el temporizador2. Tu_Sub Cualquier instruccin3. StopTemporizador Cerrar el temporizadorLuego hacen falta dos botones en la hoja, uno para la macro StartTemporizador, y otro para la StopTemporizador.DeclaracionesPor encima de las macros descritas abajo, hacemos las declaraciones.Public datHora As DatePublic Const conIntervalo = 60 'un minutoPublic Const conRunMacro = "Tu_Sub" 'tu proced.Iniciar temporizadorLa primera macro inicia el temporizador.Sub StartTemporizador()datHora = Now + TimeSerial(0, 0, conIntervalo)'iniciar el temporizadorApplication.OnTime _Earliesttime:=datHora, _Procedure:=conRunMacro, _Schedule:=TrueEnd SubTu procedimientoAqu pones lo que quieres que Excel haga periodicamente.Sub Tu_Sub()MsgBox datHora 'o cualquier instruccin'reiniciar el temporizadorStartTemporizadorEnd SubCerrar temporizadorEl temporizador hay que cerrarlo manualmente.Sub StopTemporizador()On Error Resume Next'desactivar el temporizadorApplication.OnTime _Earliesttime:=datHora, _Procedure:=conRunMacro, _Schedule:=FalseEnd SubTodo el cdigoAhora, el mdulo de las macros descritas arriba debe tener el siguiente aspecto.Public datHora As DatePublic Const conIntervalo = 60 'un minutoPublic Const conRunMacro = "Tu_Sub" 'tu proced.

Sub StartTemporizador()datHora = Now + TimeSerial(0, 0, conIntervalo)'iniciar el temporizadorApplication.OnTime _Earliesttime:=datHora, _Procedure:=conRunMacro, _Schedule:=TrueEnd SubSub Tu_Sub()MsgBox datHora 'o cualquier instruccin'reiniciar el temporizadorStartTemporizadorEnd SubSub StopTemporizador()On Error Resume Next'desactivar el temporizadorApplication.OnTime _Earliesttime:=datHora, _Procedure:=conRunMacro, _Schedule:=FalseEnd Sub

WAIT mostrar un formulario VBA durante un tiempo predeterminadoCon 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.ProcedimientoCrea 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 horaNow + 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.HideEnd SubLuego, para mostrar el formulario en cualquier parte de tu programa, aplicas este cdigo.frmMensaje.ShowEn 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.ShowEnd Sub

ImprimirMacro VBA Excel para imprimir adecuadamenteA 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 hojasPrimero ajustamos los parmetros de la impresin, el apartado PageSetup. Luego se imprime con el mtodo PrintOut.Marcado VBA para imprimir las celdas seleccionadasSub Imprimir_seleccion()'preparar la hoja para la impresinWith 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 verticalmenteEnd With'imprimir las celdas seleccionadas (1 copia)ActiveWindow.Selection.PrintOut copies:=1, collate:=TrueEnd SubCdigo VBA para imprimir las hojas seleccionadasSub Imprimir_seleccion()'preparar la hoja para la impresinWith 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 verticalmenteEnd With'imprimir las celdas seleccionadas (1 copia)ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=TrueEnd SubCdigo VBA para imprimir todas las hojas del libroSub Imprimir_seleccion()'preparar la hoja para la impresin'bucle que repasa todas las hojasFor 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 WithNext Worksheet 'fin del bucle

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

Excel y VBACopiar mdulo VBA a otro libro ExcelMtodo 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 nuevoSheets(Array("Hoja1", "Hoja2", "Hoja3")).CopyPara exportar un mdulo VBA, primero hay que guardarlo como un archivo de texto, y luego importarlo desde el libro nuevo.Objetos del editor VBAEl editor VBA tiene 2 objetos bsicos:VBProject Todos los mdulos y componentes/referencias VBA del libroVBComponent Un mdulo (o formulario) especfico del VBProjectPara utilizarlos debes marcar la siguiente referencia del editor VBA:Herramientas Referencias Microsoft Visual Basic for Applications Extensibility x.x.Exportar mdulo VBA'exportar mdulo VBADim vbaProyecto As VBIDE.VBProjectDim vbaModulo As VBIDE.VBComponentPublic strRuta as StringSet vbaProyecto = ThisWorkbook.VBProjectSet vbaModulo = vbaProyecto.VBComponents("Module1")strRuta = ThisWorkbook.Path & "\modulo1_export.txt"'o strRuta = "c:\modulo1_export.txt"

vbaModulo.Export strRutaImportar mdulo VBA'importar mdulo VBADim vbaProyecto As VBIDE.VBProjectDim vbaModulo As VBIDE.VBComponentPublic strRuta as StringstrRuta = ThisWorkbook.Path & "\modulo1_export.txt"'o strRuta = "c:\modulo1_export.txt"

Set vbaProyecto = ActiveWorkbook.VBProjectvbaProyecto.VBComponents.Import (strRuta)'suprimir el archivo planoKill strRuta

Funciones

Calcular los Dgitos de control desde Excel VBAEn 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).TareaQueremos un programa que nos calcule los dgitos de control de una cuenta.Un ejemplo de cuenta0123 4567 xx 0123456789Entidad0123

Oficina4567

Dgitos de controlxx

Cuenta0123456789

En el ejemplo arriba, los dgitos de control seran 81.EmpezamosAbrimos un libro nuevo. Formateamos las celdas B3:E3 a TEXTO.

Crear el mduloEntra 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 cdigoSub DC_check()Dim Bank As StringDim Office As StringDim DC As StringDim Account As StringDim BankOffice As StringDim Valor1, Valor2, Valor3, Valor4, Valor5DIm Valor6, Valor7, Valor8, Valor9, Valor10Dim TestValue1 As IntegerDim TestValue2 As IntegerDim TestValueDC As Integer'---------------------------------------------------'recoger el nmero de cuentaBank = Range("B3").TextOffice = Range("C3").TextDC = Range("D3").TextAccount = Range("E3").TextBankOffice = 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 + Valor8TestValue1 = (TestValue1 Mod 11)TestValue1 = 11 - TestValue1If TestValue1 = 10 Then TestValue1 = 1If 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 + Valor10TestValue2 = (TestValue2 Mod 11)TestValue2 = 11 - TestValue2If TestValue2 = 10 Then TestValue2 = 1If TestValue2 = 11 Then TestValue2 = 0'---------------------------------------------------'reconstituir las dos cifras del DCTestValueDC = TestValue1 & TestValue2'evaluar DC completoIf TestValueDC = DC ThenTest = TrueMsgBox "Correcto."ElseTest = FalseMsgBox "DC no corresponde a esta cuenta." & vbCrLf & _"[en este caso DC sera " & TestValueDC & ".]", vbOKOnly, vbInformationEnd IfEnd Sub

Buscar fragmento de texto en una listaLa 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 mduloEntra 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 macroPara ejecutar esta macro entras a Herramientas Macros. All encontrars la macro Buscar_Texto_En_Lista(). Marca esta, y Ejecutar.CdigoSub Buscar_Texto_En_Lista()'dimensionesDim lngUltimaFila As LongDim strObjetoBuscar As StringDim lngResultado As LongDim lngColumna As Long, lngFila As LongDim lngPegarColumna As Long, lngPegarFila As LongDim x As Integer, n As Integer'quitar resultados anterioresRange("G5:H4000").ClearContents'columna + fila donde empezar/terminar bsquedalngColumna = 2lngFila = 5lngUltimaFila = Columns(lngColumna).Range("A65536").End(xlUp).Row'columna + fila donde empezar a pegar resultadoslngPegarColumna = 6lngPegarFila = 5'objeto a buscarstrObjetoBuscar = Range("G2").TextIf strObjetoBuscar = "" Then GoTo 99'minsculasstrObjetoBuscar = LCase(strObjetoBuscar)'bucle: realizar bsquedaFor 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 IfNext n'aparcarApplication.CutCopyMode = FalseRange("G2").Select99:End Sub

Sumar rangos variables con VBA ExcelSumar 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 VBATenemos 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 conApplication.WorksheetFunction...Nuestro ejemploEn 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 sumarvarSuma = Range(Cells(8, 3), Cells(13, 3))'sumar el rangoCells(1, 1) = Application.WorksheetFunction.Sum(varSuma)Escribir la suma (variable)

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

SQL para VBA de ExcelExcel y Bases de datos SQLVBA 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 SQLAbajo presentamos informacin bsica sobre algunos de los comandos SQL que emplearas al programar una macro de este tipo.CaptuloComandoDescripcin

SQL y tablasCREATECrear nuevas tablas y campos

DROPEliminar tablas

ALTERModificar tablas o agregar campos

TRUNCATEEliminar contenido de tablas

SQL y registrosSELECTConsultar registros

SELECT INTOConsultar/escribir registros

INSERTInsertar nuevos registros

UPDATEModificar registros

DELETEEliminar registros

SQL y condicionesFROMEspecificar tabla de origen

WHEREEspeificar condiciones

GROUP BYSeparar registros seleccionados en grupos

ORDER BYOrdenar registros seleccionados segn criterio

SQL y operadoresANDTRUE si dos registros cumplen condicin

ORTRUE si uno de dos registros cumple

NOTNegacin lgica devuelve el valor contrario

Mayor que

Distinto de

< =Menor o igual que

>=Mayor o igual que

=Igual que

BETWEENEspecificar intervalo de valores

SQL y variablesIncluir variables en las consultas

VBA: Consultas SQL TablasCREATEPara crear nuevas tablas y campos.CREATE TABLE nombre_tabla(nombre_columna1 datatype,nombre_columna2 datatype, )EjemploCREATE 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 soninteger nmeros integralesdecimal nmeros con decimaleschar todo tipo de contenidodate fecha en formato yyyymmdd.DROPPara suprimir tablas o bases de datos.DROP TABLE nombre_tablaDROP DATABASE nombre_basededatosTRUNCATEPara suprimir el contenido una tabla (y no toda la tabla en si). Puede ser muy til de vez en cuando.TRUNCATE TABLE nombre_tablaALTERPara aadir/suprimir columnas en una base de datos.ALTER TABLE nombre_tablaADD nombre_columna datatypeALTER TABLE nombre_tablaDROP nombre_columnaEjemploALTER TABLE NombreADD Direccin varchar(40)ALTER TABLE NombreDROP Apellido

VBA y consultas SQL RegistrosSELECTPara seleccionar (devolver) datos de la base de datos.SELECT nombre_columna(s) FROM nombre_tablaSELECT * FROM nombre_tablaSELECT DISTINCT nombre_columna(s FROM nombre_tablaINSERTPara 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)UPDATEPara modificar datos de una tabla.UPDATE nombre_tablaSET nombre_columna = nuevo valor, nombre_columna2 = nuevo valor2WHERE nombre_columna = un valorDELETEPara suprimir datos de una tabla.DELETE FROM nombre_tabla WHERE nombre_columna = un valorPara suprimir todas las filas de una tabla:DELETE FROM nombre_tablaoDELETE * FROM nombre_tabla

VBA y SQL: CondicionesFROMPara especificar tabla de origen. Utilizado con el comando SELECT.SELECT DISTINCT nombre_columna(s)FROM nombre_tablaWHERESe 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_columnaFROM nombre_tablaWHERE nombre_columna2 operador valorUnos de los operadores que WHERE admite sonOperadorExplicacin

ANDTRUE si dos registros cumple la condicion.

ORTRUE si uno de los registros cumple la condicion.

NOTNegacin lgica. Devuelve el valor contrario.

< Menor que.

>Mayor que.

Distinto de.

< =Menor Igual que.

>=Mayor Igual que.

=Igual que.

BETWEENEspecificar un intervalo de valores.

Si la condicin es de texto, hay que poner apstrofes (Lpez), si es numrico no se pone.GROUP BYPara 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_tablaGROUP BY nombre_columna1ORDER BYPara ordenar los registros.SELECT nombre_columna1, nombre_columna2, nombre_columna3FROM nombre_tablaORDER BY nombre_columna1, nombre_columna3

VBA y programacin SQL OperadoresOperadorDescripcin

ANDTRUE si dos registros cumple la condicion.

ORTRUE si uno de los registros cumple la condicion.

NOTNegacin lgica. Devuelve el valor contrario.

< Menor que.

>Mayor que.

Distinto de.

< =Menor Igual que.

>=Mayor Igual que.

=Igual que.

BETWEENEspecificar 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.EjemploSacamos 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 EmpleadoAhora incluimos la variable en la consulta SQL.strSQL = SELECT Salario FROM tabla_Salarios WHERE Empleado LIKE & Empleado &