Macros de excel

Hola cmera:
Tengo una preguntas que hacer que espero y confío que Usted me pueda ayudar a resolver. Estoy haciendo unas macros en Excel, para automatizar algunas tareas, pero tengo unos enormes inconvenientes. Una de las macros copia 18 celdas que no son consecutivas de un libro origen (que para mi caso se llama Tablas G&C) y las copia en un libro de destino (llamado Resumen) en un orden diferente al que se encuentran en el libro de origen. Resulta que necesito que esa macro, copie las mismas celdas pero no solo del libro de origen llamado Tablas G&C, sino que sea capaz de copiarlas de cualquier otro libro, y que las pegue no solo en el libro Resumen, sino en cualquier otro libro. No sé cómo se hace para que la macro sea capaz de ejecutarse desde cualquier libro y no solamente desde los libros mencionados. Lo curioso es que he hecho otras macros de menor complejidad, como por ejemplo, señalar determinado grupo de casillas y darle un formato específico y esa macro sí funciona EN CUALQUIER LIBRO, a diferencia de la que estoy necesitando, que solo opera entre Tablas G&C y Resumen. Pregunto, ¿se puede hacer lo que necesito hacer?, si es así, ¿cómo se hace?. ¿Cómo hago para que la macro sea capaz de ejecutarse desde y hacia cualquier libro.
Espero que pueda Usted ayudarme con este problema al que me estoy enfrentando.
De antemano, mil gracias por su valiosa ayuda.
Desde Colombia,
Juan Pablo Gómez
P.D.: El texto de la macro (por si sirve de algo), es el siguiente.
ActiveCell.Offset(0, -1).Range("A1").Select
Selection.Copy
Windows("RESUMEN.XLS").Activate
ActiveSheet.Paste
Windows("TABLAS G&C.xls").Activate
ActiveCell.Offset(2, 0).Range("A1").Select
Application.CutCopyMode = False
Selection.Copy
Windows("RESUMEN.XLS").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveSheet.Paste
Windows("TABLAS G&C.xls").Activate
ActiveCell.Offset(1, 0).Range("A1").Select
Application.CutCopyMode = False
Selection.Copy
Windows("RESUMEN.XLS").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveSheet.Paste
Windows("TABLAS G&C.xls").Activate
ActiveCell.Offset(-4, 0).Range("A1").Select
Application.CutCopyMode = False
Selection.Copy
Windows("RESUMEN.XLS").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Windows("TABLAS G&C.xls").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.Copy
Windows("RESUMEN.XLS").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Windows("TABLAS G&C.xls").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.Copy
Windows("RESUMEN.XLS").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Windows("TABLAS G&C.xls").Activate
ActiveCell.Offset(10, -2).Range("A1").Select
Selection.Copy
Windows("RESUMEN.XLS").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Windows("TABLAS G&C.xls").Activate
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.Copy
Windows("RESUMEN.XLS").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Windows("TABLAS...
Respuesta
1
Lo que mencionas de las macros para formatos funciona en cualquier libro y en cualquier hoja porque no se referencian los nombres, es decir, en donde la corras funciona.
Cuando la cosa es de copiar y pegar todo cambia porque debes decir donde copiar y donde pegar haciendo referencia al libro y a la hoja.
Lo otro que se puede hacer para simplificar la estructura de la macro es copiar y pegar en una sola línea por ejemplo:
Range("A2:D2").Copy Destination:=Range("N2")
Y por último lo que se puede hacer es que Excel genere un formulario que liste los libros abiertos en el momento para que el usuario elija el libro del que quiere copiar, en el que quiere pegar o los dos (más complejo), te envío apartes de una macro que hice para escoger un libro de origen, esa macro valida un par de cosas antes de hacer los cambios por si el usuario se equivoca(frecuente):
Sub InformeCupos()
'Macro Grabada por Cesar Mera el 24/08/2004
'Arreglo y presentación Informe de Cupos de acuerdo a especificaciones de forma
'Objeto workbooks, Formatos, Formatos condicionales, Subtotales, se debe abrir el libro que contiene el informe de SIG
Dim NombreLibro As String
Dim NombreHoja As String
Dim Mensaje As String
If Workbooks.Count < 2 Then
MsgBox "Debe tener abierto el libro de Excel en donde se encuentra el informe arrojado por el SIG"
Exit Sub
End If
Load UserForm
UserForm.Show
If Cancelar Then Exit Sub
If Informe = "INFORME CUPOS COMERCIAL.XLS" Then
MsgBox "Seleccione un libro diferente"
Exit Sub
End If
Workbooks(Informe).Activate
If Cells(1, 1).Value <> "nom_if" Or Cells(1, 2) <> "cupo_gtizado" Then
Mensaje = "Aparentemente ese libro no tiene la estructura adecuada"
Mensaje = Mensaje & vbCr & "Por favor revise"
MsgBox Mensaje, vbExclamation + vbOKOnly, "Advertencia"
Exit Sub
End If
NombreHoja = ActiveSheet.Name
Sheets.Add
ActiveSheet.Name = "BASE"
Worksheets(NombreHoja).Columns("E:F"). Copy (Worksheets("BASE").Columns("A:A"))
Worksheets(NombreHoja). Range("A2:E500"). Copy (Worksheets("BASE"). Range("D2"))
Worksheets(NombreHoja). Range("G2:H500"). Copy (Worksheets("BASE"). Range("H2"))
Olvidaba decir que crea una hoja nueva y copia ahí los valores, también que la macro se debe tener en el libro de macros personal y no en un libro específico.
Se que es un poco enredado, si no eniendes algo por favor me haces las preguntas necesarias, entre más específicas mejor. Si entendiste todo por favor valora la respuesta de acuerdo a la calidad y oportunidad de la misma.
Cordialmente,
CMERA

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas