PROGRAMAR EN VBA MACROS PARA EXCEL: mayo 2013

Crea carpetas y guarda archivo con nombre variable en PDF

Esta macro de Excel o procedimiento de VBA, se encuentra muy relacionado con la macro que abre libros y posteriormente copia los datos y lo guarda en Csv; la macro que se presenta hoy, crea una carpeta con el nombre del año actual, previamente verifica si la carpteta existe o no,  en caso de no existir la crea, una vez realizado esto; verifica en la carpeta creada o ya existente si se encuentra dentro de ella una subcarpeta con el nombre del mes actual; en caso de no existir la crea, en caso de existir, verifica dentro de esta, si existen carpetas con el nombre de cada una de las sucursales de la empresa, en caso negativo crea la carpeta correspondiente  a cada sucursal o consolidado si se refiere  a la suma de todas las sucursales.

Si bien lo anterior es una parte importante de la macro, no menos importante es la forma de crear el nombre del archivo, el cual es variable, dependiendo de los datos que estemos filtrando en ese momento, ya sea de distintos departamentos o de años anteriores, una vez seleccionados estos datos, se corre la macro que otorga el nombre al libro, llamando al procedimiento explicado en párrafo anterior para determinar la carpeta donde guardar el archivo que es guardado en PDF. En el post copia datos abre otro libro y pega datos, también se puede observar como se trabaja con los distintos directorios donde se encuentran los archivos.
Te recomiendo que leas un excelente libro sobre Excel para ello haz click acá, si quieres un libro sobre Excel, en inglés, entonces debes hacer click acá.

El código que se encuentra a continuación se debe ingresar en un modulo, descargando el ejemplo lo podrás ver en funcionamiento, analizar, modificar y adaptar a lo que tú estés realizando el código está abierto sin ningún tipo de restricción.


Código a insertar en módulo, haciendo click en el link del final podrás descargar el archivo ejemplo

Private Sub BuscayCreaCarpeta()
Dim mes1 As String
Dim mes, año As Integer
'Estabezco si la carpeta existe
año = Year(Date)
mes = Month(Date)
'Determino el nombre de la subcarpeta que va dentro de la carpeta año, hay que tener en cuenta que los informes se
'sacan al mes siguiente, en caso de ser diciembre debería tenerse en cuenta que se saca en enero del año que sigue
'por ende el directorio donde se guardan los datos es el del año anterior que ya está en teoría creado.
'Se pone como nombre de mes el anterior al mes actual, ya que los informes se sacan el mes siguiente
Select Case mes
Case 1
mes1 = "Dic"
Case 2
mes1 = "Ene"
Case 3
mes1 = "Feb"
Case 4
mes1 = "Mar"
Case 5
mes1 = "Abr"
Case 6
mes1 = "May"
Case 7
mes1 = "Jun"
Case 8
mes1 = "Jul"
Case 9
mes1 = "Ago"
Case 10
mes1 = "Sep"
Case 11
mes1 = "Oct"
Case 12
mes1 = "Nov"
End Select
'Se establece que si el mes es diciembre el año donde se guarden los archivos es el actual menos 1 osea el anterior
If mes1 = "Dic" Then
año = año - 1
End If
'Verifica que la carpeta con el nombre del año se encuentre caso contrario la crea
Path = "C:\" & año
If Dir(Path, vbDirectory) = "" Then
MkDir Path
End If

'Verifica que la carpeta con el nombre del mes se encuentre caso contrario la crea
path1 = "C:\" & año & "\" & mes1
If Dir(path1, vbDirectory) = "" Then
MkDir path1
End If
'Verifica que la carpeta con el nombre de la sucursal esta dentro mes del informe
path2 = "C:\" & año & "\" & mes1 & "\Consolidado"
If Dir(path2, vbDirectory) = "" Then
MkDir path2
End If
path3 = "C:\" & año & "\" & mes1 & "\CC"
If Dir(path3, vbDirectory) = "" Then
MkDir path3
End If
path4 = "C:\" & año & "\" & mes1 & "\Suc1"
If Dir(path4, vbDirectory) = "" Then
MkDir path4
End If
End Sub

Private Sub guardapdfGXDpto()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Controlo errores
On Error Resume Next
Sheets("Graf_por_dpto").Range("v2").Select
Dim filagrafico, dire As String
Dim nomfile, nomsuc As String
Dim x As Integer
'Establece área de impresión
    Range("b11:j63").Select
    ActiveSheet.PageSetup.PrintArea = Selection.Address
 
filagrafico = 2
'Hace que se realice el informe consolidado y por cada sucursal
For x = 2 To 4
Sheets("Graf_por_dpto").Range("d15") = Sheets("Graf_por_dpto").Cells(x, 25)
'Recorre la filas donde está el nombre de los dtos
While Sheets("Graf_por_dpto").Cells(filagrafico, 22) <> Empty
Sheets("Graf_por_dpto").Range("e16") = Sheets("Graf_por_dpto").Cells(filagrafico, 22)
'corre procedimiento que hace que filtre las otras columnas, es como apretar el boton consultar de la hoja
BuscayCreaCarpeta
'Verifica que los datos para el filtro estén cargados caso contrario carga por defecto
If Sheets("Graf_por_dpto").Range("d15") = Empty Then
Sheets("Graf_por_dpto").Range("d15") = "Todas"
End If
'Determina el nombre del archivo y lo guarda
nomsuc = Sheets("Graf_por_dpto").Range("d15").Value
If nomsuc = "Todas" Then
nomsuc = "consolidado"
End If
'Dependiendo la sucursal elegida determina el path correspondiente
Select Case nomsuc
Case "consolidado"
dire = path2
Case "CC"
dire = path3
Case "Suc1"
dire = path4
End Select
nomfile = "Gráfico Vtas de " & Sheets("Graf_por_dpto").Range("e16").Value & " " & nomsuc
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        dire & "\" & nomfile & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    
filagrafico = filagrafico + 1
Wend
'vuelvo fila al inicio para que siga con la proxima selección
filagrafico = 2
Next x
Range("d15").Select
Application.DisplayAlerts = True
Application.ScreenUpdating = True
       
End Sub

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      

Parecido a mascota






Humor Gráfico


MASTERCARD PAYONEER
  1. Trucos de Excel
  2. Macro que envía mail y emite formulario de aviso
  3. Macro Alerta mediante parpadeo de celda
  4. Glosario de palabras usadas en VBA para Excel
  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      

Busca datos en todas las filas en base a criterios


Esta macro de Excel o procedimiento de VBA, recorre las filas de la hoja de Excel, a los fines de encontrar la palabra "incorrecto", una vez encontrado el dato hace un informe con todos los registros encontrados, adicionando en la última columna el número de fila en la cual está el registro en el padrón de artículos, haz click en el link del final para bajar el ejemplo.

Te recomiendo que leas un excelente libro sobre Excel para ello haz click acá.

El código que se encuentra a continuación se debe ingresar en un módulo, descargando el ejemplo lo podrás ver en funcionamiento, analizar, modificar y adaptar a lo que tú estés realizando el código está abierto sin ningún tipo de restricción.


Código a insertar en módulo

Sub busca()
Application.ScreenUpdating = False
Dim fila, fila1, numfila As Integer
fila = 2
fila1 = 2
Sheets("hoja1").Activate
While Sheets("hoja1").Cells(fila, 6) <> Empty
 If Sheets("hoja1").Cells(fila, 6) = "Incorrecto" Then
    Sheets("hoja1").Cells(fila, 6).Activate
    numfila = ActiveCell.Row
    Sheets("hoja2").Cells(fila1, 1) = Sheets("hoja1").Cells(fila, 1)
    Sheets("hoja2").Cells(fila1, 2) = Sheets("hoja1").Cells(fila, 2)
    Sheets("hoja2").Cells(fila1, 3) = Sheets("hoja1").Cells(fila, 3)
    Sheets("hoja2").Cells(fila1, 4) = Sheets("hoja1").Cells(fila, 4)
    Sheets("hoja2").Cells(fila1, 5) = Sheets("hoja1").Cells(fila, 5)
    Sheets("hoja2").Cells(fila1, 6) = numfila & " Incorrecto"
    fila1 = fila1 + 1
 End If
fila = fila + 1
Wend
Application.ScreenUpdating = True
End Sub




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      

Llenar combobox y buscar datos





Esta macro de Excel o procedimiento de VBA, sirve para mostrar como se pueden buscar datos a través de un formulario, más precisamente a partir datos provenientes de un   combobox,  funciona de la siguiente manera: una vez seleccionado o escrito el dato en el combobox, primero se valida que el combobox no este vacío, caso contrario sale un msgbox advirtiendo esta situación, en caso que se haya ingresado el dato, lo que hace es buscar  el la base de datos el dato coincidente con el textbox, en caso de encontrarlo se posiciona en el registro y pinta la fila de color azul, poniendo como color de fuente rojo; haz click al final del post  para bajar el ejemplo.


Es probable que al usar userform no solo necesites llenar combobox, sino también listbox que es un poco más complejo, pero que se encuentra bien explicado en mi post Llenar listbox de varias columnas con datos variables dependiendo de combobox o quizás te sea más  útil saber como llenar un listbox dependiendo de otro listbox y un combobox a la  vez.

Si te interesa como llenar combobox en un ejemplo más complejo que el presentado en este artículo, deberías ver como calcular el sado entre fecha y fecha, aquí se muestra más en profundidad el uso de combobox, resolviendo un gran problemas para mucho que es el cálculo de saldos entre fecha y fecha.

Antes de seguir recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas 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.


  

El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo formulario que crea un listado de todas las hojas para poder luego seleccionarlasbuscar en listbox mientras escribes en textboxordenar hojas libro excel por su nombreconectar Excel con Access y muchos ejemplos más.






El código que se encuentra a continuación se debe ingresar en un formulario que en el caso del ejemplo lleva el nombre de userform1, descargando el ejemplo lo podrás ver en funcionamiento, analizar, modificar y adaptar a lo que tú estés realizando el código está abierto sin ningún tipo de restricción.


Código a insertar en formulario

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False

Dim c As Object
Sheets("Hoja1").Range("A1:xfd1048576").ClearFormats
If ComboBox1 = Empty Then
MsgBox ("Se requiere que ingrese un valor en Combobox1"), vbCritical, "AVISO"
Exit Sub
End If
dato = ComboBox1.Value
Set c = Sheets("Hoja1").Range("A2: A1048576").Find(dato, LookIn:=xlValues, Lookat:=xlWhole)
If Not c Is Nothing Then
dire = c.Address
Range(dire).Activate
Sheets("hoja1").Range(dire).EntireRow.Select
With Selection
  .Interior.ColorIndex = 5
  .Font.Color = 250
End With
 End If
If c Is Nothing Then
MsgBox ("El dato no existe"), vbCritical, "AVISO"
End If
Application.ScreenUpdating = True
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub


Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
Sheets("hoja1").Cells(2, 1).Select
While ActiveCell <> Empty
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Wend
Application.ScreenUpdating = True
End Sub

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



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

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

Llenar listbox de varias columnas con datos variables dependiendo de combobox





Con esta macro de VBA para Excelprocedimiento de VBA o macro VBA Excel, como se suele denominar, se muestra como llenar un listbox que posee varias columnas, con la complicación que los datos no se encuentra en un rango continuo sino que surgen de una búsqueda de datos, los cuales dependen del valor que se ingrese en el combobox, es decir se selecciona un valor en el combo box, en base a ello se obtienen los datos, una vez que se encontraron los mismos se cargan al listbox, éste tiene varias columnas en el caso del ejemplo 5;  haz click al final de post para bajar el ejemplo.

El ejemplo  que se presenta aquí tiene una estrecha relación con la macro VBA for Excel, publicada en mi otro post que trata  sobre como llenar un listbox dependiendo de otro listbox y combobox





  

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.

El código que se encuentra a continuación se debe ingresar en un formulario que en el caso del ejemplo lleva el nombre de userform1, descargando el ejemplo lo podrás ver en funcionamiento, analizar, modificar y adaptar a lo que tú estés realizando el código está abierto sin ningún tipo de restricción.


Código a insertar en formulario

Private Sub Combobox1_Change()
'Evito movimientos de la pantalla
Application.ScreenUpdating = False
Dim fila, a As Integer
On Error Resume Next
'Borra datos del listbox
ListBox1.Clear
a = 0
fila = 2
'Bucle mientras la fila no esté vacia
While Sheets("hoja1").Cells(fila, 5) <> Empty
      dato = Combobox1
'Si el dato de la fila coincide con textbox carga los datos al listbox
  Var = Sheets("hoja1").Cells(fila, 5)
   If Sheets("hoja1").Cells(fila, 5) = dato Then

        'Copia los datos de la celda list box
        a = ListBox1.ListCount
        ListBox1.AddItem
        ListBox1.List(a, 0) = Sheets("hoja1").Cells(fila, 1)
        ListBox1.List(a, 1) = Sheets("hoja1").Cells(fila, 2)
        ListBox1.List(a, 2) = Sheets("hoja1").Cells(fila, 3)
        ListBox1.List(a, 3) = Sheets("hoja1").Cells(fila, 4)
        ListBox1.List(a, 4) = Sheets("hoja1").Cells(fila, 5)
   End If
  
'Aumento la fila para que pase a la siguiente
fila = fila + 1
Wend
'Devuelvo movimientos de la pantalla
Application.ScreenUpdating = True
End Sub

Private Sub UserForm_Initialize()
Label2.Caption = Sheets("hoja1").Cells(1, 1)
Label3.Caption = Sheets("hoja1").Cells(1, 2)
Label4.Caption = Sheets("hoja1").Cells(1, 3)
Label5.Caption = Sheets("hoja1").Cells(1, 4)
Label6.Caption = Sheets("hoja1").Cells(1, 5)

 
Combobox1.AddItem ("Ventas")
Combobox1.AddItem ("Cobranzas")
Combobox1.AddItem ("Deposito")
Combobox1.AddItem ("Contaduria")
Combobox1.AddItem ("Legales")
End Sub

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



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

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

Macro VBA recorre filas, busca y copia datos en base a criterios




Si bien este ejemplo es bastante específico por lo que se pretendía resolver además de ser un informe volcado a Excel desde un software de una empresa en particular, no obstante acá dejo otros links que permiten recorrer las filas como por ejemplo este recorre las filas busca el dato y lo resalta; también puedes consultar como eliminar una fila en recorre filas busca dato y elimina fila cuando encuentra el dato, tal vez te interese una macro que recorre las filas busca y dato y lo pega en otra hoja o recorrer la columna A y pegar los datos en la columna B, macro que recorre compara celdas y las colorea, también pueda que te interese recorrer filas buscar datos y pegarlo en otra hoja; si estás buscando ejemplos como recorrer filas los mencionados te pueden ayudar a realizar tu macro, si necesitas más ejemplos acá tienes cientos de ejemplos de macros con su archivo de ejemplo el cual puedes descargar, también encontrarás ejemplos con uso de formularios,combobox y textbox.

Con este procedimiento de VBA o macro de Excel, se muestra como recorrer una columna en particular, en este caso  la columna L del libro de Excel,   la macro; previamente determina cual es la última fila, en base a ello  utiliza el comando For... Next, buscando fila por fila si un dato cumple con el criterio dado, cuando haya ese dato, realiza otro bucle en busca de una cadena de texto, para ello se hecha mano a funciones como InStr y Left para extraer parte de una cadena, una vez hecho esto a través de Offset se traslada  a determinada posición donde se encuentra el dato a copiar que luego pega en la celda correspondiente, es un ejemplo más de como manipular datos, recorrer columnas, extraer cadenas, etc.

Si estás usando macros para automatizar tu libro de Excel seguramente te es necesario saber seleccionar o referenciar celdas, en FORMAS DE SELECCIONAR O REFERENCIAR CELDAS CON VBA (Spanish Edition) encontrarás una excelente ayuda; si trabajas con fechas en Excel, fíjate en el siguiente link que te puede ser de utilidad FORMATOS Y FUNCIONES DE FECHA Y HORA DE MICROSOFT EXCEL (Spanish Edition)

Esta macro me fue solicitada en un foro para la solución de un caso específico, lo interesante es analizar el procedimiento para observar su funcionamiento y poder utilizarlo como ejemplo para otros proyectos se necesite hacer algo parecido,  haz click para bajar el ejemplo.




  

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.

El código que se encuentra a continuación se debe ingresar en un módulo, descargando el ejemplo lo podrás ver en funcionamiento, analizar, modificar y adaptar a lo que tú estés realizando el código está abierto sin ningún tipo de restricción.

Código a insertar en módulo

Sub CopiaDato()
Application.ScreenUpdating = False
On Error Resume Next
Dim uf, conta As Integer
Dim cadena, espacio, resultado As String
conta = 0
uf = Sheets("hoja1").Range("L" & Rows.Count).End(xlUp).Row
For x = 3 To uf
If Sheets("hoja1").Cells(x, 12).Value <> Empty And Sheets("hoja1").Cells(x, 12).Offset(0, -1).Value= "" Then
Application.StatusBar = "Realizando proceso aguarde ..."
  
   j = x
   For j = j To uf
      cadena = Sheets("hoja1").Cells(j, 9)
      If cadena <> Empty Then
      espacio = InStr(cadena, " ")
      resultado = Left(cadena, espacio - 1)
      End If
     
      If resultado = "Total" Then
       Application.StatusBar = "Realizando cambios ..."
         Sheets("hoja1").Cells(j, 9).Offset(0, 2).Select
         Selection.Copy
         Sheets("hoja1").Cells(x, 11).Select
         Selection.PasteSpecial Paste:=xlValues
         conta = conta + 1
         j = uf
         resultado = Empty
      End If
    Next j
End If
Next x

Application.StatusBar = "Terminando proceso ..."
MsgBox ("Se realizaron " & conta & " cambios"), vbInformation, "AVISO"
conta = 0
Application.StatusBar = Clear
Application.ScreenUpdating = True
End Sub

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