Control del calculo con macros

Buenas, tengo que realizar distintos libros que a la vez son cálculos parciales de un libro "vamos a llamarlo (consolidado)" el caso es que cada uno de los libros base son conexiones con BD y que tardan bastante en su proceso de calculo. ¿Cómo puedo mediante macros, controlar la apertura de cada uno de ellos, que calcule, que cuando acabe de calcular imprima y se guarde para seguir con el siguiente libro?
Nota.- Mi problema es el control del calculo automático y cuando sé que ha terminado de calcular.

1 Respuesta

Respuesta
1
Sé que pasó mucho tiempo desde tu pregunta, pero cuestiones laborales y personales, me impidieron dedicarme a contestar preguntas. En particular si las mismas revistian una comlejidad como la que tiene la tuya.
Si aún te sirve, aquí tienes una macro que desarrollé para que ejecute una determinada acción sobre varios libros.
Para su funcionamiento solo necesitas crear un archivo nuevo que será un auxiliar para comandar las impresiones de todos los archivos de un directorio.
Este archivo debe tener una sola hoja llamada INICIO.
En ella, coloca en la celda C7 la dirección de la carpeta donde debe buscar todos los archivos.
En la celda C8, ingresa qué tipo de archivos debe considerar. Esto te permite, seleccionar algunos de los archivos del directorio indicado en C7. Así, por ejemplo, si quieres que sólo considere los archivos que empiezan con "P", coloca en esa celda:
P*.xls
Si quieres que use todos los archivos, simplemente deja en tal celda:
*.xls
La celda C9 permite que coloques una clave, en caso de que los archivos a abrir tuvieran la misma clave de protección para apertura.
Si no tuviesen clave, deja esa celda en blanco.
Graba este archivo.
Ahora falta colocar la macro que hace el trabajo.
Activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "´Modulo") y pega el siguiente código:
Sub ModVsFiles()
Dim MiCarpeta As String, MisArchivos As String, MiClave As String
Dim RePro As Boolean
MiCarpeta = Trim(Sheets("INICIO").Range("C7").Value) & IIf(Right(Trim(Sheets("INICIO").Range("C7").Value), 1) = "\", "", "\")
MisArchivos = Trim(Sheets("INICIO").Range("C8").Value)
MiClave = Trim(Sheets("INICIO").Range("C9").Value)
With Application.FileSearch
.LookIn = MiCarpeta
.SearchSubFolders = True
.FileName = MisArchivos
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
For i = 1 To .FoundFiles.Count
DirFile = .FoundFiles(i)
Workbooks.Open FileName:=DirFile, Updatelinks:=False, PASSWORD:=""
Application.Calculation = xlManual
ActiveWorkbook.Unprotect PASSWORD:=MiClave
'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'
'* TAREA A EFECTUAR en archivo: MOVER HOJA A ESTE MISMO ARCHIVO
'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'
'Application.ScreenUpdating = False
Sheets("Hoja1").Select
Application.Calculate
ActiveWindow.SelectedSheets.PrintOut Copies:=1
ActiveWorkbook.Close False
' Application.ScreenUpdating = True
'===========================================================================================
' FIN tarea en archivo
'===========================================================================================
Next i
MsgBox "ARCHIVOS IMPRESOS"
Else
MsgBox "No se encontró ningún archivo " & MisArchivos & " en " & Chr(10) & MiCarpeta
End If
End With
End Sub
Hacia la mitad de la macro notarás que está indicada cual es la tarea que debe realizar en cada archivo.
De esta manera, si otro día quieres hacer otra cosa con varios archivos en un directorio, bastará que coloques el código a ejecutar en este lugar.
Cierra el editor de visual basic y graba el archivo.
El toque final sería colocar un botón en la hoja INICIO para activar la macro.
Para esto, una vez copiada la macro en el archivo, muestra la barra de herramientas de "Formularios" ("Ver" | "Barras de herramientas" | "Formularios".
De ella, toma el icono de "botón" y dibújalo en tu hoja. Al haber presionado el icono, el cursor del mouse se transformará en una cruz fina. Mantén presionado el botón derecho y arrástralo hasta donde desees dibujando el botón.
Cuando sueltes la tecla, automáticamente aparecerá la lista de macros disponibles de dónde podrás seleccionar el que quieres asociar. Simplemente, dale doble click.
También, puedes cambiar la vinculación de un botón con una macro, dando click derecho sobre él y eligiendo "Asignar macro". Otra vez, la lista de macros disponibles te permitirá realizar tal asignación.
Listo. Tienes un archivo que abrirá uno de los indicados en el directorio. Calculará sus fórmulas y -cuando termine de calcularlo- seleccionará la hoja/s a imprimir (indicada/s en el código central). Al terminar de imprimir, cerrará el archivo sin grabrlo. Luego hará lo propio con el siguiente y así, hasta terminar con todos los indicados.
Bueno, Fran, disculpame la involuntaria demora y, sinceramente, espero que aún te sirva.
Si así fuera, por favor, finaliza esta pregunta...
Un gran abrazo!
Fernando
Gracias por responderme. En cuanto a la ocupación te comprendo perfectamente. La semana entrante me pondré a comprobar tu idea y te escribiré, gracias nuevamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas