Las necesidades informáticas van en aumento día a día. Si bien los lenguajes son cada vez mas poderosos, los programadores nos encontramos con que los requerimientos de nuestros clientes son también cada vez mayores.
[+/-] Ver el resto / Ocultar
Hace unos años atrás quizás el proyecto era buscar un valor, multiplicarlo por algún factor y luego guardar esa info. Hoy hay que buscar ese valor, multiplicarlo por un factor que obtenemos desde una página web rusa, guardar una imagen, sincronizar los datos con Access, enviarlo a 100 direcciones de correo electrónico y, por fin, guardar esa info.
Y no exagero... los pedidos son cada vez mas duros y difíciles de llevar a cabo.
Una tarea bastante común en cualquier proyecto es la de buscar algún archivo en el directorio del ordenador, para luego abrirlo, modificarlo, eliminarlo, obtener datos internos, etc, etc.
Esto supone grandes ventajas: el usuario accede a datos guardados en otra parte y nosotros controlamos bien lo que se abre, ya que generalmente pueden llegar a "meter la pata" y ejecutar cualquier cosa.
Un buen método para llevar a cabo esta tarea es mediante la creación del objeto File Sistem Object, que nos provee de las librerías necesarias para el manejo de archivos. Pero hay otro mejor, y que consume mucho menos código: Application.FileSearch
Vamos a realizar un código muy sencillo, que busca archivos dentro de una dirección específica:
Sub BuscarEnDirectorio()
'establecemos los parametros de busqueda:
With Application.FileSearch
.NewSearch 'indicamos que será una busqueda nueva
.LookIn = "C:\Users" 'donde buscaremos
.SearchSubFolders = False 'si incluimos las subcarpetas
.Filename = "libro" 'parte o nombre completo del archivo
.MatchTextExactly = True 'busca la palabra o frase exacta
.FileType =msoFileTypeExcelWorkbooks 'tipo de archivo a buscar (de excel, en este caso)
End With
'y ahora realizamos la busqueda de archivos:
With Application.FileSearch
'utilizo el método Excecute. si el resultado es mayor a 0,
'entonces se encontraron archivos y aviso de esto:
If .Execute() > 0 Then
MsgBox "Hay " & .FoundFiles.Count & _
" archivo/s encontrados."
'borro los datos de la primer columna:
Columns("A:A").ClearContents
'y coloco la ubicacion de los archivos
For i = 1 To .FoundFiles.Count
Cells(i, 1).Value = Trim(.FoundFiles(i))
Next i
Else
'si no encuentra nada, aviso:
MsgBox "No se encontraron archivos"
End If
End With
End Sub
para FileType existen las siguientes constantes:
* msoFileTypeAllFiles : cualquier tipo
* msoFileTypeDatabases : de base de datos
* msoFileTypeExcelWorkbooks ; Libros de Excel
* msoFileTypePowerPointPresentations : de PowerPoint
* msoFileTypeWordDocuments : Documentos de Word
* msoFileTypeTemplates : plantillas
* msoFileTypeOfficeFiles : cualquier documento de Office
en el ejemplo busco archivos de office.
modificando muy poco el código, podemos hacer que el usuario ingrese en alguna celda el directorio en donde desea buscar y el nombre de archivo:
Sub BuscarEnDirectorio()
Dim Direccion as String
Dim NombreArchivo as String
Dim TipoArchivo as String
'asigno valores a las variables anteriormente declaradas:
Direccion=Range("B1").Value
NombreArchivo=Range("B2").Value
TipoArchivo=Range("E3").Value
'establecemos los parametros de busqueda:
With Application.FileSearch
.NewSearch 'indicamos que será una busqueda nueva
.LookIn = Direccion 'donde buscaremos
.SearchSubFolders = False 'si incluimos las subcarpetas
.Filename = NombreArchivo 'parte o nombre completo del archivo
.MatchTextExactly = True 'busca la palabra o frase exacta
.FileType =TipoArchivo 'tipo de archivo a buscar (de excel, en este caso)
End With
'y ahora realizamos la busqueda de archivos:
With Application.FileSearch
'utilizo el método Excecute. si el resultado es mayor a 0,
'entonces se encontraron archivos y aviso de esto:
If .Execute() > 0 Then
MsgBox "Hay " & .FoundFiles.Count & _
" archivo/s encontrados."
'borro los datos de la columna en donde introduciré los archivos encontrados
Columns("K:K").ClearContents
'y coloco la ubicacion de los archivos
For i = 1 To .FoundFiles.Count
Cells(i, 1).Value = Trim(.FoundFiles(i))
Next i
Else
'si no encuentra nada, aviso:
MsgBox "No se encontraron archivos"
End If
End With
End Sub
la plantilla en excel debería quedarnos así:
nos posicionamos en B3 y vamos a datos / validacion / lista e ingresamos el rango G1:G7. esto lo hacemos para que solo pueda seleccionar datos correctos e impedirle equivocarse, cosa que luego haría fallar nuestra macro:
[+/-] Ver el resto / Ocultar
Hace unos años atrás quizás el proyecto era buscar un valor, multiplicarlo por algún factor y luego guardar esa info. Hoy hay que buscar ese valor, multiplicarlo por un factor que obtenemos desde una página web rusa, guardar una imagen, sincronizar los datos con Access, enviarlo a 100 direcciones de correo electrónico y, por fin, guardar esa info.
Y no exagero... los pedidos son cada vez mas duros y difíciles de llevar a cabo.
Una tarea bastante común en cualquier proyecto es la de buscar algún archivo en el directorio del ordenador, para luego abrirlo, modificarlo, eliminarlo, obtener datos internos, etc, etc.
Esto supone grandes ventajas: el usuario accede a datos guardados en otra parte y nosotros controlamos bien lo que se abre, ya que generalmente pueden llegar a "meter la pata" y ejecutar cualquier cosa.
Un buen método para llevar a cabo esta tarea es mediante la creación del objeto File Sistem Object, que nos provee de las librerías necesarias para el manejo de archivos. Pero hay otro mejor, y que consume mucho menos código: Application.FileSearch
Vamos a realizar un código muy sencillo, que busca archivos dentro de una dirección específica:
Sub BuscarEnDirectorio()
'establecemos los parametros de busqueda:
With Application.FileSearch
.NewSearch 'indicamos que será una busqueda nueva
.LookIn = "C:\Users" 'donde buscaremos
.SearchSubFolders = False 'si incluimos las subcarpetas
.Filename = "libro" 'parte o nombre completo del archivo
.MatchTextExactly = True 'busca la palabra o frase exacta
.FileType =msoFileTypeExcelWorkbooks 'tipo de archivo a buscar (de excel, en este caso)
End With
'y ahora realizamos la busqueda de archivos:
With Application.FileSearch
'utilizo el método Excecute. si el resultado es mayor a 0,
'entonces se encontraron archivos y aviso de esto:
If .Execute() > 0 Then
MsgBox "Hay " & .FoundFiles.Count & _
" archivo/s encontrados."
'borro los datos de la primer columna:
Columns("A:A").ClearContents
'y coloco la ubicacion de los archivos
For i = 1 To .FoundFiles.Count
Cells(i, 1).Value = Trim(.FoundFiles(i))
Next i
Else
'si no encuentra nada, aviso:
MsgBox "No se encontraron archivos"
End If
End With
End Sub
para FileType existen las siguientes constantes:
* msoFileTypeAllFiles : cualquier tipo
* msoFileTypeDatabases : de base de datos
* msoFileTypeExcelWorkbooks ; Libros de Excel
* msoFileTypePowerPointPresentations : de PowerPoint
* msoFileTypeWordDocuments : Documentos de Word
* msoFileTypeTemplates : plantillas
* msoFileTypeOfficeFiles : cualquier documento de Office
en el ejemplo busco archivos de office.
modificando muy poco el código, podemos hacer que el usuario ingrese en alguna celda el directorio en donde desea buscar y el nombre de archivo:
Sub BuscarEnDirectorio()
Dim Direccion as String
Dim NombreArchivo as String
Dim TipoArchivo as String
'asigno valores a las variables anteriormente declaradas:
Direccion=Range("B1").Value
NombreArchivo=Range("B2").Value
TipoArchivo=Range("E3").Value
'establecemos los parametros de busqueda:
With Application.FileSearch
.NewSearch 'indicamos que será una busqueda nueva
.LookIn = Direccion 'donde buscaremos
.SearchSubFolders = False 'si incluimos las subcarpetas
.Filename = NombreArchivo 'parte o nombre completo del archivo
.MatchTextExactly = True 'busca la palabra o frase exacta
.FileType =TipoArchivo 'tipo de archivo a buscar (de excel, en este caso)
End With
'y ahora realizamos la busqueda de archivos:
With Application.FileSearch
'utilizo el método Excecute. si el resultado es mayor a 0,
'entonces se encontraron archivos y aviso de esto:
If .Execute() > 0 Then
MsgBox "Hay " & .FoundFiles.Count & _
" archivo/s encontrados."
'borro los datos de la columna en donde introduciré los archivos encontrados
Columns("K:K").ClearContents
'y coloco la ubicacion de los archivos
For i = 1 To .FoundFiles.Count
Cells(i, 1).Value = Trim(.FoundFiles(i))
Next i
Else
'si no encuentra nada, aviso:
MsgBox "No se encontraron archivos"
End If
End With
End Sub
la plantilla en excel debería quedarnos así:
nos posicionamos en B3 y vamos a datos / validacion / lista e ingresamos el rango G1:G7. esto lo hacemos para que solo pueda seleccionar datos correctos e impedirle equivocarse, cosa que luego haría fallar nuestra macro:
ahora en E3 ingresamos la siguiente función: =BUSCARV(B3;G1:H7;2;0)
para que? sencillo: si en B3 el usuario selecciona "excel" nosotros en E3 buscamos en la tabla y ponemos el tipo de archivo que reconocerá nuestra macro:
para que? sencillo: si en B3 el usuario selecciona "excel" nosotros en E3 buscamos en la tabla y ponemos el tipo de archivo que reconocerá nuestra macro:
luego ocultamos la columna E, haciendo click con el boton derecho del mouse sobre el encabezado de la columna y seleccionando "ocultar". repetimos la accion con las columnas en donde se encuentra la tabla de archivos.
el usuario selecciona en B3, pero nuestra macro reconocerá el tipo de archivo presente en E3.
listo, el formulario de busqueda de archivos con macros... finalizado:
una vez que obtenemos el nombre y ruta del/los archivo/s, podremos abrirlos, eliminarlos, etc, etc, etc.
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Etiquetas
Macros
Etiquetas:
Macros
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Hola busco un archivo como el jfksoft, el cual siendo un libro de excell puedo realizar cotizaciones, factura, orden de servicio, genera un listado decotizaciones de ordenes de servicio etc tendras algo asi lourdesyuyi@hotmail.com
ResponderEliminarLourdes: gracias por escribir en mi blog, pero lamentablemente no puedo ayudarte al respecto. En las distintas entradas podrás encontrar ejemplos de como, por ejemplo, enviar mails o realizar impresiones selectivas, pero en la actualidad no poseo ningún proyecto de esas características, o bien se los he programado y vendido a distintos clientes, por lo cual los derechos son de ellos.
ResponderEliminarDecime si puedo ayudarte en algún punto en particular (que es mas que nada el "espíritu" de este blog, por que son trabajos muy extensos y complejos de realizar, que la mayoría de las veces se encuentran personalizados a los gustos y necesidades de cada usuario.
Excelente justo lo que necesitaba
ResponderEliminarFelemaru: gracias por tu comentario
ResponderEliminarTengo el siguiente codígo:
ResponderEliminarSub Prueba()
'
' Prueba Macro
' Calcula valores
'
Range("J2").Select
ActiveCell.FormulaR1C1 = "=RC[-1]+1"
Range("K2").Select
ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-3]"
Range("M2").Select
ActiveCell.FormulaR1C1 = "=RC[-2]/24"
Range("J2:M2").Select
Selection.AutoFill Destination:=Range("J2:M19"), Type:=xlFillDefault
Range("J2:M19").Select
End Sub
Como le digo a la macro que vaya a la ultima celda que tenga valor, dado que es un reporte que se baja y los rangos cambian, le puedo ampliar el rango y listo. Pero como hacer para que busque el último dato de la columna (I) y empiece a subir para calcular lo anterior.
Para ver cual es la última fila de un rango te conviene este código sencillo:
ResponderEliminarFila=Cells(Cells.rows.count, "I").end(xlup).row
esto hace que Excel vaya hasta la última fila de la hoja (primer argumento) de la columna I (segundo argumento) y "suba" (end(xlup)) hasta encontrar la fila ocupada, la cual almaceno en el ejemplo dentro de la variable Fila.
Luego puedes usar un bucle For...Next para recorrer ese rango.
Cualquier ayuda que necesites al respecto, avisame. Gracias x el mensaje.