Formulario de Alerta y Envío de Mail




En macro que envía mails se trató el tema sobre como enviar mail con Excel usando, Gmail, Hotmail o Yahoo, en dicho post había un listado de casillas de correo a las cuales había que enviarles un correo electrónico; para ello se usaba un bucle que recorre desde la fila inicial a la final, en cada recorrido envía un mails a los  distintos destinatarios que están en la fila respectiva,  es una Macro de Excel realizada en VBA que da solución a un sin numero de lectores que buscan poder enviar mails desde Excel.

En este post te presento un ejemplo de macro que es bastante útil cuando se  pretende que en el Libro de Excel,  salga un AVISO sobre algún evento  dependiendo de una fecha de realización o ejecución de determinada acción, básicamente esta Macro de Excel corre un formulario dando un AVISO y posteriormente ENVIANDO UN MAIL al destinatario del aviso, el cual se debe configurar en la respectiva función, tema que veremos antes de finalizar el post. Haciendo click en  la imagen podrás agrandarla y ver una primera impresión del libro.

En este blog se publicó una variante de macro que emite aviso y envía mail, es más común que la presentada aquí ya que recorre las filas verifica la fecha de service, emite aviso y manda mail con Excel, sugiero que veas este articulo ya que puede que se adapte a lo que necesitas.

En el libro de Excel se tienen una serie de fechas, que representan la fecha límite para realizar una acción determinada, la columna G tiene la fecha de realización de la tarea  mencionada; en la columna B se encuentra las distintas secciones que debe recorrer un producto.

Al abrir el libro de Excel primero se ejecuta un procedimiento de VBA  que se  encuentra en ThisWorkbook, está línea de código llama a otro procedimiento que se encuentra en  el Módulo 1, el cual determina en cada fila si la fecha de la columna F, es 30 días anterior a la fecha de Sistema y si la Columna G está vacía; en caso que la respuesta sea Verdadera; procede a mostrar el UserForm1, cuya programación  interna consiste en que el formulario esté 5 segundos y se cierre solo, posterior a ello se llama la función que envía mails, esto se  hace con cada una de las filas que contenga datos del departamento  en cuestión.

Es necesario hacer algunas consideraciones sobre la configuración de la PC; primero, para que funcione, el envío de mails, se debe agregar una referencia en el Editor de Visual Basic  que es Microsoft CDO for Windows 2000 Library, haciendo click en la imagen siguiente, se podrá observar  con más lujos de detalle, la referencia que se debe agregar para que se puedan envíar mails desde Excel.

Bien configurado esto, viene el otro paso  para que se puedan enviar mails con  Excel y no salte error; la función que envía mail está  por defecto  configurada para Gmail, no obstante se agrega en forma de comentario ( ' apostrofe), el servidor Smtp de Yahoo y Hotmail, que son  los correos más populares, si no se tiene estos correos, se puede probar con otros y configurar servidor Smtp y el puerto de salida, lo cual dejaría enviar mails y no daría errores.

El servidor Smtp  de Google  es  "smtp.gmail.com"; el de Hotmail es "smtp.live.com" y el de Yahoo es: "out.izymail.com"; en el caso que se  tuviera una modificación, se debe buscar en google cual es el servidor smpt y puerto del correo que estemos usando.

Una vez finalizado el paso anterior, se  deben  realizar otras modificaciones y de esta manera estar condiciones de enviar mails, se debe colocar el nombre de usuario y clave del correo que envía los mails; como así también cual es el mail de origen, cual el de destino. Seguidamente se muestra los códigos utilizados.




  

Antes de continuar, recomiendo que leas un excelente libro sobre Excel el que te ayudará operar las planillas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

Código que se inserta en ThisWorkbook del libro  de Excel, descarga el ejemplo desde el link del final para verlo en funcionamiento.



Private Sub Workbook_Open()
Call Aviso
End Sub

Código que se inserta en un módulo
Public msj As String
Sub Aviso()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
If SheeAts("Ejecu").Cells(5, 7) = Empty And Sheets("Ejecu").Cells(5, 6).Value - 30 <= Date Then
msj = "Recolección 1"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(6, 7) = Empty And Sheets("Ejecu").Cells(6, 6).Value - 30 <= Date Then
msj = "Recolección 2"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(9, 7) = Empty And Sheets("Ejecu").Cells(9, 6).Value - 30 <= Date Then
msj = "Limpieza 5"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(10, 7) = Empty And Sheets("Ejecu").Cells(10, 6).Value - 30 <= Date Then
msj = "Separado 6"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(11, 7) = Empty And Sheets("Ejecu").Cells(11, 6).Value - 30 <= Date Then
msj = "Secado 7"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(12, 7) = Empty And Sheets("Ejecu").Cells(12, 6).Value - 30 <= Date Then
msj = "Embolsado 8"
UserForm1.Show
Sdm = SendMail_mail()
End If
If Sheets("Ejecu").Cells(13, 7) = Empty And Sheets("Ejecu").Cells(13, 6).Value - 30 <= Date Then
msj = "Etiquetado 9"
UserForm1.Show
Sdm = SendMail_mail()
End If
Application.DisplayAlerts = False
Application.ScreenUpdating = True
End Sub



Código que se inserta en un formulario

Private Sub UserForm_Activate()
Tpo = "00:00:02"
Label1.Font = arial
Label1.Font.Size = 18
Label1.Caption = msj
Application.Wait Now + TimeValue(Tpo)
UserForm1.Hide
End Sub


Código que se inserta en un módulo, es la función que envía mails

Function SendMail_mail() As Boolean
'Dimensiono variables
Dim Email As CDO.Message
Dim Autentificion As Boolean
'Creo el objeto email
Set Email = New CDO.Message
'Ponemos datos del servidor a usar
Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com" 'Gmail
'Email.Configuration.Fields(cdoSMTPServer) = "smtp.live.com" 'hotmail
'Email.Configuration.Fields(cdoSMTPServer) = "out.izymail.com" 'yahoo
Email.Configuration.Fields(cdoSendUsingMethod) = 2
'Indicamos el número de puerto smtp
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465) 'gmail
'Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(25) 'hotmail
'Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(25) 'yahoo
'Decimos si requiere o no autentificación 1 requiere, 0 no requiere
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/" & "configuration/smtpauthenticate") = Abs(1)
'Segundos de espera
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
'Definición de verdadero para la autentificación
Autentificacion = True
'Configuramos el ingreso al mail
If Autentificacion Then
    'nombre de usuario
    Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "mimail@gmail.com"
    'password
    Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "miclave"
    'si el servidor utiliza SSL (secure socket layer). en gmail: True
    Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
End If
' Una vez configurado nuestro servidor de correo tomados datos de excel para enviar el mail
    'Correo del destinatario
    Email.To = "emaildestino@yahoo.com"
    'Dirección del remitente
    Email.From = "emailremitente@gmail.com"
   ' Asunto
    Email.Subject = msj
   ' Mensaje
    Email.TextBody = "Faltan pocos días hasta la fecha de realización de " & msj
  
   'Actualizamos datos antes del envio
    Email.Configuration.Fields.Update
   'Controlo errores
   On Error Resume Next
   'enviamos propiamente el mail
    Email.Send
    'Si no hay errores la funcion es verdadero
    If Err.Number = 0 Then
       SendMail_Gmail = True
    Else
     'Sale msgbox con descripción del error
       MsgBox "Se produjo el siguiente error: " & Err.Description, vbCritical, "Error nro " & Err.Number
   End If
   'Borro los objetos
    If Not Email Is Nothing Then
       Set Email = Nothing
    End If
    'Controlo errores
    On Error GoTo 0
End Function







Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.



If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Vivir el mañana








Lo más visto:
MASTERCARD PAYONEER
  1. Llenar combobox y buscar datos
  2. Formulario solicita password para ejecutar macro
  3. Llenar listbox de varias columnas con datos variables dependiendo de combobox
  4. Formulario con textbox que insertan datos en celdas
  5. Forma de seleccionar o hacer referencia a celdas, rangos y hojas



Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Macro de Excel que abre libros, extrae información y crea archivo Csv

En un foro me preguntan como se hace una Macro de Excel para extraer datos de varios archivos, en el caso planteado eran al  rededor de 50 archivos de los que se deseaba sacar información, lo cual realizarlo a mano demandaría muchísimo tiempo y esfuerzo; en el ejemplo que se presenta se ha reducido el número de archivos a 12, pero no inválida en nada la macro ya que se puede usar para uno, cien o los archivos necesarios de los cuales extraer información.

Primero se establece cual es el nombre del archivo actual, variable que se usa luego en la macro; una vez determinado y asignado a una variable el  nombre del archivo actual; se procede a realizar un bucle con los comandos For.....Next i; el cual tiene como objeto abrir todos los archivos que se le asignan a la macro, en este caso son 12 los archivos, pero pueden 1, 100 o más; luego mediante cadenas de texto  se forma el path del archivo, es decir donde se va guardar el archivo Csv generado; por último se adiciona una hoja nueva, estableciéndose el nombre de la hoja, se guarda y cierra el libro; para poder ver el funcionamiento de ejemplo aquí presentado, se debe descargar el archivo rar; descomprimirlo en alguna carpeta y luego copiar la dirección donde se guardaron los archivos, en la macro; se debe cambiar la dirección que figura, por la dirección de la carpeta donde quedaron los archivos descargados.


La macro realizada, tiene una estrecha relación con esta otra que  copia los datos, luego abre el libro necesario, pega los datos para luego cerrar el libro, también está vinculada a la macro publicada ya hace un tiempo, la cual crea carpetas utilizando variables  y guarda los archivos en pdf cuyos nombres se han formado mediante cadenas de texto que se asignan a variables.

El post guarda excel automáticamente cada minuto, se incorpora un ejemplo de VBA que tiene cierta relación y se complementa con el actual, ya que se crea un procedimiento de VBA bastante interesante, guardando automáticamente el libro cada minuto para evitar pérdida de información, lo cual hace una macro muy útil.

Si tu intención es profundizar más en el manejo de Excel te  recomiendo que leas un excelente libro sobre Excel el que te ayudará manejar las planillas de cálculo, debes hacer click acá.

Código que se inserta en un formulario, haz click para descargar el archivo de ejemplo.
 Private Sub openfile()
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim na, cp, nomlib As String
Dim hojaactual As Object
'Establece nombe del archivo
nomlib = ActiveWorkbook.Name

For i = 1 To 12
p = "C:\Users\MyNotebook\Documents\Mis eBooks\MIS MACROS\Publicadas"
If i < 10 Then
na = "Vest#0" & i & ".xlsx"
Else
na = "Vest#" & i & ".xlsx"
End If
cp = p & "\" & na
Application.Workbooks.Open cp
'Copia datos
Range("b3:b22").Select
Selection.Copy
Workbooks(nomlib).Activate
Range("XDF3").End(xlToLeft).Activate
ActiveCell.Offset(0, 1).Activate
Selection.PasteSpecial Paste:=xlValues
Workbooks(na).Close False
Next i
'Guarda y Cierra Libro Csv
Cells.Select
Selection.Copy
Workbooks.Add
Cells.Select
ActiveSheet.Paste
nomcsv = "VtasTotales.csv"
pcsv = p & "\" & nomcsv
ActiveWorkbook.SaveAs Filename:=pcsv, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub







Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Llenar combobox y copiar datos en celda de hoja de Excel




En combobox incrustado en hoja de Excel se muestra como incrustar un combobox  en la hoja de Excel y seleccionar ítems desde el mismo, en este ejemplo la Macro realizada en VBA ejecuta un procedimiento sencillo, pero útil para comprender como copiar los datos del combo box a una celda de la hoja de Excel.

Al descargar el archivo, se podrá observar dos hojas, haciendo click en la imagen se  podrá ver su aspecto; una llamada Factura y otra llamada Clientes, la primer hoja tiene un espacio para cargar datos de productos, es una forma muy simplificada de una factura, en su parte superior se encuentra un botón el cual llama a un formulario, este formulario consta de un combobox y dos CommandButton o botones de comando, con un botón se cierra el formulario y con el otro se acepta el dato seleccionado en el combobox, el cual se copia automáticamente en la celda destinada a ingresar el nombre del cliente, luego de ello el formulario se oculta, en caso que se acepte y el combobox esté vacío, sale un msgbox indicando que se debe cargar un dato previamente. 
En este Blog hay varios post relacionados  con la búsqueda de datos a través de Macros de Excel o Procedimientos de VBA en el post buscar datos en tres columnas; si  quieres más ejemplos sobre como buscar datos deberías ver  como buscar datos en todas las filas  en base  a criterios. Si visitas el mapsite de este sitio,  podrás buscar en el índice del blog y descargar el ejemplo que necesites. 


En el post anterior combobox incrustado en hoja de Excel se explicaba en detalle como incrustar un combobox  en la hoja de Excel y seleccionar ítems desde el mismo, en este otro ejemplo la Macro realizada en VBA ejecuta un procedimiento muy similar, con la variante que en vez de estar incrustado en la hoja de Excel, el combobox está en un formulario, a lo que se agrega que se puede seleccionar el archivo donde buscar. Si bien hacen diferentes procedimientos en ambos se trabaja con combo box, lo cual sugiero que veas para comprender en forma más acabada  su uso.
Para finalizar te  recomiendo que leas un excelente libro sobre Excel el que te ayudará manejar las planillas de cálculo, debes hacer click acá.

Código que se inserta en un formulario, haz click para descargar el archivo de ejemplo
 
Private Sub CommandButton1_Click()
If ComboBox1 = Empty Then
MsgBox ("Se requiere que seleccione un nombre"), vbCritical, "AVISO"
ComboBox1.SetFocus
Exit Sub
End If
Sheets("Factura").Cells(2, 2) = ComboBox1
Unload Me
Sheets("Factura").Select
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
ComboBox1.Clear
Sheets("Clientes").Select
Range("A2").Select
While ActiveCell <> Empty
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Wend
End Sub


Código que se inserta en un módulo

Sub muestraform()
UserForm1.Show
End Sub







Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Recorre fila buscando y comparando datos de dos columnas en hojas distintas

Buscar datos en una necesidad en toda base de datos, son bastantes las macros que se dedican a ello con todas las variantes posibles que dependen de cada proyecto en especial, básicamente lo que se hace es un bucle que recorra la fila inicial hasta la última fila con datos; me preguntan en un foro sobre como buscar datos en dos hojas diferentes y copiar los datos coincidentes en la primer hoja, la variante es que para que coincidan los datos, debe haber coincidencia de datos en dos columnas de la hoja1 con dos columnas de la hoja.

Como se dijo, el fin de  la macro es buscar datos coincidentes, para lleva a cabo este proceso, se concatena las dos columnas que brindan el criterio por el cual se debe buscar, de esta manera, se vuelca en una variable dicho dato; lo mismo se hace con los datos de la hoja en donde se deben buscar los datos, procediendo a echar manos a un bucle mediante While ... Wend, una vez encontrados los datos, estos son expuestos en la columna A, dejando en blanco obviamente la fila con los datos que no se hayan encontrado en  la hoja dos.

Existen otros post relacionados con la búsqueda de datos, la diferencia es que en combobox incrustado en hoja de Excel, los datos a buscar son seleccionados mediante un combobox, en el post mencionado se explicaba en detalle como incrustar un combobox  en la hoja de Excel y seleccionar ítems desde el mismo, acá existe una variante echando manos a un userform, la Macro realizada en VBA ejecuta un procedimiento muy similar, con la variante que en vez de estar incrustado en la hoja de Excel, el combobox está en un formulario, a lo que se agrega que se puede seleccionar el archivo donde buscar los datos.
 
Un libro sobre Excel que creo que te puede ayudar a comprender y  manejar las planillas de cálculo, lo encontrarás en el siguiente link, click acá.


Si buscas en el blog te encontrarás con varios procedimientos de VBA relacionados con la búsqueda de datos a través de Macros de Excel; el post buscar datos en tres columnas muestra como tratar y buscar los datos de tres columnas a comparar; si  quieres más ejemplos sobre como buscar datos  te aconsejo ver  el ejemplo de macro sobre como buscar datos en todas las filas  en base  a criterios, ingresando al menú mapsite de este sitio,  encontrarás un listado de todos los procedimientos que están disponibles para descargar y ver su funcionamiento o adaptar a lo que se requiera para llevar a cabo las macros de Excel que se estén realizando.

Código que se debe ingresar en un módulo, desde el link podrás descargar el ejemplo

Sub BuscaDatosCoicidentes()
Application.ScreenUpdating = False
Dim fila, fila1, conta As String
Dim d1, d2, d3, d4 As String
Dim con1, con2 As String
fila = 2
fila1 = 2
conta = 0

Sheets("Hoja1").Select
While Sheets("Hoja1").Cells(fila, 2) <> Empty
d1 = Sheets("Hoja1").Cells(fila, 2).Value
d2 = Sheets("Hoja1").Cells(fila, 3).Value
con1 = d1 & d2
  
    While Sheets("Hoja2").Cells(fila1, 1) <> Empty And conta = 0
    d3 = Sheets("Hoja2").Cells(fila1, 1).Value
    d4 = Sheets("Hoja2").Cells(fila1, 2).Value
    con2 = d3 & d4
   
        If con1 = con2 Then
            Sheets("Hoja1").Cells(fila, 1) = Sheets("Hoja2").Cells(fila1, 1)
            conta = 1
        Else
        fila1 = fila1 + 1
        End If
   
    Wend
conta = 0
fila1 = 2
fila = fila + 1
Wend
Application.ScreenUpdating = False
End Sub








Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      


Serán reales







Humor Gráfico

Lo más visto:
MASTERCARD PAYONEER
  1. Convertir Número a Letra en Excel
  2. Macro que envía mail y emite formulario de aviso
  3. Calcular saldo entre fecha y fecha
  4. Llenar combobox y sumar datos repetidos
  5. Forma de seleccionar o hacer referencia a celdas, rangos y hojas




Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Llenar Combobox y sumar datos repetidos




En el post anterior combobox incrustado en hoja de Excel se explicaba en detalle como incrustar un combobox  en la hoja de Excel y seleccionar ítems desde el mismo, en esta oportunidad la Macro realizada en VBA ejecuta un procedimiento muy similar, con la variante que en vez de estar incrustado en la hoja de Excel, el combobox está en un formulario, a lo que se agrega que se puede seleccionar el archivo donde buscar.

En este  ejemplo de macro de Excel o procedimiento de VBA para Excel, se ejemplifica como llenar un combobox insertado en un formulario o userform de VBA, seleccionado el ítems del combo box, previo hacer  una serie de verificaciones, como por ejemplo que el otro combobox del formulario no esté vacío, en ese caso sale un mensaje, y se termina el procedimiento hasta tanto no se seleccione los datos solicitados. Haciendo click en la imágen se observa una vista previa del formulario que contiene los procedimientos de VBA o macros para Excel.

Una vez seleccionado el dato correspondiente, el nombre a buscar, se debe seleccionar el archivo donde buscar, siendo importante cargar la dirección correcta en la hoja archivo, ya que de ahí toma el formulario la dirección del fichero donde buscar los datos. Una vez seleccionados los datos el código realiza un bucle con el comando For ... Next recorre las filas  desde la fila dos hasta la última fila con datos, guardada en la variable uf; para luego contar la cantidad de veces  que una persona cumplió un rol determinado, una vez seleccionado el nombre en el Combobox, se corre una macro que compara el nombre seleccionado con el nombre de la columna F, como así también el nombre de la columna G, pero que a su vez sea igual con el rol cumplido y que está indicado en la columna S1, T1 y U1.

Determinado si el dato verdadero suma en la variable correspondiente acumulando, en caso de ser falso sigue con la próxima columna y así hasta terminar con la totalidad de datos con valores. Los valores obtenidos son expuestos en caso de buscar en el archivo 1 (archivo donde está la  macro), en la fila dos desde la columna S a la T; en caso de buscar en el archivo 2 ( archivo Anexo) los datos se registran en la fila 3  también en las columnas S a la T.
 

Para ver el  ejemplo en funcionamiento se deben descargar los dos archivos tanto el que tiene la macro como el auxiliar donde busca los datos, para descargar los archivos debes hacer click en  el link,  bajar el archivo uno y aquí para bajar el archivo dos, los archivos debes guardarlos en tu PC, y en la hoja archivo del ejemplo debes guardar a partir de la celda A2 la dirección exacta que tiene en tu PC, para que la macro pueda buscar y no se produzcan errores.

Para finalizar con el presente ejemplo te  recomiendo que leas un excelente libro sobre Excel el que te ayudará manejar las planillas de cálculo, debes hacer click acá.


También te aconsejo que leas el post Llenar combobox y buscar datos, si estás interesado en saber más en detalle, ver como funciona un combobox o adaptarlo a un proyecto similar que estés desarrollando, como decía está muy relacionado con lo aquí expuesto.

 
Código que se debe insertar en el formulario :
 
 
Public nomlibro, dire, dire1, p As String
Private Sub ComboBox1_Change()
Range("r2:u3") = ClearContents
If ComboBox2 = Empty Then
MsgBox ("Debe seleccionar Nombre"), vbInformation, "AVISO"
ComboBox2.SetFocus
Exit Sub
End If
ComboBox2_Change
End Sub
Private Sub ComboBox2_Change()
On Error Resume Next
Application.ScreenUpdating = False
Dim uf, ufcat, filadir, filacat, contad, contap, contadc, contamc As Integer
Range("r2:u3") = ClearContents
If ComboBox1 = Empty Then
MsgBox ("Debe seleccionar Nombre"), vbInformation, "AVISO"
ComboBox1.SetFocus
Exit Sub
End If
dire = ComboBox2
nomlibro = ActiveWorkbook.Name
p = ActiveWorkbook.Path
dire1 = p & "\" & nomlibro

If dire = dire1 Then
        TextBox1 = Clear
        TextBox2 = Clear
        TextBox3 = Clear
        TextBox4 = Clear
       
       
        contad = 0
        contap = 0
        contadc = 0
        contamc = 0
        perfind = ComboBox1
        ufcat = Sheets("Proyectos").Range("H" & Rows.Count).End(xlUp).Row
       
        For i = 2 To ufcat
        a = Sheets("Proyectos").Cells(i, 6)
        If a = perfind Then contad = contad + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 19) Then contap = contap + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 20) Then contadc = contadc + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 21) Then contamc = contamc + 1
        Next i
       
        If nomlibro <> dire Then
        Sheets("Proyectos").Cells(2, 18) = contad
        Sheets("Proyectos").Cells(2, 19) = contap
        Sheets("Proyectos").Cells(2, 20) = contadc
        Sheets("Proyectos").Cells(2, 21) = contamc
       
        Else
       
        Sheets("Proyectos").Cells(3, 18) = contad
        Sheets("Proyectos").Cells(3, 19) = contap
        Sheets("Proyectos").Cells(3, 20) = contadc
        Sheets("Proyectos").Cells(3, 21) = contamc
        End If
       
        TextBox1 = contad
        TextBox2 = contap
        TextBox3 = contadc
        TextBox4 = contamc
Else
  Application.Workbooks.Open dire
  Sheets("Proyectos").Select
        TextBox1 = Clear
        TextBox2 = Clear
        TextBox3 = Clear
        TextBox4 = Clear
           
        contad = 0
        contap = 0
        contadc = 0
        contamc = 0
       
        perfind = ComboBox1
        ufcat = Sheets("Proyectos").Range("H" & Rows.Count).End(xlUp).Row
       
        For i = 2 To ufcat
        a = Sheets("Proyectos").Cells(i, 6)
        If a = perfind Then contad = contad + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 19) Then contap = contap + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 20) Then contadc = contadc + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 21) Then contamc = contamc + 1
        Next i
       
        If dire = dire1 Then
        Sheets("Proyectos").Cells(2, 18) = contad
        Sheets("Proyectos").Cells(2, 19) = contap
        Sheets("Proyectos").Cells(2, 20) = contadc
        Sheets("Proyectos").Cells(2, 21) = contamc
       
        Else
        ActiveWorkbook.Close False
        Sheets("Proyectos").Cells(3, 18) = contad
        Sheets("Proyectos").Cells(3, 19) = contap
        Sheets("Proyectos").Cells(3, 20) = contadc
        Sheets("Proyectos").Cells(3, 21) = contamc
        End If
       
        TextBox1 = contad
        TextBox2 = contap
        TextBox3 = contadc
        TextBox4 = contamc
End If
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
ComboBox1.Clear
Sheets("Nom").Select
Range("A2").Select
While ActiveCell <> Empty
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Wend
ComboBox2.Clear
Sheets("Archivo").Select
Range("A2").Select
While ActiveCell <> Empty
ComboBox2.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Wend
Sheets("Proyectos").Select
Application.ScreenUpdating = True
End Sub

Código a insertar en un módulo

Sub cargaform()
UserForm1.Show
End Sub






Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Control ActiveX Combobox Incrustado en Hoja de Excel


Al igual que en el post Llenar combobox y buscar datos aquí les muestro algo parecido pero sin formularios, ya que muchas veces es necesario tener en la misma hoja de Excel un combobox incrustado, llamado Control ActiveX, desde el cual se pueda seleccionar nombres o cualquier tipo de datos, para posteriormente realizar una búsqueda de estos datos o  cualquier otra acción que se requiera hacer con lo datos de la hoja de cálculo, en este  ejemplo de macro de Excel o procedimiento de VBA para Excel, te voy a mostrar como se inserta y programa el control para que puedas usarlo en tu libro; si requieres saber sobre como habilitar un control activex dependiendo de criterios mira acá.

Para insertar el control se debe ir al menú programador, si no lo tienes activo debes primero ir al menú  archivo luego a opciones y posteriormente a personalizar cinta de opciones, ahí activas la casilla de programador, una vez hecho esto va a salir en la cinta de opciones o barra de menú, en  la ilustración siguiente se muestra lo dicho, haz click para agrandar la imagen.


Una vez hecho lo mencionado en el párrafo anterior, se debe ir al menú programador y luego controles y por último a insertar, ahí seleccionamos Control ActiveX y elegimos el combo box, luego arrastramos en la hoja de cálculo y se inserta el control seleccionado, la imagen muestra lo mencionado.

Una vez hecho esto, hacemos  doble  click en el control y se abre el editor de VBA, lo que tenemos que hacer acá es copiar el código que está en este post y adaptarlo a lo que necesite cada uno, ya que este código esta adaptado al ejemplo que puedes descargar haciendo click acá.

El código realiza un bucle con el comando For ... Next recorre las filas  desde la fila dos hasta la última fila con datos, guardada en la variable uf; para luego contar la cantidad de veces  que una persona cumplió un rol determinado, una vez seleccionado el nombre en el Combobox, se corre una macro que compara el nombre seleccionado con el nombre de la columna F, como así también el nombre de la columna G, pero que a su vez sea igual con el rol cumplido y que está indicado en la columna S1, T1 y U1.

Determinado si el dato verdadero suma en la variable correspondiente acumulando, en caso de ser falso sigue con la próxima columna y así hasta terminar con la totalidad de datos con valores.
Te recomiendo que leas un excelente libro sobre Excel el que te ayudará manejar las planillas de cálculo, debes hacer click acá.
  
Código que se debe insertar en la programación del Control ActiveX Combobox:
Private Sub ComboBox1_Change()
Dim uf, ufcat, filadir, filacat, contad, contap, contadc, contamc As Integer
contad = 0
contap = 0
contadc = 0
contamc = 0
'Obtiene datos para llenar el combo box
uf = Sheets("Proyectos").Range("Z" & Rows.Count).End(xlUp).Row
listado = "Z2:Z" & uf
ComboBox1.ListFillRange = listado
perfind = ComboBox1
ufcat = Sheets("Proyectos").Range("H" & Rows.Count).End(xlUp).Row
For i = 2 To ufcat
a = Sheets("Proyectos").Cells(i, 6)
If a = perfind Then contad = contad + 1
If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 19) Then contap = contap + 1
If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 20) Then contadc = contadc + 1
If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 21) Then contamc = contamc + 1
Next i

Sheets("Proyectos").Cells(2, 18) = contad
Sheets("Proyectos").Cells(2, 19) = contap
Sheets("Proyectos").Cells(2, 20) = contadc
Sheets("Proyectos").Cells(2, 21) = contamc
End Sub






Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Glosario de palabras usadas en VBA y su traducción




En este tutorial te voy a presentar las palabras más usadas en VBA a la hora de programar macros de Excel con VBA y su traducción al Español, ya que la programación en VBA es íntegramente en inglés; estas palabras hacen referencia a objetos, propiedades, eventos, acciones, etc.; lo cual es importante y más que necesario saber; en el cuadro siguiente se presenta un glosario de palabras más usadas cuando se programa alguna macro de Excel en VBA
 

 
 
 
 
 
 
GLOSARIO DE PROGRAMACIÓN EN VBA Y SU TRADUCCIÓN AL ESPAÑOL
Inglés Español Descripción - Se utiliza en:
active activo Libro u hoja activa
activeSheet hoja activa Hoja activa
activeWorkBook libro activo Libro activo
activeWorkSheet hoja activa Hoja activa
add agregar Método para agregar libros, hojas, controles, ... 
address dirección Para obtener la dirección de una celda
book - workbook libro Libro Excel - 
books- workbooks libros Conjunto de libros Excel
cell celda Celda -  Sintaxis: Cell(fila, col)
cells celdas Celdas
change cambio Evento de hoja o de controles: Private Sub Worksheet_Change
chart gráfico gráfico 
clear borrar o limpiar Método para limpiar celdas o rangos: Range(miRango).Clear
column columna columna
columns columnas columnas
copy copiar copiado de hojas o rangos
currentRegion región actual Rango delimitado por filas y columnas vacías
delete eliminar eliminar objetos, celdas, rangos…
disable desactivar Ej: Application.EnableCancelKey = xlDisabled
edit edición Editar
enabled activar Se utiliza para indicar si un control está activo para recibir el enfoque
end fin Ej: End Sub
entireColumn columna entera Se utiliza para seleccionar una columna completa
entireRow fila entera Se utiliza para seleccionar una fila completa
excecute ejecutar Se utiliza para seleccionar una fila completa
find buscar En funciones Buscar
find next buscar siguiente En funciones Buscar
font fuente - tipo de letra propiedad de las celdas o controles cuadros de texto
foot pie En instrucciones que definen el pie de página
forms-Userforms formulario Userforms son formularios creados en el Editor 
function función Funciones definidas por usuario 
getting obtener - obteniendo instrucciones de búsqueda de archivos en directorio
goto ir a  instrucciones de bifurcación
hasFormula tiene fórmula Se utiliza para consultar si una celda tiene o no fórmula
help ayuda instrucciones que llaman a un archivo de ayuda
hidde ocultar Para ocultar hojas, celdas
index número de índice Se utiliza para hacer referencia al número de libro u hoja.
initialize inicializar Inicializa Userforms
insert insertar Insertar objetos, hojas, celdas, …
kill eliminar Eliminar archivos de directorio
large largo propiedad de controles
left izquierda función- Propiedad de ubicación de controles
load cargar Userforms, imágenes….
merge combinar Combinar celdas
mind encontrar En fórmulas
name nombre nombre de libro, hoja u objeto
next siguiente Se utiliza en búsqueda de datos, hojas , celdas….
offset desplazamiento Se utiliza para hacer referencia a una celda desplazada.
open abrir para abrir libros
password clave Contraseña o clave de libro
paste pegar Acción del menú Edición, Pegar
pasteSpecial pegado especial Acción del menú Edición, Pegado Especial
path dirección dirección o ruta de archivos
picture imagen imagen
pivotTable tabla dinámica tabla dinámica
private privado Ej: Private Sub Worksheet_Activate
protect proteger Se utiliza para proteger hoja o libro
public publico Ej: Public miVariable as String
range rango rango : conjunto de celdas
record registro conjunto de celdas de una fila
rename renombrar Renombrar
resize cambiar de tamaño Se utiliza para extender o cambiar el tamaño de un rango seleccionado
row fila fila de una hoja
rows filas filas 
save guardar guardar libro
screenUpdating actualización de pantalla Se establece en True o false para evitar el parpadeo al cambiar de pantalla.
scrollbars barras de desplazamiento Se utiliza para indicar la ubicación y desplazamiento de las barras
select - selection selección Selección
set establecer, crear Ej: Set busca = Range(miRango).Find(queBusco)…
setting estableciendo Ej: establecer un valor en registro de Windows
sheet -worksheet hoja Hoja de cálculo
sheets-worksheets hojas Conjunto de hojas de un libro
sort ordenar ordenar rangos
toolbar barra de herramienta se utiliza para crear o llamar una barra de herramienta
unprotect desproteger Se utiliza para desproteger hoja o libro
 
 

Te recomiendo que leas un excelente libro sobre Excel el que te ayudará manejar las planillas de cálculo, debes hacer click acá.
  




Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends