Tutoriales Excel

FUNCION PARA PONER CANTIDAD CON LETRA EN EXCEL Y ACCESS

Excelente función para poner las cantidades numericas con letra en excel, usted puede usar esta función para poner cantidades protegidas en formas para facturación y formas para cheque en hojas de excel.

Proceso para agregar la funcion a su libro de excel

1-Habra su libro de excel
2-Presione Alt+F11
3-Inserte un módulo nuevo
4-Copie y pegue este código en el módulo que inserto
5-Cierre el editor de VB.
6-Ponga una cantidad en una celda de excel Ejemplo "A1".
7-En la celda "A2" escriba =conviertenumletra(a1)


Function ConvierteNumLetra(Numero)
Dim texto
Dim Millones
Dim Miles
Dim Cientos
Dim Decimales
Dim cadena
Dim CadMillones
Dim CadMiles
Dim CadCientos
texto = Numero
texto = FormatNumber(texto, 2)
texto = Right(Space(14) & texto, 14)
Millones = Mid(texto, 1, 3)
Miles = Mid(texto, 5, 3)
Cientos = Mid(texto, 9, 3)
Decimales = Mid(texto, 13, 2)
CadMillones = ConvierteCifra(Millones)
CadMiles = ConvierteCifra(Miles)
CadCientos = ConvierteCifra(Cientos)
If Trim(CadMillones) > "" Then
If Trim(CadMillones) = "UN" Then
cadena = CadMillones & " MILLON"
Else
cadena = CadMillones & " MILLONES"
End If
End If
If Trim(CadMiles) > "" Then
cadena = cadena & " " & CadMiles & " MIL"
End If If Trim(CadMiles & CadCientos) = "UN" Then
cadena = cadena & "UN PESO " & Decimales & "/100 M.N."
Else
If Miles & Cientos = "000000" Then
cadena = cadena & " " & Trim(CadCientos) & " DE PESOS " & Decimales & "/100 M.N."
Else
cadena = cadena & " " & Trim(CadCientos) & " PESOS " & Decimales & "/100 M.N."
End If
End If
ConvierteNumLetra = Trim(cadena)
End Function

Function ConvierteCifra(texto)
Dim Centena
Dim Decena
Dim Unidad
Dim txtCentena
Dim txtDecena
Dim txtUnidad
Centena = Mid(texto, 1, 1)
Decena = Mid(texto, 2, 1)
Unidad = Mid(texto, 3, 1)
Select Case Centena
Case "1"
txtCentena = "CIEN"
If Decena & Unidad <> "00" Then
txtCentena = "CIENTO"
End If
Case "2"
txtCentena = "DOSCIENTOS"
Case "3"
txtCentena = "TRESCIENTOS"
Case "4"
txtCentena = "CUATROCIENTOS"
Case "5"
txtCentena = "QUINIENTOS"
Case "6"
txtCentena = "SEISCIENTOS"
Case "7"
txtCentena = "SETECIENTOS"
Case "8"
txtCentena = "OCHOCIENTOS"
Case "9"
txtCentena = "NOVECIENTOS"
End Select

Select Case Decena
Case "1"
txtDecena = "DIEZ"
Select Case Unidad
Case "1"
txtDecena = "ONCE"
Case "2"
txtDecena = "DOCE"
Case "3"
txtDecena = "TRECE"
Case "4"
txtDecena = "CATORCE"
Case "5"
txtDecena = "QUINCE"
Case "6"
txtDecena = "DIECISEIS"
Case "7"
txtDecena = "DIECISIETE"
Case "8"
txtDecena = "DIECIOCHO"
Case "9"
txtDecena = "DIECINUEVE"
End Select

Case "2"
txtDecena = "VEINTE"
If Unidad <> "0" Then
txtDecena = "VEINTI"
End If
Case "3"
txtDecena = "TREINTA"
If Unidad <> "0" Then
txtDecena = "TREINTA Y "
End If
Case "4"
txtDecena = "CUARENTA"
If Unidad <> "0" Then
txtDecena = "CUARENTA Y "
End If
Case "5"
txtDecena = "CINCUENTA"
If Unidad <> "0" Then
txtDecena = "CINCUENTA Y "
End If
Case "6"
txtDecena = "SESENTA" If Unidad <> "0" Then
txtDecena = "SESENTA Y "
End If
Case "7"
txtDecena = "SETENTA"
If Unidad <> "0" Then
txtDecena = "SETENTA Y "
End If
Case "8"
txtDecena = "OCHENTA"
If Unidad <> "0" Then
txtDecena = "OCHENTA Y "
End If
Case "9"
txtDecena = "NOVENTA"
If Unidad <> "0" Then
txtDecena = "NOVENTA Y "
End If
End Select If Decena <> "1" Then
Select Case Unidad
Case "1"
txtUnidad = "UN"
Case "2"
txtUnidad = "DOS"
Case "3"
txtUnidad = "TRES"
Case "4"
txtUnidad = "CUATRO"
Case "5"
txtUnidad = "CINCO"
Case "6"
txtUnidad = "SEIS"
Case "7"
txtUnidad = "SIETE"
Case "8"
txtUnidad = "OCHO"
Case "9"
txtUnidad = "NUEVE"
End Select
End If
ConvierteCifra = txtCentena & " " & txtDecena & txtUnidad
End Function



FUNCION PARA ELIMINAR LINEAS VACIAS EN UN RANGO DE DATOS

Sub Eliminar_filas_vacias()

Application.ScreenUpdating = False
For i = 1 To 1000
If ActiveCell = "" Or IsNull(ActiveCell) Then
celda = ActiveCell.Address
Selection.End(xlToRight).Select
If ActiveCell = "" Or IsNull(ActiveCell) Then
Selection.End(xlToLeft).Select
If ActiveCell = "" Or IsNull(ActiveCell) Then
Selection.EntireRow.Delete
If ActiveCell.Row <> 1 Then Range(celda).Offset(-1, 0).Select
End If
End If
End If
ActiveCell.Offset(1, 0).Select
Next
Application.ScreenUpdating = True
End Sub



MACRO QUE BUSCA UN VALOR DE CELDA EN UNA BASE DE DATOS Y REEMPLEZA LOS DATOS

Esta macro busca el valor en la hoja2 que se tiene en la celda "a1" de la hoja1 y lo reempleza por el valor de la celda "a2" de la hoja1.


Sub buscarvalor()

Sheets("hoja1").Select
 Dim Dato As String
 Folio = ActiveCell.Value
 Dato = WorkSheets("hoja1").Range("a1")
 Sheets("hoja2").Select
 Cells.Find(What:=Dato, Affter:=ActiveCell).Activate
 i = ActiveCell.Row
 Range("a" & i).Value = WorkSheets("hoja1").Range("a2")

End Sub



MACRO QUE ESCRIBE VALORES DE CELDAS EN LA PRIMERA LINEA VACIA DE UNA BASE DE DATOS

Esta Macro pega los datos que existen en las celdas a2, b2 y c2 de la hoja1 a la primera fila vacia de la hoja2.
 

Sub pegarvalor()
Sheets("hoja2").Select
Range("a65536").End(xlUp).Offset(1, 0).Select
i = ActiveCell.Row
Range("a" & i).Value = WorkSheets("hoja1").Range("a2").Value
Range("b" & i).Value = WorkSheets("hoja1").Range("b2").Value
Range("c" & i).Value = WorkSheets("hoja1").Range("c2").Value
Range("A2").Select
Sheets("hoja1").Select
Range("a2:c2").ClearContents
MsgBox("Registro Guardado con Exito")

End Sub



Volver a temario

MACRO QUE COPIA Y PEGA VALORES SEGUN CONDICION

Con esta macro pegamos los valores del rango de celdas a1:b6 si en la celdas de la culumna b es igual a 1 y los pega en la columna a y b de la hoja2

Macro1()
    Range("A1:B1").Select
    Selection.AutoFilter
    Range("C6").Select
    Selection.AutoFilter Field:=2, Criteria1:="1"
    Range("A1:B1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("hoja2").Select
    Range("a1").PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    Range("a1").Select
    Sheets("hoja1").Select
    Selection.AutoFilter
    Range("a1").Select
   
End Sub



MACRO QUE BUSCA EL VALOR DE UN INPUTBOX Y ELIMINA LA COLUMNA QIE LO CONTIENE

Sub mymacro()

Dim Dato As String
Dato = InputBox("Escribe el Texto", "Buscar texto")
Cells.Find(what:=Dato, After:=ActiveCell).Activate
ActiveCell.Columns.Delete

End Sub

Esta macro busca el valor que se escribe en el ImputBox y al encontrarlo elimina la columna donde lo encuentra.



MACRO QUE OCULTA FILAS SEGUN CONDICION

Esta macro oculta la fila de la a21 a la a30 si la celda c5 dice "Cartera", muestra las filas de la a21 a la a30 y oculta de la a11 a la a20 si la celda c5 dice "Finanzas" y muestra las fila de la a11 a la a30 y oculta de la a31 a la a40 si la celda c5 dice "Mercadeo".

Sub MyMacro()
If Range("c5") = "Cartera" Then
Range("a21:a30").Select
Selection.EntireRow.Hidden = True
Range("a11:a20").Select
Selection.EntireRow.Hidden = False
Range("a31:a40").Select
Selection.EntireRow.Hidden = False
Else
If Range("c5").Value = "Finanzas" Then
Range("a11:a20").Select
Selection.EntireRow.Hidden = True
Range("a31:a40").Select
Selection.EntireRow.Hidden = False
Range("a21:a30").Select
Selection.EntireRow.Hidden = False
Else
Range("a31:a40").Select
Selection.EntireRow.Hidden = True
Range("a11:a20").Select
Selection.EntireRow.Hidden = False
End If
End If
End Sub




MACRO QUE IMPRIME DATOS DE UNA FILA EN UNA PLANTILLA Y REPITE EL PROCESO

Sub MyMacro()
Application.ScreenUpdating = False
Sheets("hoja2").Select
Range("a2").Select
For i = 1 To 3
If ActiveCell <> "" Then
Worksheets("hoja1").Range("a1").Value = ActiveCell.Value
Worksheets("hoja1").Range("a2").Value = ActiveCell.Offset(0, 1).Value
Worksheets("hoja1").Range("a3").Value = ActiveCell.Offset(0, 2).Value
Sheets("hoja1").PrintOut Copies:=1, Collate:=True
ActiveCell.Offset(1, 0).Select
End If
Next
End Sub



MACRO QUE QUITA EL COLOR DE LA CELDA ANTES DE IMPRIMIR, IMRPIME Y VUELVE A COLOREAR LA CELDA COMO ESTABA



Range("a1").Select
ActiveCell.Interior.ColorIndex = 2
ActiveWindow.SelectedSheets.PrintOut copies:=1, Collate:=True
Range("a1").Select
ActiveCell.Interior.ColorIndex = 5
End Sub



MACRO QUE HABRE UN DIRECTORIO DESDE EXCEL

Esta macro habre el diroctorio del "C:" para que el usuario seleccione el archivo a habrir.


Sub MyMacro()
ChDir "C:"
Libro = Application.GetOpenFilename
Workbooks.Open Libro
   
End Sub



MACRO QUE ELIMINA LAS COLUMNAS VACIAS

Esta macro elimina las columnas que no tienen datos en la Fila 15.
tambien contamos con un archivo de ejemplo en el apartado Descargas.

Sub MyMacro()
i = 1
While i < 204
If Cells(15, i).Value = 0 Then
Cells(15, i).Columns.Delete
End If
i = i + 1
Wend
End Sub



MACRO QUE ENLISTA LAS IMPRESORAS INSTALADAS ANTES DE IMPRIMIR

Esta Macro abre un cuadro de dialogo con las impresoras instaladas para que el usuario seleccione la impresora antes de imprimir.

Application.Dialogs(xlDialogPrinterSetup).Show
End Sub




MACRO QUE ORDENA LOS DATOS CADA TRES COLUMNAS

Esta macro utiliza el bucle For  i Next... para ordenar los datos cada tres columnas.

Sub Macro1()
Range("ih65536").End(xlToLeft).Offset(0, 0).Select
k = ActiveCell.Column
f = 1
 For i = 1 To 5
 If k = f Then
 ActiveCell.Offset(-65535, 0).Select
 Dato = ActiveCell.Address
 Dato1 = ActiveCell.Offset(0, 2).Address
 Range(Dato, Dato1).Select
 Selection.EntireColumn.Select
 
 Selection.Sort Key1:=Range(Dato), Order1:=xlAscending, Header:=xlGuess, _
     OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    
End If
f = k + 2
Range("ih65536").End(xlToLeft).Offset(0, f).Select
f = ActiveCell.Column
k = ActiveCell.Column


Next
End Sub

Nota: Archivo anexo con un ejemplo en la opcion Descargas de esta Página.



MACRO QUE OCULTA LAS BARRAS DE HERRAMIENTA, FORMATO, FORMULA Y MENUS.

Para Excel 2003 y anteriores


Desactivar

Private Sub WorkBook_Open()

Application.CommandBars("Standard").Visible = False
Application.CommandBars("Formatting").Visible = False
Application.DisplayFormulaBar = False
Application.CommandBars("Worksheet Menu Bar").Enabled = False

End Sub

Activar

Crea una macro con el nombre de Auto_Close

Pega el mismo codigo dentro de esta macro y cambia los valores False por True

Para que funciones correctamente crea un macro con el nombre de Auto_Open, y le pegas ese código, guarda y cierra el libro y al abrirlo nuevamente todas las barras estaran ocultas, excepto la de titulos..

Otra forma es pegar el código en el Evento WorkBook_Open del WorkBook
al momento de abrir el librotambien se te ocultaran las barras.


Para Excel 2007 y posterior

Desactivar

Private Sub Workbook_Open()

ExecuteExcel4Macro ("show.toolbar(""ribbon"",0)")
Application.DisplayFormulaBar = False
End If
End Sub

Activar

Sub Auto_Close()

ExecuteExcel4Macro ("show.toolbar(""ribbon"",1)")
Application.DisplayFormulaBar = False

End Sub

Nota: El Evento WorkBook_Open hace la misma funcion que la macro Auto_Open, se autoejecutan cada ves que se habre el archivo, lo cual puedes usar cualquiera de los dos procedimientos para agregar el codigo correspondiente, ahora las barras estaran ocultas mientras el libro este abierto, si lo cierras las barras se quedaran ocultas y cuando abras otro archivo distinto las barras estaran ocultas..

por consiguiende debes de activarlas nuevamente siempre que cierres el libro..

para eso aslo con el Evento WorkBook_Close o con una macro que se llame Auto_Close
y pegales los codigos correspoendoentes para que las barras queden visibles cuando cierras el libro.



MACRO QUE SELECCIONA UN RANGO DE CELDAS CON EL VALOR DE UNA VARIABLE

Esta macro selecciona un rango con valores de variables, es decir busca en un rango de datos un numero determinado, despues busca otro numero determinado y selecciona el rango desde el primer numero al segundo numero.


Sub MyMacro()

Range("a1").Select
Dim dato As Integer
dato = 1
dato1 = ActiveSheet.Range("a1:a65536").Find(what:=dato, After:=ActiveCell).Address
Dim Dato2 As Integer
Dato2 = 6
dato3 = ActiveSheet.Range("a1:a65536").Find(what:=Dato2, After:=ActiveCell).Address
Range(dato1, dato3).Select
Range(dato3).Activate
End Sub


Nota: la instruccion ActiveSheet.Range("a1:a65536") sicnifica que los datos los buscara en la hoja activa en el rango de la a1 a la a65536 El erchivo de ejemplo lo puedes descargar en el apartado descarga en esta pagina



MACRO QUE GUARDA UN FORMATO DE UNA FACTURA EN UNA HOJA NUEVA QUE REGISTRA CON EL FOLIO DE LA MISMA

Esta macro guarda el formato de una plantilla para factura en una hoja nueva que guarda con el folio de la factura guardada, el folio lo aumenta en 1automaticamente y regresa al formato factura original preparandoo para una nueva factura.

Sub MyMacro()
    ActiveSheet.Unprotect
    Sheets.Add
    ActiveSheet.Name = Worksheets("factura").Range("d1").Value
    Sheets("Factura").Select
    Range("a1:iv65536").Copy
    Dim Dato As String
    Dato = Range("d1").Value
    Sheets(Dato).Select
    Range("a1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveSheet.Buttons.Visible = False
    Sheets("factura").Select
    Range("iv65536").End(xlUp).Offset(1, 0).Value = 1
    Range("a9:c9").ClearContents
    Range("b2:b6").ClearContents
    ActiveSheet.Protect
    Range("a1").Select
End Sub

El la hoja donde esta el formato debera llamarse factura y el folio debe estar en la celda d1 de la misma hoja.

Nota:descarga el archivo de ejemplo en la opcion descargas de la pagina principal de este sitio. Nombre del archivo  Sistema_Facturacion_Sencillo



MACRO QUE DETECTA FOLIOS FALTANTES Y MANDA UN MENSAJE CON LA LISTA DE LOS MISMOS


En este Ejemplo se va a poner en la columna b a partir de la b2, la lista de los folios faltantes,  al final te manda el mensaje de los folios que faltan..

puedes modificar en que columna te ponga la lista de folios faltanted nadamas cambia los valores de en:

Range("b65536").End(xlUp).Offset(1,0).select = Folio
en ves de la b65536 puedes poner cualquier otra columna por ejemplo d65536 o h65536, y te los pondra en esa columna. depues cambia los valores a dato, dato1, dato2, etc en ves de range("b2"), pon Range("d2") o Range("h2") segun la columna en la que aparecen los datos de Folios faltantes.. Este es el código:

Sub MyMacro()

Dim folio As Integer
Range("A2").Select
folio = ActiveCell.Value
Do While ActiveCell <> ""
folio = folio + 1
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value <> folio Then

Do While ActiveCell.Value > folio
Range("b65536").End(xlUp).Offset(1, 0).Value = folio

folio = folio + 1
Loop

End If
Loop
dato = Range("b2").Value
Dato1 = Range("b3").Value
Dato2 = Range("b4").Value
Dato3 = Range("b5").Value
Dato4 = Range("b6").Value
Dato5 = Range("b7").Value
Dato6 = Range("b8").Value

MsgBox ("Faltan los Folios: " & dato & "," & Dato1 & "," & Dato2 & "," & Dato3 & "," & Dato4 & "," & Dato5 & "," & Dato6)

End Sub



COMO TRABAJAR CON CONDICIONES CON VB PARA EXCEL

Para trabajar con condiciones en en vb para excel, es importante tener en cuenta que es lo que queremos validar en esta condicion hay similitus en los parametros a validar tratandoce en celdas de la hoja activa, la celda activa, el libro activo etc.

Cuando validamos un rango de celda de la hoja activa no es necesario mencionar el nombre de la hoja, la macro validara la celda de la hoja activa del libro activo.

Ejemplo:

If Range("a1") = 1 Then
Range("a2").Value = "hola"
End If

Para validar una celda de una hoja en específico solo agregamos el nombre de  la hoja para este ejemplo pondremos de la hoja2

If WorkSheets("hoja2").Range("a1") = 1 Then
Sheets("hoja2").Range("a2").Value = "hola"
End if


Ejemplo:

En este ejemplo vamos a validar que si la celsa "a1" de la hoja1 es igual a "1"  me ponga en la celda "a2" de la hoja1 la palabra "hola"

Sub validarcelda()

If Range("a1").Value = 1 Then
Range("a2").Value = "hola"
End If

End Sub




C0M0 PONER LA HOJA ACTIVA CON VB

ActiveWindow.SelectedSheets.PrintPreview



COMO PROTEGER Y DESPROTEGER UNA HOJA CON VB

la clave es (tres)

Para protegerla    
ActiveSheet.Protect "tres"
Para Desprotegerla      ActiveSheet.UnProtect "tres"

Si lo que deseamos es poner la clave en una celda hacemos lo siguiente:

declaramos una variable y le damos el valor de la celda, para este caso utilizaremos el valor de la celda "z1" de la hoja1

Declaramos la variable (Dato)

Dim Dato As String
Dato = WorkSheets("hoja1").Range("z1").Value

Para Proteger ActiveSheet.Protect Dato
Para Desproteger ActiveSheet.UnProtect Dato

observemos que con la variable no usamos comillas cuando no es variables la ponemos entre comillas.



COMO SELECCIONAR UN RANGO DE CELDAS DESDE VB

Ejemplo:

En este ejemplo citaremos el rango de celdas del la  a1 a la e50 la cual la seleccionaremos.

Range("a1:e50").select



COMO COPIAR Y PEGAR EN OTRA HOJA UN RANGO DE CELDAS

Ejemplo:

Copiaremos el rango de celdas de la hoja1 de la a1 a la e50 y lo pegaremos en la hoja2

Range("a1:e50).Copy
Sheets("hoja2").Select
Range("a1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("hoja1").Select
Range("a1").Select




COMO COPIAR LA CELDA ACTIVA

ActiveCell.Copy
Range("a1").Select
ActiveSheet.Paste
Application.CutCopyMode = False



COMO CAMBIAR EL COLOR DE UNA CELDA

Range("a1").Interior.ColorIndex =3

En este caso le coloreamos de color rojo a la celda a1

Nota: cuando deseamos darle otro color solo cambiamos el número de "colorindex".



COMO EJECUTAR UNA MACRO CON EL VALOR DE UNA CELDA

Ejemplo:

En este ejemplo le estamos indicando a la hoja1 que si la celda a1 es igual 1 proteja la hoja, y si no es igual a 1 la desproteja 

Procedimiento:

1-Preciona la convinación de teclas Atl+F11.
2-Da doble click en el nombre de la hoja en la cual desee poner la instrucción.
3-Regrese a Excel.

Private Sub WorkSheet_Change(ByVal Target As Range)
On Error Resume Next If Range("A1").Value =1 Then
ActiveSheet.Protect
Else
ActiveSheet.UnProtect.
End If
Exit Sub
End Sub



COMO GUARDAR EL LIBRO CON EL NOMBRE DE UNA HOJA

En este ejemplo estamos guardano el libro activo con el nombre de la hoja activa en la ruta que se indica.

ChDir _
        "C:Documents and SettingsCompaq_Propietario.PRINCIPAL.000Mis documentos"
    ActiveWorkbook.SaveAs Filename:=ActiveSheet.Name



COMO GUARDAR UNA HOJA CON EL VALOR DE UNA CELDA

ActiveSheet.Name = Range("a1")

En este ejemplo estamos guardando la hoja activa con el valor de la celda a1.



COMO PONER ALERTA A UNA MACRO

En el siguiente ejemplo hacemos referencia al registro de la a1
la macro pega el contenido de la a1 de la hoja1, soloque entes de acerlo pregunta al usuario si esta seguro de relizar el procedo presentandole tres opciones "Si" "No" "Cancelar".

Sub Macro1()

Dim Respuesta As String
Respuesta = MsgBox("Una ves copiado el registro, ya no podra hacer cambios, ¿Seguro que desea copiar el registro " & Range("a1") & "?", 291, "Pregunta")
If Respuesta = 6 Then
Range("a1").Copy
Sheets("hoja2").Select
Range("a2").PasteSpecial xlPasteValues
Application.CutCopyMode = False
Sheets("hoja1").Select
Range("a1").ClearContents
End If
End Sub



CONTADOR QUE AUMENTA EL VALOR DE UNA CELDA CON CADA CLICK

Sub Macro1()
Range("a1").Select
Range("a1") = ActiveCell + 1
End Sub

En este ejemplo la celda a1 nos aumenta en 1 cada ves que se ejecuta la macro.



COMO RELACIONAR EL VALOR DE UN TEXTBOX CON EL CODIGO DE UNA MACRO

Macro

Sub MyMacro()
    UserForm1.Show
End Sub

Codigo del boton Aceptar

Private Sub CommandButton1_Click()
Dim Dato As String
Dato = UserForm1.TextBox1.Value
    Range("C1").Select
    ChDir Dato
    Workbooks.Open Filename:=(Dato & "Libro1.xls")
    Range("D1").Select
    Windows("Libro1").Activate
    Range("A5").Select
    Unload Me
End Sub

En este ejemplo se utiliza un formulario "UserForm1" con un campo "TextBox1" y un boton de Aceptar. y para ejecutar el Formulario desde Excel usamos la macro "MyMacro".

Esta prueba fue realizada en base a la necesidad de un usuario, y lo que realida es que habre el libro "Libro1.xls" solo que la ruta del archivo Libro1.xls puede estar guardado en diferentes ubicaciones, entonces el usuario al activar MyMacro dispara el formulario y en el TextBox escribe la ruta donde esta almacenado el archivo, para que el codigo del boton "Aceptar" busque el archivo en esa ruta y lo habra.

Veamos las declaraciones donde le indicamos al codigo que.

Dato = UserForm1.TextBox1.Value
entonces en ChDir Dato
Le indicamos que el directorio sera igual a Dato, y Dato es igual a la entrada del TextBox.




COMO SUMAR UN RANGO DE CELDAS CON VB
Ejemplo:


En este ejemplo sumaremos el de la b2:b10.

 

  A B C D
1 Fecha Importe Aqui Dara 
el Resultado
 
2 30/03/09 30.00    
3 01/04/09 40.00    
4 02/03/09 35.00    
5 15/04/09 15.00    

Macro

Sub MyMacro()
Application.WorksheetFunction.Sum (VarSuma)
VarSuma = Range("b2:b10")
Suma = Application.WorksheetFunction.Sum(VarSuma)
Range("c1").Value = Suma
End Sub

Explicación

Linea 1 Llamamos la funcion a utilizar
Linea 2 Declaramos que la variable "VarSum" es igual al rango que deseamos sumar.
Linea 3 Declaramos que "Suma" es Igual  al proceso antes mencionado.
Linea 4 Le indicamos al código donde queremos que pegue el resultado.



MACRO QUE EJECUTA UNA MACRO CON EL VALOR DE UNA CELDA

Este código ejecuta instrucciones de VB para excel cuando la celda c1 de la hoja1 es mayor que cero.

Archivo de Ejemplo para descargar en el apartado descargas de esta página se llama "Ejecuta_Macro_Valor_Celda".

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Range("c1").Value > 0 Then
Range("c1").Copy
Range("a65536").End(xlUp).Offset(1, 0).Select
ActiveCell.PasteSpecial xlPasteValues
Range("c1").ClearContents
End If
Exit Sub

End Sub



Volver a temario
EJECUTA MACRO AL DAR DOBLE CLICK A LA LA CELDA ACTIVA

Esta macro busca el valor de la celda de la columna a que de le da doble click lo busca en la columna c y pega ese valor 8 columnas a la derecha de la columna donde encuentra el valor.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

ActiveCell.Copy

Dim Dato As String

Dato = ActiveCell.Value

Cells.Find(What:=Dato, After:=ActiveCell).Activate
ActiveCell.Offset(0, 8 ).PasteSpecial xlPasteValues

Application.CutCopyMode = False

End Sub



COMO ORDENAR MAS DE TRES COLUMNAS EN EXCEL

Con el ejemplo de esta macro vamos a ordenar de la columna "A" a la columna "H" por orden de importancia comenzando de la columna "A".

Explicacón. como Excel solo cuenta con tres opciones para ordenar, lo aremos de la siguiente forma.

Primero ordenamos el rango por las columnas de menor importancia comenzando con la mas importante de esa categoria, para nuestro ejemplo primero vamos a ordenar las columnas "G" y "H" tomando como mas importante la "G" vease el parrafo 1 del codigo.

Despues el Rango por las tres columnas anteriores a las que ya ordenamos, en nuestro ejemplo seran las columnas "D", "E" y "F" vease el parrafo 2 del codigo.

Por último el Rango por las tres columnas anteriores a las que ordenamos anteriormente, en nuestro ejemplo seran las columnas "A", "B" y "C".

Una ves hecho esto el rango de las columnas de la "A" a la "H" quedara ordenado por orden de importancia por columna es decir la columna "A" es la mas importante y la columna "H" la menos importante.

Nota: En las tres opciones el rango a seleccionar es el rango de la columna "A" a la "H", solo se diferencia en la columna que se toma en cuenta para el ordenamiento de los registros.

Copie y pegue la siguiente macro.

Sub MyMacro()

    Range("A1:H20").Select
    Selection.Sort Key1:=Range("g2"), Order1:=xlAscending, Key2:=Range("h2") _
        , Order2:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
        xlSortNormal
       
    Range("A1:H20").Select
    Selection.Sort Key1:=Range("d2"), Order1:=xlAscending, Key2:=Range("e2") _
        , Order2:=xlAscending, Key3:=Range("f2"), Order3:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
        xlSortNormal
       
   Range("A1:H20").Select
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _
        , Order2:=xlAscending, Key3:=Range("C2"), Order3:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
        xlSortNormal
    Range("a1").Select
    MsgBox ("Porceso terminado con éxito")
End Sub



MACRO QUE REALIZA LA FUNCION  BUSCARV (VLOOKUP) PERO SIN USAR FORMULA, DESDE VISUAL BASIC

Manejando el siguiente ejemplo:

Hoja2 de tu libro

ABC
CódigoNombreGiro
100Empresa1, SaComercial
200Empresa2, SaServicios
300Empresa3, SaConstruccón


hoja1 de tu libro

ABC
Clave CteAqui teclea la clave cte
NombreAqui aparecera Nombre
GiroAqui aparecera Giro


ahora te vas al editor de Visual Basic
Menu-Herramientas-Macro-Editor de VB
o, Preciona la convinacion de teclas Alt+F11
ya estando en el editor de Visual basic, Inserta un Modulo
Menu-Insertar-Modulo
dentro del Modulo escribe lo siguiente:

Sub MyMacro()

Sheets("hoja2").Select
Range("a1").Select
Dato = Worksheets("hoja1").Range("a2").Value
[A:A].Find(What:=Dato, After:=ActiveCell).Activate
i = ActiveCell.Row
Worksheets("hoja1").Range("a3").Value = ActiveCell.Offset(0, 1).Value
Worksheets("hoja1").Range("a4").Value = ActiveCell.Offset(0, 2).Value
Sheets("hoja1").Select
Range("a2").Select
MsgBox ("Datos Encontrados")
End Sub

Una ves echo esto, cierras el editor de VB, y egresas a excel..
dentro de Excel Crea un botón para que ejecutes la macro..
Como crear el botón y asignarle la macro
Menu-Ver-Barras de Herramientas-Formularios
se inserta una caja de texto con las herramientas para Formularios, dale click a la herramienta para botones, al darle click, sin soltar el boton del mause arrastralo y sueltalo en la parte de la hoja donde vas a poner tu botón, al momento de soltarlo, se abre un cuadro de dialogo con la lista de macros que has generado, hay debe estar el nombre de "MyMacro" seleccionalo y dale Aceptar..
Ejecuta el botón y tendras el resultado deseado.



BUCLE FOR
El Bucle For en Visual Basic

Un elemento fundamental en todo lenguaje de programación son las instrucciones iterativas, también llamadas bucles, que nos permiten ejecutar cierto código tantas veces como nos sea necesario. Dentro de estas instrucciones se encuentra el bucle For, cuyo ejemplo en lenguaje Visual Basic podría ser:

 
For i=0 To 10 Step 1
    Print i
Next

Este código imprimirá por pantalla desde el número 0 al número 10. La sintaxis es más sencilla que en otros lenguajes, constando de un for para iniciar el bucle, el valor inicial de la variable, su valor final, el incremento o decremento de la variable (en caso de ser 1 puede omitirse quedando For i=0 To 10), el código a repetir y la palabra Next para cerrarlo.

Nuestra condición en el ejemplo ha sido simple pero, por supuesto, también podríamos haber programado algo como For i = cx - 1 To cx + 1 (siendo i, cx y cy variables integer), anidar bucles o cualquier otra "acción" válida y con sentido.





BUCLE DO UNTIL....LOOP
Repetir Codigo

El bucle DO...LOOP es muy versatil. Con el se pueden crear gran variedad de bucles distintos, bucles que comprueben una condición antes de ejecutar el bucle una vez, después de la primera ejecución y con conbinaciones con mientras (WHILE) que se cumple una condición o hasta (UNTIL) que esa condicion se cumpla. la sintaxis de esta estructura es la siguiente: 
DO [WHILE | UNTIL (condicion)]
      Sentencias
      .....
LOOP [WHILE | UNTIL (condicion)]

Vamos a tratar de explicar esta sentencia de manera pausada para que sea más fácil de entender. Lo que siempre tendremos en estos bucles es el DO y el LOOP, entre estos dos colocaremos las sentencias que queremos ejecutar en cada iteración del bucle. Los bucles tienen que evaluar entre cada iteración si se siguen ejecutando o no, para ello evaluan una condición. Lo versatil de este bucle es que la condición se puede expresar de muchas maneras distintas.

Condición expresada al lado del DO: en este caso la condición se evalua antes de empezar a ejecutarse el bucle.
Condición expresada al lado del LOOP: en este caso la condición se evalua después de ejecutarse el bucle. Tiene como diferencia principal frenta al otro método que en este caso el bucle se ejecutará por lo menos una vez.

Además de poder expresar la condición en estos dos sitios también se puede construir la condición con un enunciado mientras (WHILE) o un enunciado hasta (UNTIL). Las diferencias semanticas de estas dos posibilidades se trasladan también a su manera de funcionar.

Vamos a ver un par de ejemplos de este bucle para comprender su funcionamiento. El ejemplo pide cunstantemente el nombre del autor de la página y no para hasta que el nombre sea "migue". También tiene el usuario la posibilidad de escribir "out", en ese caso, comprobado con un enunciado IF, se sale del bucle rompiéndolo con la sentencia EXIT DO, utilizada para romper bucles.

Dim entrada
entrada = ""
DO WHILE (entrada <> "migue")
   entrada = inputbox ("Dime el nombre del autor","seguridad","migue",2,3)
   if (entrada = "out") then
     msgbox "salgo por la puerta de atras"
      exit do
   end if
LOOP

El siguente ejemplo realiza una cuenta y entre cuenta y cuenta se muestra el valor de la cuenta actual en una ventanita donde sale un botón de Reintentar y otro de Cancelar. Si se pulsa reintentar se sigue ejecutando el bucle y si se pulsa Cancelar se sale por la puerta de atrás, de manera similar a como se salía en el ejemplo anterior, con EXIT DO.

option explicit
dim cont
dim respuesta
cont = 0
DO
   cont = cont +1
   respuesta = msgbox (cont,69,"Variable del bucle, con valor 6 se sale")
   if (respuesta = 2) then 
       msgbox "Cuenta Cancelada",16,"Cancelaste!" 
       exit do
   end if
LOOP UNTIL (cont = 6)



Veamos ahora los dos tipos de bucles WHILE que podemos utilizar en Javascript y los usos de cada uno. 



BUCLE WHILE WEND

El bucle WHILE...WEND sirve para realizar un tipo de bucle muy utilizado en programación que es el bucle Mientras, que se ejecuta mientras que se cumpla una condición. A diferencia del bucle FOR, éste se utiliza cuando no conocemos el número de iteraciones que tenemos que realizar.

El bucle funciona de la siguiente manera. Cuando se va a ejecutar, evalúa una expresión y compreba que esta da resultados positivos. Si es así, ejecuta el cuerpo del bucle (las sentencias que siguen hasta el WEND), en caso contrario se sale. Podemos ver la sintaxis a continuación.

WHILE (condicion)
          sentencias
          ....
WEND

Ahora vamos a ver un ejemplito sobre este bucle, que realiza una cuenta número a número hasta llegar al 13. En cada iteración del bucle muestra en una ventanita el número actual y ofrece la posibilidad de cambiarlo, ya que la ventanita es una ventana Input, que ofrece la oportunidad de cambiar el valor y devuelve ese valor, cambiado o no. Como decíamos, si dejamos el ejemplo sin tocar nada, cuenta hasta 13, pero si introducimos un número en el inputbox continúa la cuenta por el número introducido. Si el número introducido es mayor que 13 también se sale del bucle.

option explicit
dim a
a = 0
WHILE (a < 13)
   a = a + 1
   a = inputbox("Dame un valor entero, please","Petición de número",a,200,100)
WEND

 Ejemplo:

Sub MyMacro()
    x = 0
    Range("a6:e20").ClearContents
    fac = Range("d1").Value
    Sheets("histo").Select
    Range("A2").Select
    While ActiveCell.Value <> ""
    If ActiveCell.Value = fac Then
    x = 1
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("Fact").Select
    Range("a30").Select
    Selection.End(xlUp).Select
    ActiveCell.Offset(1, 0).Select
    ActiveCell.PasteSpecial xlPasteValues
    Sheets("histo").Select
    Selection.EntireRow.Delete
    ActiveCell.Offset(-1, 0).Select
    End If
    ActiveCell.Offset(1, 0).Select
    Wend
    Sheets("fact").Select
    Range("A2").Select
End Sub

Esta macro esta hecha para formato de factura, es decir busca los registros de movimientos en una base de datos haciendo referecia al numero de factura, para esto manejamos dos hojas la primera es donde tenemos nuetra plantilla (Fact), la segunda donde estan guardados los registros (Histo), el folio de la factura a buscar lo ponemos en la celda "d1" de la hoja plantilla presionamos el boton de busqueda y nos regresa los registros de movimiendo pegandolos a partir de la celda "a6" 

Ver Figuras

Hoja Plantilla (Fact)

  A B C D
1     Num Fact 101
2        
3        
4        
5        
20        

 Hoja Base de Datos (Histo)
  A B C D
1 Fact Cant Articulo Precio
2 100 2 Aceite 45
3 100 3 Filtro 80
4 102 5 Marcha 500
5 102 2 Liquido 45
6 102 3 Limpiador 20
7 103 1 Llanta 450
8        
9        




1-Activa el Editor de Vb pulsando la convinacion de teclas alt+f11
2-inserta un userform
3-en el menú ver selecciona propiedades
4-en la propiedad Caption escribe el textoque deseas que aparesca como encabezado.



COMO AGREGAR UN CONTROL A UN FORMULARIO

1-de la caja de texto seleccciona el control, arrastralo  y sueltalo en el UserForm
2-en la propiedad caption escriba el texto que desé darle al control

Nota: para los controles textbox que se usan para poner contraseña, es necesario cambiar la propiedad PasswordChar y poner el caractér que desea que aparesca cuando escribe la contraseña



COMO AGREGAR DATOS A UN CONTROL COMBOBOX

Una ves ya agregado el combobox al userform selecciona el userform presiona el botón derecho del mause selecciona ver código y escribe lo siguiente.

Private Sub UserForm_Initialize()
ComboBox1.AddItem Worksheets("Rep").Range("a2").Value
ComboBox1.AddItem Worksheets("Rep").Range("a3").Value
End Sub

En este caso el combobox contiene los datos que estan en la celdas a2 y a28 de la hoja "Rep"

Usted puede agregar mas registros a su combobox solo agrega mas instrucciones cambiando el numero de celda a1, a2, a3,a4, a5......a100 etc.



COMO ACTIVAR EL FORMULARIO DESDE EXCEL

Para activar el fotmulario desde excel programamos una macro,

Ejemplo:

Sub MyMacro()
UserForm.Show
End Sub


Agregamos esa macro a un botón y presionamos el botón y listo el userform se activara.



COMO TRABAJAR CON CONTRASEÑAS

Es interesante trabajar con contraseñas dentro de la hoja de calculo, ya que en ocaciones trabajamos con información que los usuarios no deben de ver.

Como primer paso debemos de crear un UserForm para la identificacion del usuario el cual debe contener dos TextBox uno para el nombre del usuario y el otro para la contraseña. Tambien debe tener dos botones uno para Aceptar y el otro para Cancelar y cerrar el UserForm.

Una ves ya realizado el primer paso pasamos de la estetica a la programación.

Al TextBox de contreseña le asignamos la propiedad de PasswordChar y le ponemos un arterisco, esto para que al momento de que el usuario ponga su contreseña aparesca como mascara un arterisco.

Ahora en el boton Aceptar presionamos el botón derecho del mause y seleccionamos ver código

Escribimos lo siguiente:

If TextBox2.Value = myclave Then
Sheets("Hoja2").Visible = True
Sheets("hoja2").Select
End If
End Sub

En este ejemplo, suponemos que la hoja2 se encuentra oculta
y con la contraseña la visualizamos

Nota: para este ejemplo la clave es myclave

Ahora en el botón Cancelar presione el botón derecho del mause seleccione ver código y escriba lo siguiente.

Unload UserForm

esto para que cierre el UserForm

Hasta aqui su formulario de identificación ya esta listo.

a continuación

haga una macro.

pongale la instrucción para que le active este formulario, agreguesela a un botón y listo.

Nota: para esto la hoja2 debe estar oculta, la puede ocultar en el menú Formato-Hoja-Ocultar.



COMO OCULTAR Y MOSTRAR CONTROLES CON EL VALOR DE OTRO EN UN FORMULARIO



Ejemplo:

Para este ejemplo vamos a usar un formulario llamado "form1"
este formulario le insertamos un botón de opción, al que llamamos "opcion1"
despues le insertamos un cuadro de texto al que llamamos "textbox1", y por ultimo le insertamos un botón de comando al que llamamos "botón1"

Una ves hecho esto seleccionamos el botón "opcion1", le damos click derecho al mause y seleccionamos ver código, luego insertamos este código.

Form1.TextBox1.Visible = True

Luego seleccionamos "TextBox1" le damos click derecho al mause, seleccionamos ver código, e insertamos este código.

Form1.Boton1.Visible = True

Despues de la barra de herramientas,en el menu insertar, insertamos un módulo, dentro del módulo crea una macro llamada "MyMacro".
quedara asi:

Sub MyMacro()

Form1.Show
Form1.opcion1.Value = False
Form1.TextBox1.Visible = False
Form1.Boton1.Visible = False

End Sub

Despues cerramos el editor de Visual Basic, regresamos a Excel, en el Menú Ver, seleccionamos el Sub-Menú Barras de herramientas, despues seleccionamos Formularios y de la caja de texto de formularios insertamos un botón de comando, al momento de insertarlo se abrirar la lista de macros creadas, seleccionamos "MyMacro".

Una ves ya agregada la macro al botón que insertamos en Excel, damos click al mismo, se debe activar el Form1 solo con el botón "opcion1" visible, al momento de dar click sobre "opcion1" se debe visualizar el "TextBox1" y al mmento de introducir datos al "TextBox1" se debe visualizar el "Botón1".



COMO GUARDAR UN LIBRO CON LA HORA ACTUAL DEL SISTEMA

En ocaciones tenemos procedimientos que nos guardan el libro, con algun nombre fijo, pero aveces tenemos la necesidad de saber a que hora se guardo nuetro libro para lograr esto solo agrega este código,

Esta macro es AutoEjecutable, esto quiere decir que siembre que cierres el libro lo guardara con el mismo nombre pero con una hora diferente.

Sub Auto_Close()

Dato = Time
a = Mid(Dato, 1, 2)
b = Mid(Dato, 4, 2)
c = a & " " & b

ChDir "C:"
ActiveWorkbook.SaveAs Filename:="Archivo Guardado a las " & c
End Sub

Declaración de la variable "Dato" esto quiere decir que le indicamos al sistema que dato es igual a la hora del sistema

Declaración de la variable "a" esto quiere decir que le indicamos al sistema que a es igual a los primeros dos caracteres de la cadena de la hora

Ejemplo:

La hora es 05:32:05 a.m.

a = 05

Declaración de la variable "b" esto quiere decir que le indicamos al sistema que b es igual al caracter 4 y 5 de la cadena de la hora.

Ejemplo:

La hora es 05:32:05 a.m.

b = 32

Declaración de la variable "c" esto quiere decir que le indicamos al sistema que c es igual a (a + un espacio + b)

Ejemplo:

c = 05 32

La cadena CDir "C:" con esta instruccion le decimos al sistema que el archivo lo guarde en la ruta llamada C:

CDir  Indicamos que es un directorio.

"C:" es el nombre del directorio solo que lo encerramos entre comillas por ser una cadena de texto.

ActiveWorkbook.SaveAs Aqui indicamos que el libro activo se guarde como

ActiveWorkBook  Libro Activo
SaveAs Guardar Como

FileName: Nombre del Archivo despues de esto ponemos el nombre que le bamos a dar

si nos fijamos la cadeba que sigue de esto es:

Archivo guardado a las y va entre comillas por ser una cadena de texto

luego va & c

con esto estamos pegando la cadeba de texto con la variable c

el nombre quedara

Archivo guardado a las 05 32
porque c = 05 32



COMO GUARDAR UN LIBRO CON LA FECHA DEL SISTEMA

Copia y pega esta macro, como la macro "Auto_Close" se autoejecuta simpre que se cierra el libro, simpre que cierres el libro se guardara con la fecha del sistema.

La explicación de las variables es la misma que la del tema anterior.

Sub Auto_Close()

Dato = Date
a = Mid(Dato, 1, 2)
b = Mid(Dato, 4, 2)
c = Mid(Dato, 9, 2)
d = a & "-" & b & "-" & c

ChDir "C:"
ActiveWorkbook.SaveAs Filename:="Archivo Guardado el dia " & d

End Sub



COMO AUTOEJECUTAR UNA MACRO A CIERTA HORA DEL DIA

Esta macro se autoejecuta a la 14:10 horas todos los dias, y lo que hace es ejecutar otra macro, la cual la otra macro cierra el libro.

Sub MyMacro()

Run ("EstaMacro")
Application.OnTime Now + TimeValue("00:00:20"), "MyMacro"
End Sub


Sub EstaMacro()
A = Format(Time, "hh:mm")
If A = "14:10" Then
ThisWorkbook.Close
End If
End Sub

Si nos fijamos aqui tenemos dos macros MyMacro y EstaMacro, el procedimiento 00:00:00 (hh:mm:ss) ejecuta la macro segun la macro que nosotros pongamos al final de esa linea, en nuestro ejemplo pusimos MyMacro lo cual es la misma macro que contiene el procedimiento, entonces se esta Autoejecutando.

A la ves MyMacro ejecuta EstaMacro "Run("EstaMacro")",
y si nos fijamos en el procedimiento de EstaMacro estamos validando, If A = "14:10" Then

Como anteriormente declaramos que A = El valor de la hora actula pero en un formato de solo horas y minutos  A=Fortmat(Time,"hh:mm"). entonces A es igual a las horas y los minutos del sistema.

El Procedimiento 00:00:20 hace que MyMacro se Autoejecute cada 20 segundos a la ves ejecuta EstaMacro y esto quiere decir que EstaMacro esta validando cada 20 segundos si la hora del sistema es ogual a las 14:10 si se cumple la condición lo que hace es cerrar el libro.

if a = "14:10" Then
ThisWorkBook.close

Nota: Una ves pegadas las macros en tu archivo, ejecuta manualmente la macro "MyMacro", aunque en ese momento no pasara nada solo ejecutalapara que empiece a correr a partir de ese momento.



COMO BUSCAR UNA CARPETA DESDE EXCEL

Copia y pega esta macro

Sub Buscar()

On Error Resume Next
Range("a1").select
Dim ruta As String
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Buscar Carpeta", 0, path_oficial)
Set carpeta = objFolder.self
ruta = carpeta.Path

End Sub
End Sub



VERIFICAR SI EXISTE UNA CARPETA (DIRECORIO)

Copia y pega esta macro

Para este caso vamos a verificar si existe una carpeta llamada "Windows"  en la ruta C:

Sub MyMacro()
Const ATTR_DIRECTORY = 16
If Dir$
("c:windows", ATTR_DIRECTORY) <> "" Then
MsgBox ("
Si existe")
Else
MsgBox ("
No existe")
End If



VERIFICAR SI EXIETE UN ARCHIVO

Verificamos si existe el archivo "Archivo.xls" en la carpeta C:Trabajo

If Dir$("c:trabajoArchivo.xls") <> "" Then
MsgBox("Si existe
Else
MsgBox("No Existe")
End If



COMO OCULTAR UNA CARPETA Y UN ARCHIVO

En este caso tomamos como condicionante si la celda a1 es  igual a 1 oculta el directorio y el archivo si no es igual a 1 los muestra.

Ocultar Carpeta

Sub Ocultar_Dir()

If Range("a2").Value = 1 Then

SetAttr "c:carpeta", vbHidden
Else
SetAttr "c:carpeta", vbNormal
End If
End Sub

Ocultar Archivo

Sub Ocultar_Arc()

If Range("a2").Value = 1 Then

SetAttr "c:carpetaArchivo.xls", vbHidden
Else
SetAttr "c:carpeta.xls", vbNormal
End If
End Sub



SUMAR.SI CON DOS O MAS CONDICIONES

En este ejemplo vamos a determinar la suma de la columna "C" segun la condición "f1" encontrada en la columna "A" y
la condición "f2" encontrada en la columna "D".

Importante cuando estes editando la formula, una ves que termines en ves de presionar enter, debes presionar CTRL+SHIFT+Enter
dado que esta es una formula matricial.

Ejemplo:

Tu Editas esto:

=SUMAPRODUCTO((a1:a65536=f1)*(b1:b65536=f2)*(c1:c65536))

Cuando presionas CTRL+SHIFT+Enter quedara asi:
{=SUMAPRODUCTO((a1:a65536=f1)*(b1:b65536=f2)*(c1:c65536))}

En este ejemplo realizaremos la suma de las mismas columnas solo que ahora los datos estan en la "hoja2" y las condiciones
en la hoja1.

=SUMAPRODUCTO((hoja2!a1:hoja2!a65536=f1)*(hoja2!b1:hoja2!b65536=f2)*(hoja2!c1:hoja2!c65536))



CONTAR SI CON DOS OMAS CONDICIONES

Para contar con dos o mas condiciones, es algo muy parecido a la suma solo agregamos un guion antes de los parametros.

En este ejemplo vamos a contar cuantas condiciones "f2" hay en las columna "B" solo si coincide con la condición "f1" encontrada
en la columna "A".

=SUMAPRODUCTO(-(A1:A10=F1),-(B1:B10=F2))

No olvides presionar CTRL+SHIFT+Enter al terminar de editar la formula



COMO EJECUTAR UNA MACRO CON SOLO SELECCIONAR UNA CELDA

En esta ocación vamos a ejecutar la macro "MyMacro" con solo seleccionar la celda "b2"

1-Entra el editor de Visual Basic Presionando Ctrl+F11
2-Da doble click sobre el titulo de la hoja donde tienes los datos hoja1, hoja2 etc.
3-Pega este código

Nota: Cambia el nombre de MyMacro por el  tu macro.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If ActiveCell.Address = "$B$1" Then
Run("MyMacro")
End If

End Sub



MACRO AUTOEJECUTABLE QUE PONE COMO NOMBRE DE HOJA LA FECHA DEL SISTEMA

Esta macro se autoejecuta cada ves que usted entra al archivo, reemplezando el nombre de la hoja1 con la fecha del sistema

Sub Auto_Open()
Dato = Date

a = Mid(Dato, 1, 2)
b = Mid(Dato, 4, 2)
c = Mid(Dato, 9, 2)
d = a & "-" & b & "-" & c

Sheets(1).name =  d

End Sub



FUNCION BUSCAR VARIABLE (BUSVARV), (VLOOKUP)

Esta función la utilizamos cuando necesitamos autocompletar campos de un formulario hecho en una hoja de calculo.

Lo que realiza esta función es extrear todos los datos relacionados al con el dato de estamos buscando..

Ejemplo:

Suponiendo que tenemos un formulario en la hoja1, el dato a buscar lo ponemos en la celda a1 y los datos a rrellenar con la función se pondran en la celda a2 y a3, la base de datos la tenemos en la hoja2 en las columna a, b y c.

En la columna a de la hoja2 tenemos fólios, en la columna b tenemos nombre y en la columna c tenemos importes.

Lo que vamos a hacer en la hoja1 es que cuando nosotros pongamos en la celda a1 un fólio, automaticamente se pondra el nombre y el importe en las celdas a2 y a3 respectivamente, para lograr eso ponemos estas formulas en las celdas a2 y a3.

en la celda a2

=buscarv(a1,hoja2!a1:hoja2!c1000,2,2)

En la celda a3

=buscarv(a1,hoja2!a1:hoja2!c1000,3,2)

si nos damos cuenta el unico dato que cambia es el que esta marcado con color azul que significa el numero de columna dentro del rango...ojo del rango no de la hoja.



MACRO EXPORTA E IMPORTA MODULO DE UN PROYECTO DE VB

En este ejemplo pirmero importamos el módulo a la ruta C:  y lo guardamo como code.txt, luego lo volvemos a importar de esa ruta al libro activo.

Para Exportar

Sub Exportar_Modulo()
    Dim FName As String
   
FName = "C:code.txt"
ThisWorkbook.VBProject.VBComponents("Módulo2").Export FName
End Sub

Para Importar

Sub Importar_Modulo()
 FName = "C:code.txt"
 ThisWorkbook.VBProject.VBComponents.Import FName
End Sub



MACRO QUE REEMPLESA UN CARACTER POR OTRO EN UNA CADENA DE TEXTO

En este ejemplo reemplezamos la la letra "u" o "U" por el numero 3 de las cadenas de texto que hay en la la columna "A".

Sub MyMacro()

Range("A1").Select

a = InputBox("Escriba a el caracter a buscar")
b = InputBox("Escriba a el caracter a sobre-escribir")
    
[A:A].Replace What:=a, Replacement:=b, LookAt:=xlPart,         SearchOrder :=xlByColumns, MatchCase:=False

End Sub



MACRO QUE AUTO ELIMINA EL MODULO QUE LA CONTIENE

Esta macro auto elimina el módulo que la contiene, pero manda una alerta antes de hacerlo.

Sub Auto_Eliminar_Modulo()

Dim vbCom As Object
Dim Mensaje, Estilo, Título, Respuesta, MiCadena

Mensaje = "¿Estas totalmente seguro de lo que vas a hacer?"
Estilo = vbYesNo + vbCritical
Título = "Error grave si continua(Este Módulo de AutoEliminara)"
Respuesta = MsgBox(Mensaje, Estilo, Título)

If Respuesta = vbYes Then
MiCadena = "Sí"
Else
MiCadena = "No"
Exit Sub
End If

Set vbCom = Application.VBE.ActiveVBProject.VbComponents

vbCom.Remove VBComponent:= _
vbCom.Item("Módulo2")

End Sub



MACRO QUE BUSCA UN VALOR EN LA COLUMNA DE TODAS LA HOJAS
 
Esta macro busca el valor de la celda a3 de hoja1 llamada "Informe", cuando lo encuentra regresa a la hoja informe inserta una fila en la fia 5, pone el valor encontrado y sigue buscando hasta terminar en todas las hojas.

Sub MyMacro()
Range("a5").Select

a = 1

c = Range("a3").Value
For i = 1 To Sheets.Count - 1

Sheets(a + 1).Select
Range("a1").Select

Do Until ActiveCell.Value = ""
If ActiveCell.Value = c Then
d = ActiveCell.Value
Sheets("Informe").Select
Selection.EntireRow.Insert
ActiveCell.Value = d
Sheets(a + 1).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
a = a + 1
Next

Sheets("Informe").Select
End Sub



COMO CREAR FUNCIONES DEFINIDAS POR EL USUARIO

La hoja de calculo Excel dispone de un número muy grande de funciones predeterminadas. Estas funciones puede interactuar con macros. Pero tambien es muy importante la posibilidad que permite
al usuario de la hoja de Excel poder crear sus propias funciones. Y siguiendo con la misma linea, que pueda interacuar con las macros al igual que las predefinidas de la propia hoja. Esto habre la opción de crear
una función que sea necesarioa para el propio trabajo y que no exista definida de origen.

a continuación vamos a crear una función que va a convertir pesos mexicamos a dolares americanos.

la función se llamara conviertedlls


Function conviertedlls(pesos As Integer, tcambio As Double) As Double

 

conviertedlls = pesos / tcambio

End Function


asi de sencillo

ahora para llamamos esta función desde Excel, lo hacemos como llamar cualquier otra

en la celda a1 ponemos lor pesos a comvertir por ejemplo 1000
en la celda a2 ponemos el tipo de cambio por ejemplo 12.20

ahora en la celda a3 ponemos la función  =conviertedlls(a1,a2), el resultado sera 81.9672

si nos damos cuentas las variables las declaramos como Double es por eso que no es cecesario
encerrar entre comillas los nombre de la celda en la funcion

ahora si queremos llamar a la funcion desde una macro hacemos lo siguiente:


Sub MyMacro()

a = conviertedlls(1000,12.20)

MsgBox("La cantidad en dolares es " & a )

End Sub

cada ves que ejecutemos la macro nos mandara un mensaje con el mismo resultado que nos dio en excel, salvo que pongamos
valores diferentes.

Esta función determina el area de un  circulo

Function areacir(radio As Double) As Double

pi = 3.1416
 
areacir = pi * radio * radio
 
End Function

como llamar desde excel, en la celda a1 ponga el radio del circulo

en la celda a2 ponga =areacir(a1)

Esta función determina la longitud de de un circulo

Function longcir(radio As Double) As Double

pi = 3.1416

longcir = 2 * pi * radio

End Function

en la celda a3 ponga =longcir(a1)



Volver a Temario
USO DE LA PROPIEDAD  SELEC CASE....END SELECT

Esta propiedad se utiliza cuando se quieren valuar varias condiciones, regularmente cuando necesitamos valuar una condicion utilizamos If..end If o ElseIf. para mas de una condicion.

Select Case la utilizamos cuando deseamos valiar varias condiciones por ejemplo:

En este ejemplo vamos a valuar el valor que exista en la celda a1 de la hoja1, si la celda tiene 1 mandara un mensaje con la palabla "uno", si la celda tiene valor 2 mandara un mensaje con la palabla "dos" y asi sucesivamente hasta 10.

Sub MyMacro()
a = WorkSheets("hoja1").Range("a1").Value

Select Case a
Case "1"
MsgBox ("uno")
Case "2"
MsgBox ("dos")
Case "3"
MsgBox ("tres")
Case "4"
MsgBox ("cuato")
Case "5"
MsgBox ("cinco")
Case "6"
MsgBox ("seis")
Case "7"
MsgBox ("siete")
Case "8"
MsgBox ("ocho")
Case "9"
MsgBox ("nueve")
Case "10"
MsgBox ("diez")
End Select

End Sub



COMO BLOKEAR LA X DE CERRAR EN UN LIBRO DE EXCEL
 
En un módulo ega este código

Public salir As Byte

Sub MyMacro()
salir = 1
ThisWorkbook.Save
ThisWorkbook.Close
End Sub

En la pestaña del  ThisWorkbook pega este.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If salir = 0 Then Cancel = True Else Cancel = False
If Cancel = False Then GoTo seguir
    Msj = "SOLO PUEDE SALIR DEL LIBRO MEDIANTE EL BOTON DISPUESTO PARA ELLO !!!"
    Estilo = vbOKOnly + vbCritical
    Titulo = "INFORMACIÓN IMPORTANTE"
    Respuestaf = MsgBox(Msj, Estilo, Titulo)
seguir:
End Sub

Crea un botón en la hoja de excel y agregale la macro "MyMacro"

cuando intentes cerrar con la x te mandara un mensaje, para ello es el botón para que cierres con el.



FUNCION SUMAR.SI CON SIGNOS DE COMPARACION

si nos fijamos, la sintaxis de la función sumar.si es la siguiente

=sumar.si(rangodecondición,condicion,rangodesuma)

entonce para sumar el rango de la b2 a la b50 cuando las fechas en la columna a sean menores a la fecha actual, ponemos:

=sumar.si(a2:a50,<hoy(),b2:b50)

esto dara como resultado que Excel no reconosca esta cadena como una formula.

para solucionar lo anterior concatenamos el signo de comparación de esta forma.

=sumar.si(a2:a50,"<"&hoy(),b2:b50)

si deseas  manejar otra comparación solocambia el signo
(<,<=,=,<>,>=,>)



COMO EJECUTAR UNA MACRO POR INTERVALOS DE TIEMPOS

Este Procedimiento ejecuta la  misma macro cada intervalo de tiempo, en nuestro, ejemplo tenemos indicado que la macro se autoejecute cada 30 minutos.

00:00:00
Horas:Minutos:Segundos

Si nos fijamos en el ejemplo esta:

00:30:00 lo que quiere decir que la macro se autoejecute cada cero horas 30 minutos cero seguntos.

Por ejemplo si quisieramos que se autoejecute cada hora ponemos
01:00:00

cada cinco segundos
00:00:05

cada dos horas
02:00:00

Asi sucesivamente segun nuestra necesidad.

En el ejemplo la macro que se ejecuta es la misma que tiene el procedimiento "EstaMacro" la cual a su ves ejecuta otra macro "MyMacro"

Entonces dentro de MyMacro es donde podemos poner los procesimientos a llevara cabo por ejemplo podemos poner:

ThisWorkBook,Sabe

De esta forma el archivo se estara autoguardando cada intervalo de tiempo puesto en TimeValue.

Sub EstaMacro()

Application.ScreenUpdating = False
Run ("MyMacro")
Application.OnTime Now + TimeValue("00:30:00"), "EstaMacro"
End Sub

Nota: Una ves pegadas las macros en tu archivo, ejecuta manualmente la macro "EstaMacro", aunque en ese momento no pasara nada solo ejecutalapara que empiece a correr a partir de ese momento.



COMO COMPARAR DATOS DE DOS COLUMNA CON LA FUNCION COINCIDIR EN EXCEL

Sintaxis:

COINCIDIR(valor_buscado; matriz_buscada; tipo_de_coincidencia])



COMO ENCONTRAR UN RESULTADO DENTRO DE UNA LISTA CON LA FUNCION SOLVER

Pasos del proceso
1-Llene el rango de celdas de la e1 a la e10 con diferentes cantidades

2-Llene el rango de la celdas f1 a la f10 con el numero uno en todas la celdas

3-En la celda e12 ponga la el resultado que se busca

4-En la Celda f12 porga la formula =sumproduct(e1:e10,f1:f10)

5-Presione el menú Datos, en el Grupo Analysis presiones Solver (Si no esta esta función activada vea los paso mas abajo para activarla)

6-En el campo Set Target Cell (Celda Objetico) ponga la celda ($F$12) o seleccionela

7-Presione el Bóton Add y en el campo Cell reference ponga $B$1:$B$10 en el campo de signos ponga bin y presione Ok (aceptar)

8-Presione Solver (Resolver)

10-Fijece que en el rango f1 al f10 algunos unis cambian a ceros, los que quedan en uno son las convinaciones para llegar al resultado.

Nota: plantilla de ejemplo, descarguela en el apartado descarga de plantillas Clave de descarga 147258



COMO ACTIVAR LA FUNCION SOLVER EN EXCEL 2007

1-Presione el bóton de Office la (el circulito que se encuentra en la esquina superior ixquierda de su pantalla

2-Presione Opciones de Excel

3-Presione Add-In

4-En la Parte de abajo presione Go ( Ir )

5-Seleccione la casilla Solver-In

6-Presione Ok (Aceptar)



COMO ENVIAR UN CORREO VIA OUTLOOK 2007 DESDE EXCEL

En este ejemplo vamos a desarrolla una macro que nos envie un correo via Outlook 2007, pero antes, que nos pregunte los datos para agregar nosotros el correo a enviar..

en este ejemplo los datos que vamos a enviar son de la celda a1 a la celda e50, de una hoja que se llame Datos

Pasos:

Paso1-Abrimos el libro, a la hoja1 la llamamos Datos (En este paso guardamos el libro)

Paso2-Abrimos el editor de Visual Basic presionando Alt+F11

Paso3-En el menú Insert Insertamos un módulo nuevo, y pegamos la siguiente macro.

Sub MyMacro()

    Dim mihoja As Worksheet
    Dim mirango As Range
    Dim micelda As Range
   
    On Error GoTo Parar_Macro
   
    Set mirango = Worksheets("datos").Range("A1:E50")
    Set mihoja = ActiveSheet
   
    With mirango
        .Parent.Select
        Set micelda = ActiveCell
        .Select
        ActiveWorkbook.EnvelopeVisible = True
    End With
   
    micelda.Select
Parar_Macro:

End Sub

Paso4-Cerramos el editos de Visual Basic, y regresamos a Excel a la hoja Datos

Paso5-Agregamos la macro a un botón.

Paso6-Presionamos el botón y aparecera la ventana del Outlokk para agregar los datos de Envio, una ves agregados, en la parte superior presione Send Selection.

Nota:Para que esto funcione debe tener confugurado el Outlokk 2007.

Click Aqui para cingugarar el Outlook 2007

Click Aqui para descargar el archivo de ejemplo  (La Clave de descarga es 147258 )



COMO ASIGNARLE VALORES DE CELDA O VARIABLES A COMBOX Y LISTBOX

A los combobox como a los listbox se les puede asignar valores tanto de celdas como de variable, que pueden ser fijos o variable.

En el primer caso veremos como asignarle valores de un rango de celdas, para este caso manejaremos el rango de la a1 a la a50 de la hoja1.

Primero: Debemos crear un nombre definido con el rango de celdas mensionado, si no sabemos como definir el nombre, cheque los siguientes insisos:

   a)-Selecciona las celda de la a1 a la a50
   b)-Estando seleccionado el rango, da click en la casilla de dirección de celda en la parte superior izquierda de tu pantalla.
   c)-Escribe el nombre que le vas a poner en este caso (Articulos) y presiona enter
   d)-La palabra articulos debe quedar escrita en la casilla de dirección de celda.

Una ves ya definido el nombre, regresamos a vusual basic, seleccionamos el combobox y presioamos el botón derecho del mause, seleccionamos propiedades y buscamos la propiedad que diga  RowSourse,  en el campo de esa propiedad ponemos la palabra  Articulos, o el nombre que hallamos definido.

Repite el proceso anterior para el ListBox.

de esta forma asignamos los valores que hay en el rango definido en la a1 a la a50.

para asignar valores fijos solo escribimos la Instrucción

UserForm1.ListBox1.List = Array("Codigo","Nombre","Precio")

UserForm1.ComboBox1.List = Array("Codigo","Nombre","Precio")

Para Asignar valores de variables

Suponiendo que en las celdas a1, b1 y c1 tenemos los valores Código, Nombre y Precio

a = Range("a1").value
b = Range("b1").value
c = Range("c1").Value

UserForm1.ListBox1.List = Array(a,b,c)

UserForm1.ComboBox1.List = Array(a,b,c)



COMO ASIGNAR EL LARGO Y ANCHO DE UNA IMAGEN POR MEDIO DE UNA MACRO

En este tema veremos como le podemos asignar tanto el largo como el ancho a una imagen por medio de un código de macro.

Primero, debemos de tener al menos una imagen insertada en la hoja1, despues vamos al editor de Visual Basic, presioanndo las convinación de teclas Alt+F11, Insertamos un módulo y pegamos la siguiente macro.

Sub MyMacro()

Largo = InputBox("Ponga el Largo de la Imagen")
Ancho = InputBox("Ponga el Ancho de la Imagen")
 Sheet1.Shapes(1).LockAspectRatio = msoFalse
 Sheet1.Shapes(1).Height = Ancho
 Sheet1.Shapes(1).Width = Largo

End Sub

si te fijas en la instrucción ponemos Sheet1 que significa la hoja1, ponemos un punto para llamar los objetos dependientes de la hoja en este caso ponemos Shapes que significa objetos insertados pero como podemos tener varios objetos en una hoja llmamos el objeto que insertamos primero por esa razon ponemos el 1 entre parentesis que significa que se hace referencia al primer objeto que se inserto en la hoja1, despues llamamos la propiedad Height que significa el ancho de la imagen luego le ponemos que esa propiedad es igual a lo que hay en la variable Ancho que a su ves es el valor que se teclea en el InputBox.



COMO BLOKER UNA O VARIAS CELDAS DESDE CON MACRO

En este tema veremos como podemos blokear solo determinadas celdas en excel con una macro.

Primero hay que comprender como blokearlas manualmante y despues lo haremos con una macro, las celdas solo se blokean cuando se blokea toda la hoja, entonces vamos a ver como blokear la hoja.

Para blokear la hoja si tenemos office con versiones menores a 2007, es decir desde 97 hasta 2003, lo hacemos asi: Entramos en el Menú-Herramientas, seleccionamos Hoja y luego Protección.

Para blokear la hoja si tenemos office con version 2007 o posteriores lo hacemos con el Menú-Revisar luego Protección de hoja.

De esta forma la hoja queda totalmente blokeada, si nos fijamos todas las celdas de la hoja quedan blokeadas, pero en ocaciones deseamos blokear solo determinadas celdas...para eso lo hacemos de la siguiente manera.

Primero, la hoja debe de estar desblokeada, luego seleccionamos todas las celdas de la hoja, lo podemos hacer dando click en el cuadrito donde se junta el encabezado de filas con el encabezado de columnas, cuando esten seleccionadas todas las celdas, damos click al botón derecho del mause y seleccionamos Formato de Celdas, luego en el cuadro que se abre abrimos la pastaña Protección y desactivamos la casilla Looked y presionamos aceptar.

Con este proceso si blokeamos la hoja, las celdas quedaran desblokeadas porque la casilla Looked esta desactivada para todas la celdas.

Ahora si deseamos que solo determinadas celdas queden blokeadas, seleccionamos esas celdas luego sobre la selección presionamos el botón derecho del mause, seleccionamos Formato de Celdas, abrimos la pestaña Protección, activamos la casilla Looked y presionamos Aceptar..

Ahora protegemos la hoja, y tratamos de editar cualquier celda de las que estan blokeadas, como resultado se activara un cuadro indicando que la celda esta blokeada.

Ahora para blokear las celdas con código, todas las celdas de la hoja deben de tener la casilla de Looked desactivada, luego copiamos y pegamos la siguiente macro:

Esta macro blokeara las celdas de la a1 a la a10:

Sub MyMacro()
ActiveSheet.Unprotect
Range("b1").Locked = True
ActiveSheet.Protect
End Sub


Lo que hace la macro es desproteger la hoja, blokear las celdas indicadas, y volver a proteger la hoja.



EJEMPLOS DE LA FUNCION SELEC CASE...END SELECT

La propiedad select...Case...End Select se utiliza cando una validación puede tener varios resultados, por ejemplo cuando necesitamos validar una variable varias veces y que como resultado nos ponga un valor diferente segun su validación.

Esta función es muy parecida a la funcón if la diferencia de esta es que podemos validar varias veces una condición.

Ejemplo:

Supongamos que vamoa a validar el rango a1 con los valores del 1 al 10 y deseamos que por cada número que pongamos en la celda a1 en la celda a2 nos de el número con letra.

a = Range("a1").Value

Select Case a
Case Is = 1
Range("a2").Value = "Uno"
Case Is = 2
Range("a2").Value = "Dos"
Case Is = 3
Range("a2").Value = "Tres"
Case Is = 4
Range("a2").Value = "Cuatro"
Case Is = 5
Range("a2").Value = "Cinco"
Case Is = 6
Range("a2").Value = "Seis"
Case Is = 1
Range("a2").Value = "Siete"
Case Is = 8
Range("a2").Value = "Ocho"
Case Is = 9
Range("a2").Value = "Nueve"
Case Is = 10
Range("a2").Value = "Diez"
End Select



COMO PONER CUADROS DE ALERTA EN EXCEL

Podemos poner cuadro de alerta a una macro para prevenir ejecutar una acción, es decir que se nos pregunte antes de ejecutar dicha acción y poder cancelarla en un caso dado.

En este caso vamos a utilizar un ajemplo de como poner una alerta critica con dos botones, un botón de Si y otro de No.

Sub MyMacro()
Dim Mensaje, Estilo, Título, Respuesta
Mensaje = "Si presiona en si, se realizara la acción, ¿Estas Seguro?"
Estilo = vbYesNo + vbCritical
Título = "Alerta"
Respuesta = MsgBox(Mensaje, Estilo, Título)
If Respuesta = vbYes Then
Range("a1") = "Si"
Else
Range("a1") = "No"
End If
End Sub



COMO PONER DIFERENTES TIPOS DE FORMATO CON MACRO

En este ejemlo vamos a cambiar el formato de la celda b2 segun los valores de la celda a2.

el valor 1 en la celda a2 cambia a formato de porcentaje en la b2

el valor 2 cambia a formato numerico con separador de miles en la celda b2

el valor 3 en la a2 cambia a formato de fecha 2 digitos para el dia, 2 digitos para el mes y 2 digitos para el año en la celda b2

Copia y pega el código de la macro

Sub MyMacro()

If Range("a2").Value = 1 Then
Range("B2").Select
Selection.NumberFormat = "0.00%"
ElseIf Range("a2").Value = 2 Then
Range("B2").Select
Selection.NumberFormat = "#,##0.00"
ElseIf Range("a2").Value = 3 Then
Range("B2").Select
Selection.NumberFormat = "dd-mm-yy;@"
End If
End Sub



MACROS QUE BUSCA Y MARCA LOS 35 NUMEROS MAYORES EN UNLISTADO DE NUMEROS

Esta macro, busca dentro de un listado de números, los 35 mayores y los marca segun el color que se le indique en un inputbox.

1-Copie y pegue el código de macro que se muestra a continuación

2-Defina el el rango de celdas de la z4 a la ak38 y pongale rango4

3-Inserte un botón y agreguele la macro que copio.

Código

Sub MyMacros()
Application.ScreenUpdating = False

Range("c4:O38").Copy
Range("z4").PasteSpecial xlPasteValues
Application.CutCopyMode = False

For i = 1 To 35
Range("a2").Select
ActiveCell.FormulaR1C1 = "=MAX(rango4)"

dato = Range("a2").Value

Range("Z3").Select
[Z:AK].Find(What:=dato, after:=ActiveCell).Activate
ActiveCell.Value = ""

Range("iv65536").End(xlUp).Offset(1, 0).Select
ActiveCell.Value = dato

Next

Range("iv1:iv36").Copy
Range("a1").PasteSpecial xlPasteValues
Application.CutCopyMode = False

a = 2
b = 1 d = InputBox("Ponga el color a marcar 3=Rojo, 4=Verde, 6=Amarillo, 7=Morado, 8=Azul cielo, etc")

For i = 1 To 35
Cells(a, b).Select
c = ActiveCell.Value
Range("c3").Select
[C:O].Find(What:=c, after:=ActiveCell).Activate
ActiveCell.Interior.ColorIndex = d
a = a + 1

Next

Range("z4:ak38").ClearContents
Range("iv1:iv36").ClearContents
Range("a1:a36").ClearContents
Range("a1").Select

End Sub

Descargar un Ejemplo Aqui



COMO DEJAR ACTIVA SOLO UNA AREA DE LA HOJA DE CALCULO

Con este código lo que hacemos es desactivar todas las celdas de nuestra hoja de calculo y dejar activas solo las que indiquemos en el rango

Pegamos este código en el evento Activate de la WorkSheet a la que queremos desactivar

Private Sub Worksheet_Activate()
Me.ScrollArea = "A1:b20"
End Sub

Luego en elevento Open del WorkBook pegamos este

Private Sub Workbook_Open()

Sheets("sheet2").Activate
Range("a1").Select
Sheets("sheet1").Activate
Range("a1").Select
End Sub



COMO GENERAR DOCUMENTO PDF CON MACRO EXCEL

Esta macro genera un archivo de la hoja activa de tu Excel y lo guarda en la carpeta C:\FILES_PDF

La carpeta no es necesario que la crees, ya que le misma macro verifica si existe y si no existe también crea.

al momento de ejecutar la macro, te pedirá que asignes el nombre al archivo, y la macro por defautl lo guarda con el nombre que le asignaste seguido de la fecha del sistema

Ejemplo

tu le asigna el nombre de ventas

el archivo se guardara como

ventas 2014-08-30.pdf

si deseas cambiar la ubicación solo cambia la instrucción C:\FILES_PDF

Copia y pega esta macro..

Sub Guarda_pdf()

MsgBox "SU INFORME SE GUARDARA EN C:\FILES_PDF CON EL NOMBRE QUE LE ASIGNE ", vbInformation, "My empresa"

'VERIFICAMOS SI EXISTE LA CARPETA TIENDAS Y SI NO EXISTE LA CREAMOS
Const ATTR_DIRECTORY = 16
If Dir$("C:\FILES_PDF", ATTR_DIRECTORY) <> "" Then
Else On Error GoTo seguir
MkDir ("C:\FILES_PDF")
End If
seguir:

Dato = Date
a = Mid(Dato, 1, 2) Mbr> B = Mid(Dato, 4, 2)
c = Mid(Dato, 9, 2)
d = a & "-" & B & "-" & c

nom = InputBox("Ponga el Nombre al Archivo")
ChDir "C:\FILES_PDF"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=
_ "C:\FILES_PDF\" & nom & " " & d & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False

pdfRuta = "C:\FILES_PDF\" & nom & ".pdf"
'Shell "explorer.exe c:\carpeta\archivo.pdf"
Shell "explorer.exe " & pdfRuta, 1

End Sub


Soporte Excel
Encuéntranos en Google+ como Macros Excel



SOLUCIONADO EXCEL 2010 SE CUELGA AL CORRER UNA MACRO

A Excel le pasa esto cuando se empalman dos tareas, hasta ahora hay en línea varias explicaciones, puede ser que desactivando los complementos (COM), funcione, en mi experiencia no me funciono...

En este Post les dejo la solución que yo tuve al correr el archivo que siempre se quedaba colgado cuando corría la macro..

En mi caso, la macro de mi archivo en su tarea abre otros archivos que a su ves estaban vinculados a otros.

Tomando en cuenta que cuando abres un archivo con una macro, el archivo al que abres ya tiene guardado el ultimo cambio que se le hizo, entonces no es necesario actualizar los vínculos.

verifica si la ruta que tiene tu código, abre un archivo, y al abrir tiene al final esta instrucción UpdateLinks:=3, de ser así, cámbiala por esta UpdateLinks:=0, es decir el 3 (tres) reemplázalo por el 0 (cero).



Regresar
COMO SUMAR EN EXCEL

Para sumar en excel lo podemos hacer de dos maneras

1-Sumar celda por celda

2-Sumar un rango de datos con l función SUMA (SUM)

La primera y mas sencilla es simplemente anteponer el signo de = o +, poner la dirección de celda a sumar, poner el sigo de + y poner la otra dirección de celda a sumar.

Ejemplo:

En la celda a2 ponemos 45, en la a3 ponemos 15, en la a4 ponemos 10, si tomamos una calculadora y sumamos 45+15+10 el resultado es 70, ahora bien, en la celda a6 ponemos

=a2+a3+a4

El resultado dara 70

La segunda y mas usual es utilizando la funcion SUMA (SUM)

las SIntaxis eS la siguiente: =suma(rango_de_celdas)

Ejemplo:

para sumar el rango de celda la a2 a la a4, en la celda a6 ponemos

=suma(a2:a4)

el resultado sera 70




Regresar
COMO SUMAR CON UNA CONDICION EN EXCEL UTILIZANDO LA FUNCION SUMAR.SI (SUMIF)

Para sumar con una condición en excel utilizamos la función sumar.si (sumif).

Ejemplo:

Supongamos que la siguiente tabla son la columna A y la columna B de nuestra hoja de calculo.

VER EJEMPLO



En la celda d2 ponemos la siguiente formula

=sumar.si(a2:a7,100,b2:b7)

El resultado sera 105, es decir suma los importes de la columna B en donde los códigos de cliente de la columna A son igual a 100




Regresar
COMO CONTAR EN EXCEL CON LAS FUNCIONES CONTAR (COUNT), CONTARA (COUNTA) Y CONTAR.BLANCO (COUNTBLANCK)

Antes que nada debemos de explicar la diferencia entre estas tres funciones de excel que parece que desarrollan lo mismo pero no es asi

Función CONTAR (COUNT)

Sintaxis =contar(rango)

Definición.-Función de excel utilizada para contar las celda con números en un rango de celdas.

Función CONTARA (COUNTA)

Sintaxis =contara(rango)

Definición.-Función que sirve para contar las celdas no vacias en un rango de datos

Función CONTAR.BLANCO (COUNTBLANCK

Sintaxis =contar.blanco(rango)

Definición.-Función que sirve para contar las celdas vacias en un rango de datos

VER EJEMPLO



Suponiendo que la tabla anterior es la columna A y la columna B, tenemos datos desde la celda a2 hasta la celdas a7, si nos fijamos en el rango a2:a7 las celdas con datos son 4, las celdas con números son 3 y las celdas en blanco son 2.

ahora bien en la celda d2 ponemos =contar(a2:a7) Resultado = 3

en la celda d3 ponemos =contara(a2:a7) Resultado = 4

en la celda d4 ponemos =contar.blanco(a2:a7) Resultado = 2




Regresar
COMO CONTAR CON UNA CONDICION CON LA FUNCION CONTAR.SI (COUNTIF)

Esta función es muy parecida a la función sumar.si, la diferencia es que una cuenta y la otra suma en un rango de datos.

Sintaxis: =contar.si(rango_criterios,condición,rango_suma)

VER EJEMPLO



Suponiendo que la tabla anterior, son las culumnas A y B de nuestra hoja de calculo, vamos a contar las celdas de la columna B en donde el valor en la columna A es 100

en la celda d2 ponemos =contar.si(a2:a7,100) Resultado = 2




Regresar
COMO USAR LA FUNCION SI (IF) EN EXCEL

La función si, en ingles if la utilizamos para comparar valores logicos falso o verdadero segun el criterio a comparar

VER EJEMPLO



En este ejemplo supongamos que la fecha actual del sistema es 07/09/11, entondes en la celda c2 ponemos:

=si(a2>=hoy(),"No","Si") Resultado en las celdas c2, c3, c4 y c7 sera No y en la celdas c5 y c6 sera Si.