Crear una macro ejecutable en cualquier libro

18/09/2007 - 13:46 por Desiree | Informe spam
Hola,
Primero que nada, soy novata en esto de las macros. La pregunta: tengo una
macro que copia un par de columnas de un libro de excel llamado A en otro
llamado B. Además tengo los libros C y D en los que me gustaría ejecutar
también la macro. Mi pregunta es, ¿necesito crear la macro también en los
libros C y D? ¿o hay alguna forma de que al intentar ejecutar la macro del
libro B, en el libro C no me dé el error 9?
Gracias de antemano y saludos,
Desiree

Preguntas similare

Leer las respuestas

#1 Juan M
18/09/2007 - 22:14 | Informe spam
"Desiree" escribió
Hola,
Primero que nada, soy novata en esto de las macros. La pregunta: tengo una
macro que copia un par de columnas de un libro de excel llamado A en otro
llamado B. Además tengo los libros C y D en los que me gustaría ejecutar
también la macro. Mi pregunta es, ¿necesito crear la macro también en los
libros C y D? ¿o hay alguna forma de que al intentar ejecutar la macro del
libro B, en el libro C no me dé el error 9?
Gracias de antemano y saludos,
Desiree



Hola Desiree,

Para poder emplear la misma macro en varios libros, puedes crear un
complemento (add-in) o guardar tu macro en el libro personal.
Surgirán problemas en el caso que comentas porque cada libro de esos en los
que quieres emplear la macro tendrán un nombre de hojas diferentes, aunque
se podrían hacer los arreglos suficientes para que te fuese preguntando
todo. Claro que para esto deberías proporcionar algún que otro dato más.

Un saludo,
Juan
Respuesta Responder a este mensaje
#2 Desiree
19/09/2007 - 11:26 | Informe spam
Hola Juan,
Gracias por tu respuesta. Yo tengo grabada la macro en mi libro de macros
personal y las hojas de los diferentes libros (B, C, D, etc ) tienen el mismo
nombre (los libros sí que evidentemente tienen nombres diferentes). La macro
es muy sencilla: abre el libro A y selecciona cuatro columnas y las copia en
el libro B. Entonces lo que me gustaría es que cuando tengo abierto el libro
C haga lo mismo, sin tener que volver a grabar la macro específicamente para
ese libro.
Gracias y saludos,
Desiree


"Juan M" escribió:


"Desiree" escribió
> Hola,
> Primero que nada, soy novata en esto de las macros. La pregunta: tengo una
> macro que copia un par de columnas de un libro de excel llamado A en otro
> llamado B. Además tengo los libros C y D en los que me gustaría ejecutar
> también la macro. Mi pregunta es, ¿necesito crear la macro también en los
> libros C y D? ¿o hay alguna forma de que al intentar ejecutar la macro del
> libro B, en el libro C no me dé el error 9?
> Gracias de antemano y saludos,
> Desiree

Hola Desiree,

Para poder emplear la misma macro en varios libros, puedes crear un
complemento (add-in) o guardar tu macro en el libro personal.
Surgirán problemas en el caso que comentas porque cada libro de esos en los
que quieres emplear la macro tendrán un nombre de hojas diferentes, aunque
se podrían hacer los arreglos suficientes para que te fuese preguntando
todo. Claro que para esto deberías proporcionar algún que otro dato más.

Un saludo,
Juan



Respuesta Responder a este mensaje
#3 Juan M
19/09/2007 - 23:20 | Informe spam
Hola Desiree,

Lo que quieres conseguir es claro, el probelma es el escenario donde
estamos, es decir, si los libros están abiertos, si solo están los dos de
donde vamos a tomar los datos y donde los vamos a pegar...

Bueno, te propongo una solución bastante general, que tiene un poquito de
trabajo a ver si te sirve o a ver si alguien puede mejorar los flecos que
quedarán.

Empezamos:

- Para crear el libro Personal, abre un libro nuevo de excel, o uno
cualquiera que tengas. Activa la grabadora de macros en el menu
Herramientas>Macro>grabadora de macros
- En el cuadro de dialogo que aparece selecciona guardar macro en libro
personal y acepta.
- Realiza cualquier acción, p.e.: selecciona la celda A1 y escribe un 1
deten la grabadora.
Acabamos de generar el libro de macros personal.

Ahora empezamos el proyecto para copiar columnas.
Abrimos el editor de vba, ALT+F11.
En el explorador de proyectos (ctrl + r) seleccionamos el VBA-Project
(PERSONAL.XLS) y agregamos un formulario (Menu>insertar>UserForm)
En el cuadro de propiedades (tecla de función F4) cambiamos la propiedad
caption escribe el nombre que quieres que aparezca en en el encabezado del
formulario, p.e. Copia columnas. y ajustamos unas propiedades

(name) = CopiaColumnas
Caption = Copia columnas
Height = 249
Width = 240
Luego las puedes volver a ajustar segun reordenes los controles que vamos a
depositar, ahora es para ajustar un poco según lo he colocado yo.

Agrega al formulario los siguientes controles con las siguientes propiedades
Un control label (etiqueta) deja el nombre que aparece por defecto (label1)
(name) = label1
Caption = Origen
Height = 18
Left = 12
Top = 12
Width = 90

Otro Control Label (etiqueta) deja el nombre (name) que aparece por defecto
(label2)
(name) = label2
Caption = Destino
Height = 18
Left = 126
Top = 12
Width = 90

Ahora insertamos dos ComboBox (cuadro combinado)

el primero
(name) = cboOrigen
Height = 18
Left = 12
Top = 36
Width = 102

el segundo
(name) = cboDestino
Height = 18
Left = 120
Top = 36
Width = 102

Agregamos dos ListBox (Cuadro de lista) dejamos los nombres por defecto

Para el primero cambiamos (ListBox1)
(name) = ListBox1
Height = 126
Left = 12
Top = 66
Width = 102

Para el segundo (ListBox2)
(name) = ListBox2
Height = 126
Left = 120
Top = 66
Width = 102

Y, por fin, el último control un CommandButton
(name) = CommandButton1
caption = Copia columnas
Height = 24
Left = 120
Top = 204
Width = 102

Ya hemos diseñado el formulario y ahora escribiremos el código (ten cuidado
con los saltos de línea)

Pulsamos en el formulario con el botón derecho del ratón y seleccionamos ver
código y escribimos todo lo que viene a continuación si todo tiene los
mismos nombres podras copiar y pegar.

Private Sub cboOrigen_Change()
Dim LibroOrigen As Workbook

Set LibroOrigen = Workbooks(cboOrigen.List(cboOrigen.ListIndex))
Dim Hoja As Worksheet
ListBox1.Clear
For Each Hoja In LibroOrigen.Worksheets
ListBox1.AddItem Hoja.Name
Next Hoja
End Sub

Private Sub cboDestino_Change()
Dim LibroOrigen As Workbook

Set LibroOrigen = Workbooks(cboOrigen.List(cboOrigen.ListIndex))
Dim Hoja As Worksheet
ListBox2.Clear
For Each Hoja In LibroOrigen.Worksheets
ListBox2.AddItem Hoja.Name
Next Hoja
End Sub


Private Sub CommandButton1_Click()
Dim ColumnaOrigen As String
Dim ColumnaDestino As String
Dim LibroOrigen As Workbook
Dim LibroDestino As Workbook

Set LibroOrigen = Workbooks(cboOrigen.List(cboOrigen.ListIndex))
Set LibroDestino = Workbooks(cboDestino.List(cboDestino.ListIndex))

ColumnaOrigen = InputBox("Columna del libro de origen")
ColumnaDestino = InputBox("Columna del libro destino")

LibroOrigen.Worksheets(ListBox1.List(ListBox1.ListIndex)).Columns(ColumnaOrigen).Copy
_
Destination:=LibroDestino.Worksheets(ListBox2.List(ListBox2.ListIndex)).Columns(ColumnaDestino)

LibroDestino.Worksheets(ListBox2.List(ListBox2.ListIndex)).Activate
Application.CutCopyMode = False

Unload Me
End Sub

Private Sub ListBox1_Click()
Dim LibroOrigen As Workbook

Set LibroOrigen = Workbooks(cboOrigen.List(cboOrigen.ListIndex))
LibroOrigen.Worksheets(ListBox1.List(ListBox1.ListIndex)).Activate
End Sub

Private Sub ListBox2_Click()
Dim LibroDestino As Workbook

Set LibroDestino = Workbooks(cboDestino.List(cboDestino.ListIndex))
LibroDestino.Worksheets(ListBox2.List(ListBox2.ListIndex)).Activate

End Sub
Private Sub UserForm_Initialize()
Dim Libro As Workbook

For Each Libro In Workbooks
If UCase(Libro.Name) <> "PERSONAL.XLS" Then
cboOrigen.AddItem Libro.Name
cboDestino.AddItem Libro.Name
End If
Next Libro
End Sub

Ya no queda poco, ahora toca escribir el proceso que inicia el formulario.
Insertamos un modulo nuevo menu>Insertar>módulo

En el módulo escribimos el siguiente código:

Sub InicioCopiaColumnas()
CopiaColumnas.Show
End Sub

Y ya hemos acabado. Cierra Excel y confirma que quieres guardar el libro
Personal.xls

Ahora probamos lo que hemos hecho.
Abre dos libros, preferiblemente copias de libros que tengan valores en
alguna columna o prepara dos libros para las pruebas.

Pulsa ALT + F8 y aparecera el dialogo de ejecutar las macros, selecciona la
que acabamos de crear
PERSONAL.XLS!InicioCopiaColumnas

aparecera el formulario. Seleccionamos en el combo de origen el nombre del
libro que queremos de origen de datos, y en el listbox apareceran las hojas
que contiene seleccionamos la que queremos como origen y vemos que la hoja
que hemos seleccionado se activa.
Ahora en el destino seleccionamos el libro de destino, y la hoja que
seleccionemos se activa.
Pulsamos el botón y nos aparece un inputbox donde pondremos los nombres de
las columnas p.e.: a:h o una sola columna b y aceptamos.
No admite rangos discontinuos de columnas por ejemplo a:g, h ocurrirá un
error que no está controlado, eso te lo dejo a ti.

Ahora nos aparece otro dialogo donde pondremos la columna destino p.e.: c

Al aceptar nos copiara las columnas elegidas y se cierra el formulario.

Espero que hayas llegado hasta el final y te sea de utilidad.

Un saludo,
Juan



"Desiree" escribió
Hola Juan,
Gracias por tu respuesta. Yo tengo grabada la macro en mi libro de macros
personal y las hojas de los diferentes libros (B, C, D, etc ) tienen el
mismo
nombre (los libros sí que evidentemente tienen nombres diferentes). La
macro
es muy sencilla: abre el libro A y selecciona cuatro columnas y las copia
en
el libro B. Entonces lo que me gustaría es que cuando tengo abierto el
libro
C haga lo mismo, sin tener que volver a grabar la macro específicamente
para
ese libro.
Gracias y saludos,
Desiree


"Juan M" escribió:


"Desiree" escribió
> Hola,
> Primero que nada, soy novata en esto de las macros. La pregunta: tengo
> una
> macro que copia un par de columnas de un libro de excel llamado A en
> otro
> llamado B. Además tengo los libros C y D en los que me gustaría
> ejecutar
> también la macro. Mi pregunta es, ¿necesito crear la macro también en
> los
> libros C y D? ¿o hay alguna forma de que al intentar ejecutar la macro
> del
> libro B, en el libro C no me dé el error 9?
> Gracias de antemano y saludos,
> Desiree

Hola Desiree,

Para poder emplear la misma macro en varios libros, puedes crear un
complemento (add-in) o guardar tu macro en el libro personal.
Surgirán problemas en el caso que comentas porque cada libro de esos en
los
que quieres emplear la macro tendrán un nombre de hojas diferentes,
aunque
se podrían hacer los arreglos suficientes para que te fuese preguntando
todo. Claro que para esto deberías proporcionar algún que otro dato más.

Un saludo,
Juan



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida