Que puedo hacer para utilizar las macros creadas en un a hoja excel, en otras hojas

Hola, es la primera vez que utilizo macros en excel. He creado un formulario en la primera hoja, con doce habitaciones correspondientes a una residencia (hotel) y a cada habitación le he asignado un botón, que solo utilizo para archivar el cliente cuando deja la habitación y me vuelca los datos en una tabla existente en otra Hoja excel y limpia el registro para un nuevo cliente.
El caso es que necesito crear 5 residencias mas cada una en una pagina con sus correspondientes 12 habitaciones y que igualmente vuelquen sus datos en la tabla donde se quedan archivados.
He copiado las hojas, pero cuando pulso el botón creado, siempre vuelca los datos de la primera hoja, no los de la hoja activa.
Es un fichero para mi trabajo y estoy perdida. He utilizado excel 2003

1 respuesta

Respuesta
1

Con quitarle la indicación del nombre de hoja alcanzará, Utiliza ActiveSheet en lugar del nbre de hoja.

Si no lo resolves Indicame qué tipo de botón utilizaste: si de la barra Formulario (tenés la rutina en un módulo) o con Cuadro de conrtoles (tenés la rutina en la misma hoja) y dejame también la macro para que la ajuste.

Hola!

He intentado sustituir el nombre de la hoja, pero definitivamente no tengo ni idea.

He creado la macro grabando desde excel. y los botones, que son dos por habitación, los he creado con word art. y he puesto, Guardar para una y A (archivar) para otra.

Estas dos macros se repiten con distinto nombre (varío el nº) por cada habitación (12 en total).

A continuación pego las macros.

Sub oli1()
'
' oli1 Macro
' Macro grabada el 04/05/2012 por Servidor
'
'
ActiveSheet("C7").Select
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("B3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("F9").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("C3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("F11").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("D3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("F13").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("E3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("F15").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("F3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("F17").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("G3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("F19").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("H3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("F21").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("I3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("F23").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("J3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("L9").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("K3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("R9").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("L3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("L23").Select
Application.CutCopyMode = False
Selection.Copy
ActiveSheet("L25").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("M3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("P23").Select
Application.CutCopyMode = False
Selection.Copy
ActiveSheet("P25").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("N3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("Y13").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("O3").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveSheet("F9:F23").Select
Application.CutCopyMode = False
Selection.ClearContents
ActiveSheet("J13:T15").Select
Selection.ClearContents
ActiveSheet("J19:T21").Select
Selection.ClearContents
ActiveSheet("L25").Select
Selection.ClearContents
ActiveSheet("P25").Select
Selection.ClearContents
ActiveSheet("L9").Select
Selection.ClearContents
ActiveSheet("R9").Select
Selection.ClearContents
ActiveSheet("Y13").Select
Selection.ClearContents
ActiveSheet("F9").Select
End Sub

Y pego también segunda macro.

Sub PAG1()
'
' PAG1 Macro
' Macro grabada el 11/05/2012 por Teo
'
'
Range("C7").Select
Selection.Copy
Sheets("PAGOS").Select
Range("B4").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
Range("J27").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("PAGOS").Select
Range("C4").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
Range("N27").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("PAGOS").Select
Range("D4").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
Range("R27").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("PAGOS").Select
Range("E4").Select
Selection.Insert Shift:=xlDown
Sheets("OLIVAR").Select
ActiveWindow.SmallScroll Down:=6
End Sub

Muchísimas Gracias,

Espero respuesta

Aparentemente la hoja activa, la de las 12 habitaciones es la llamada OLIVAR

Entonces para que esta macro pueda ser utilizada con los botones de otras nuevas hojas, tenés que reemplazar cada vez que aparece Sheets("OLIVAR") por el nombre de la hoja activa.

No te sirve ActiveSheet porque estás seleccionando la de CLIENTES o PAGOS y luego excel no sabe cuál es la activa. Por eso al inicio guardamos el nombre en una variable y luego la usás en lugar de OLIVAR

La 1ra te quedaría así:

Sub oli1()
'
' oli1 Macro
' Macro grabada el 04/05/2012 por Servidor
'
hojax = ActiveSheet.Name
ActiveSheet("C7").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("B3").Select
Selection.Insert Shift:=xlDown
'vuelvo a mi hoja original
Sheets(hojax).Select
ActiveSheet("F9").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("C3").Select
Selection.Insert Shift:=xlDown
'vuelvo a la hoja original
Sheets(hojax).Select
ActiveSheet("F11").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("D3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("F13").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("E3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("F15").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("F3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("F17").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("G3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("F19").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("H3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("F21").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("I3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("F23").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("J3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("L9").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("K3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("R9").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("L3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("L23").Copy
ActiveSheet("L25").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("M3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("P23").Copy
ActiveSheet("P25").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("N3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("Y13").Copy
Sheets("CLIENTES ARCHIVADOS").Select
ActiveSheet("O3").Select
Selection.Insert Shift:=xlDown
Sheets(hojax).Select
ActiveSheet("F9:F23").Select
Application.CutCopyMode = False
Selection.ClearContents
ActiveSheet("J13:T15").Select
Selection.ClearContents
ActiveSheet("J19:T21").Select
Selection.ClearContents
ActiveSheet("L25").Select
Selection.ClearContents
ActiveSheet("P25").Select
Selection.ClearContents
ActiveSheet("L9").Select
Selection.ClearContents
ActiveSheet("R9").Select
Selection.ClearContents
ActiveSheet("Y13").Select
Selection.ClearContents
ActiveSheet("F9").Select
End Sub

Nota: no es necesario seleccionar la celda antes de copiarla por eso le quité algunas líneas.

Hola Elsa,

he modificado mi macro copiando la tuya, y recibo el mensaje "se ha producido el erro 438 en tiempo de ejecución: el objeto no admite esta propiedad o método.

No se como se guarda el nombre de una hoja en una variable, he grabado la macro desde Excel, ejecutando las funciones que necesitaba, no conozco el lenguaje de programación.

Siento molestarte tanto con mi torpeza. Muchas gracias

Y sí, no es fácil largarse a realizar una aplicación con 0 conocimientos de macros... no es molestia para mí pero desde aquí hacemos lo que podemos, no les podemos transmitir conocimientos generales de macros en 1 sola respuesta.

A todas tus líneas donde seleccionas o copias una celda le falta la expresión Range:

ActiveSheet("C7"). Copy ----------> ActiveSheet. Range("C7"). Copy

ActiveSheet("J3").Select ---------> ActiveSheet.Range("J3").Select

En la sección Macros de mi sitio podes encontrar instrucciones básicas de ejemplos, también en la sección Descargas podes encontrar ejemplos gratuitos ... y luego te recomiendo el manual de Programación VBA, nivel inicial.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas