Macros en excel

Buenos días,
A ver si me sé explicar bien: tengo una hoja con vínculos que he de actualizar (Archivo A) con distintas variables. Necesitaría una macro que hiciera los siguientes pasos:
- Abrir archivo A
-Introducir la variable en la pestaña "1" y en la celda C1. (La variable la debería extraer de un listado que hay en otra hoja de Excel)
-Calcular el archivo A (F9)
-Guardar archivo A con el nombre de la variable. (Guardar como, no sobreescribir en la original)
-Volver a abrir el archivo A... (empezar otra vez, pero cogiendo la siguiente variable que estará en el listado, una debajo de otra)
No sé si me he explicado bien, es difícil, cualquier duda me lo podéis consultar. Muchísimas gracias por anticipado!

1 respuesta

Respuesta
1
Como no entendí eso de 'introducir la variable' (supongo que será que vas a tipear un valor en alguna celda), mejor lo vas realizando el paso a paso con la grabadora de macros encendida.
Desde el libro original, menú Herramientas, Macros, Grabar. Optá por Este libro .
Ahora realiza los pasos que detallaste en la consulta, hasta el Guardar como.
Detené la grabadora.
En un módulo encontrarás la rutina
Si necesitas ayuda para ajustarla y que pueda ser ejecutada repetitivamente, escribime aquí lo que aparece en el módulo.
Hola,
Si, es introducir un valor en una celda, pero que este valor me lo coja de un listado. Ahora te adjunto la rutina:
Workbooks.Open Filename:="P:\PPTO 2010\INDC\Ceco's-INDC.xls", UpdateLinks:= _
        0
    Sheets("Prev.cierre 2009").Select
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "C1100"  (Aquí debería ir a buscar el valor a otro libro donde habrá un listado de valores en una columna)
    Range("C2").Select
    Calculate
    Application.Run "'Ceco''s-INDC.xls'!ppto"
    ChDir "P:\PPTO 2010\"
    ActiveWorkbook.SaveAs Filename:=Range("C1"), FileFormat:= _
        xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False
    ActiveWindow.Close
End Sub
Y volver a repetir el proceso, cogiendo el valor siguiente
Bien, entonces primero ponete de acuerdo, si el dato o valor se busca en otra hoja o en otro libro . No coinciden tus comentarios:
'...La variable la debería extraer de un listado que hay en otra hoja de Excel)...
'...Aquí debería ir a buscar el valor a otro libro donde habrá
Ahora, encendé la grabadora.
Realizá los pasos de: abrir el libro, buscar el dato (si se trata de otro libro debe estar ya abierto), y copiarlo en C1, ejecutar cualquier otra macro que parece que existe, y guardar el libro.
Repetí el proceso 1 vez más con el siguiente valor.
Detené la grabadora y enviame la rutina obtenida, para que te agregue el bucle.
Sdos
Elsa
La secuencia es esta:
Windows("Cecos.xls").Activate
    Selection.Copy
    Windows("Ceco's-INDC.xls").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Calculate
    ChDir "P:\PPTO 2010\INDC"
    Application.Run "'Ceco''s-INDC.xls'!ppto"
    ActiveWorkbook.SaveAs Filename:="P:\PPTO 2010\INDC\d2703.xls", FileFormat:= _
        xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False
    ActiveWindow.Close
    Workbooks.Open Filename:="P:\PPTO 2010\INDC\Ceco's-INDC.xls"
    Windows("Cecos.xls").Activate
    Range("C3").Select
    Selection.Copy
    Windows("Ceco's-INDC.xls").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.Run "'Ceco''s-INDC.xls'!ppto"
    ActiveWorkbook.SaveAs Filename:="P:\PPTO 2010\INDC\d2711.xls", FileFormat:= _
        xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False
    ActiveWindow.Close
End Sub
Una última pregunta: ¿Cómo se hace para abrir una hoja de excel con el calculo manual activado?
Gracias!
Aquí te dejo una rutina que creo hará lo que necesitas, aunque en la tuya se ejecuta otra subrutina, que desconozco, y por lo tanto no sé cuánto en qué medida estará afectando a estos 2 libros.
En primer lugar te aclaro que si estás recorriendo una col (C2, C3, etc) no podes cerrar el libro y pretender luego que Excel te recuerde la celda activa. Por eso mi rutina nunca cierra el libro, solo lo guarda como copia y (SaveCopyAs en lugar de SaveAs) y repite el proceso para C3 y así hasta completar la col C.
Espero que el ejemplo te sirva para adaptarlo a tu macro.
Sub copiasvarias()
Windows("Cecos.xls").Activate
'selecciono la primer celda a copiar
ActiveSheet.Range("C2").Select
'armo un bucle que recorre la col C hasta no encontrar más datos
While ActiveCell <> ""
    Selection.Copy
    Windows("Ceco's-INDC.xls").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Calculate
    'ChDir "P:\PPTO 2010\INDC"
    Application.Run "'Ceco''s-INDC.xls'!ppto"    '??????
    ActiveWorkbook.SaveCopyAs Filename:="P:\PPTO 2010\INDC\d2703.xls", FileFormat:= _
        xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False
'paso a la celda siguiente para repetir el bucle
ActiveCell.Offset(1, 0).Select
Wend
End Sub
Nota: no realices 1 consulta sobre otra, cada consulta debe ir en temas separados. Por esta vez te la dejo:
Private Sub Workbook_Open()
Application.Calculation = xlManual     'abre el libro de modo manual
End Sub
Me parece que no nos estamos entendiendo, además de que yo no entiendo mucho de macros. Tengo 2 libros: "cecos" y "ceco's INDC". El libro de "cecos" no lo pretendo cerrar, es el que me da el valor a copiar y donde tiene que recorrer un col (C2, luego la C3, luego la C4 y así sucesivamente). Tiene que copiar el valor de la celda de C2 del libro de "Cecos" y pegarlo en el libro de "Ceco's INDC", calcular, ejecutar otra macro (que copia y pega valores) y luego guardo el libro con el nombre que me aparece en una celda, por lo que he de volver a abrir el libro de "Cecos INDC" para poder repetir todo el proceso, es decir, que vuelva a abrir el libro con el calculo manual activado (no era otra consulta, pero gracias por la aclaración), que coja la celda C3 del libro de "cecos" y la pegue en el libro de "Cecos INDC", que calcule y lo guarde con el valor de una celda, que vuelva a abrir "Cecos INDC", que vaya a la celda C4 del libro de "Cecos"´, la copie y la pegue en "Cecos INDC", y así sucesivamente.
He puesto lo de ActiveWorkbook.SaveCopyAs Filename y me da error de compilación: no se encontró el argumento con nombre.
Te adjunto la macro que tengo, todo funciona bien, excepto que del libro de "cecos" siempre me copia la celda C2.
    Private Sub Workbook_Open()
    Application.Calculation = xlManual
    Workbooks.Open Filename:="P:\PPTO 2010\INDC\Ceco's-INDC.xls", UpdateLinks:= _
        0
    Application.Run "CPG"
    End Sub
Sub CPG()
    Windows("Cecos.xls").Activate
    Sheets("Hoja1").Select
    ActiveSheet.Range("C2").Select
    While ActiveCell <> ""
    Selection.Copy
    Windows("Ceco's-INDC.xls").Activate
    Sheets("Prev.cierre 2009").Select
    Range("C1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Calculate
    Application.Run "'Ceco''s-INDC.xls'!ppto"
    Sheets("Prev.cierre 2009").Select
    ChDir "P:\PPTO 2010\CPG\"
    ActiveWorkbook.SaveAs Filename:=Range("C1"), FileFormat:= _
        xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False
    ActiveWorkbook.Sabe
    ActiveWorkbook.Close
    Application.Run ("Workbook_Open")
    ActiveCell.Offset(1, 0).Select
Wend
End Sub
Gracias por anticipado,
Saludos,
Sara
Espero que con esto finalicemos el tema.
Cuando desde la subrutina le decís que ejecute Workbook_Open, se ejecuta nuevamente Sub CPG que en sus primeras líneas dice que seleccione C2.
Por eso yo no me salgo de CPG y desde ahí le indico que cierre y vuelva a abrir el 2do libro.
Veamos si funciona correctamente:
Private Sub Workbook_Open()
    Application.Run "CPG"
End Sub

    Sub CPG()
    Application.Calculation = xlManual
    Workbooks.Open Filename:="P:\PPTO 2010\INDC\Ceco's-INDC.xls", UpdateLinks:= _
        0
    Windows("Cecos.xls").Activate
    Sheets("Hoja1").Select
    ActiveSheet.Range("C2").Select
    fila = 2
    While ActiveCell <> ""

    Selection.Copy
    Windows("Ceco's-INDC.xls").Activate
    Sheets("Prev.cierre 2009").Select
    Range("C1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Calculate
    Application.Run "'Ceco''s-INDC.xls'!ppto"
    Sheets("Prev.cierre 2009").Select
    ChDir "P:\PPTO 2010\CPG\"
    ActiveWorkbook.SaveAs Filename:=Range("C1"), FileFormat:= _
        xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False
    ActiveWorkbook.Sabe
    ActiveWorkbook.Close
    'aquí repito lo que estaba en el evento Open
        Application.Calculation = xlManual
    Workbooks.Open Filename:="P:\PPTO 2010\INDC\Ceco's-INDC.xls", UpdateLinks:= _
        0
    Windows("Cecos.xls").Activate
 Sheets("Hoja1").Select
    'aquí le tenés que indicar que siga con la fila siguiente
    ActiveSheet.Cells(fila, 3).Select
Wend

End Sub
Sdos
Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas