¿Se puede cruzar 2 libros con el mismo código?

Tengo esta inquietud y alavés se me ha presentado

Tengo 2 libros con diferentes nombres,, estanban vinculados pero decidí sepáralos,,

Ahora cada quien es independiente,, pero ocurrió lo impensable

Resulta que al abrir el uno de ellos, el otro si lo abro se cruza con el primero, quedando oculto el segundo

Y después excel se cierra buscando solución,,, entonces para trabarlos tengo que cerrar uno para poder abrir el otro y viceversa

Los 2 los hice prácticamente con el mismo código y casi los mismos formularios, solo cambie algunas cosas,, antes cuando estaban enlazados funcionaban bien, pero me dijeron que tenían que llevar todo por separado,,

Y ahora no puedo trabajar con los 2 libros abiertos, ya que uno es de servicios y el otro es de venta de productos,,

¿Q puedo hacer?

1 Respuesta

Respuesta
1

Hello Lug,

Agarre el libro que me mandaste, le hice una copia y abrí los dos como si fueran dos libros diferentes, no tienes idea el desmadre que se hizo: video demo

Eso paso porque tienes códigos en el evento Activate y Deactivate del workbook que deberian ir en el Open y el Close. No se si sera el mismo libro, pero también si usas Application.Visible = False, te esconde todos los libros.

Hay que ser cuidadoso con esos eventos.

Te voy a explicar un poco como funcionan. El objeto Workbook tiene los siguientes eventos (entre otros):

Open, Close, Activate, Deactivate.

Quizás algunas personas se confunden entre Open y Activate o Close y Deactivate.

El evento Open se ejecuta una sola vez, y es cuando se abre el archivo, ese evento ocurre una única vez, Open = Abrir en español. Así que todos los códigos que estén ahí, se ejecutaran en ese preciso momento y nada mas. ¿Simple no?

Lo mismo pasa con el evento Close, Close = Cerrar en español. Y eso solo ocurre una vez.

Sin embargo, los eventos Activate y Deactivate funcionan diferente.

Activate se va a ejecutar tantas veces como tu libro tome el foco. Osea, si abres un segundo libro, el libro anterior pierde el foco. Si regresas a el, vuelve a tomar el foco y el evento Activate se vuelve a ejecutar.

Lo mismo con Deactivate pero al revés, tantas veces como pierda el foco. Así que si tienes dos o mas libros disparando macros cada vez que se Activa uno y se Desactiva el otro y viceversa, se hace el desmadre que viste en el vídeo XD.

Revisa eso en tus dos libros.

Otro consejo que mucha gente pasa por alto y usa el evento Activate (que en realidad ni Activate ni Select se deberían usar nunca, en el 99% de los casos no se necesitan) es que si vas a ejecutar operaciones en el libro donde reside la macro, lo correcto es usar ThisWorkbook en lugar de ActiveWorkbook.

Perdón, el evento Close en realidad se llama BeforeClose

PD: y si cruzas dos libros, sale un librito.. (broma)

Hola Andy,  

Los libros los estamos trabajando por separado, es decir si uno está abierto el otro no se debe iniciar y viceversa,  pero aveces se necesitan hacer trabajo en el uno y el otro, y es dispendioso estar cerrando y abriendo

Entonces escogí a uno de los libros (productos) y le quité todo esos eventos en el thisworkbook y en la hoja soporte, es decir los volvi como si estuviera en el Excel,  y aún así sigue el inconveniente

Y para remate se me quemo la board de la pc, te estoy escribiendo desde el.Móvil

Los libros los actualizo en mi computadora y después los llevo a dónde se van a usar

Dices que escogiste uno de los libros, pero deberías hacerlo con los dos no con uno solo.

¿Con el otro también?

¿Pero cómo? Entonces perdería toda la gracia de VB,. Se verían las barras, las fichas, todo el Excel, y la idea de hacer esto así es emular a un software, que se vea bonito, y no usar Excel, sino los botones y las macros programadas

Como hago para que se abra así como está pero que al abrir otro libro o el de productos no se oculte, que tengo que quitar

En el archivo LIBRE. ¿xlms?

Como te dije, los códigos para eso los debes poner en el evento Open. Si quieres restaurar todo al terminar de trabajar, lo restauras en el evento BeforeClose.

No puedes (o mas bien no debes) poner esos códigos en Activate y Deactivate.

Ponlos en Open y BeforeClose. Y tu libro seguirá igual de bonito, pero con mejor rendimiento.

¡Gracias! Ok. Voy a corregir y te comento, 

Imagínate q ayer hubo un aguacero como decimos acá cuando llueve duro con truenos, q por lo general se va la.luz, la energía eléctrica, bueno pasa y acontece q  trabajando la macro del aplicativo el pc se apagó al venir la.luz se abrió el archivo y en la hoja factura se habían dañado misteriosamente las fórmulas, , por q ocurre eso?  Me toco ubicarlas de nuevo y recalcular todo manualmente hasta dejarlo a punto otra ves operativo.  José si es la secretaria q accidentalmente daña las fórmulas , ( todas las hojas están protegidas) o la descarga i fallo energético.produjo ese desarreglo

Q piensas

Yo te comento si puedo hacer lo que me sugieres, ya que se me. Daño la pc y hasta la otra semana me la envían,. Mientras seguirá trabajando así, sin abrir otro Excel hasta que yo vaya y remplace el archivo, ya. Tengo que hacerlo con el archivo actualizado, es decir el que esta llevando el consultorio, pues todos los días se ingresan clientes y se factura

No se si lo de la luz haya dañado las fórmulas, puede que si, puede que no, nunca me ha pasado. Quedo a la espera de más detalles de como te fue.

Andy

Bueno me conseguí una pc portátil , voy a ver el archivo, pero antes te pregunto

Cuando dices quitar todos los activate te referís alos enlaces de los botones , los q tengo en el.la hoja del menú, y en cada hoja para ir y  regresar en el aplicativo, poremplo

Hoja1.activate. ?? 

O  es el thisworkbook dónde están los códigos para ocultar todo?

Es decir dónde voy a colocar los eventos beforeclose y open ? 

Estoy un poco confundido

Ahorita voy a buscar el archivo para traerlo de vuelta mientras me respondes

Se me había olvidado decir

Vi el demo y veo q abriste el mismo libro 2 veces, es decir el original y copia , pero lo q te decía era el archivo llamado libre y el de productos , q básicamente tiwwn el casi el mismo código sino q uno es de artículos y el otro es de servicios  pero al abrir uno y después el otro no hace ese efecto q vi en el demo, aca.lo q ocurre es q el segundo se oculta y el.primero se antepone , es decir el primero q se apertura es el q va a funcionar , el otro queda escondido y si desoculto todo  el Excel se cierra y se abre uno nuevo en blanco. , Eso es lo q.ocurre acá pero bueno es básicamente lo mismo q al abrir 2 iguales

Nada me puedes pasar un demo donde colocar estos eventos

Si es en el thisworkbook, lo coloque con el evento "beforeclose" pero los

 Application.ScreenUpdating = False   al quitarlos  me hace efectos cascadas,  nose  como arreglarolos, si los quito no me deja ocultar nada.

te paso foto del codigo y dime si esta bien

y en la hoja soporte

¿Dónde esta el error o que tengo que quitar?

Ok,, bien

Como todavía no me has respondido,, el evento el thisworkbook,,

Aquí en este código,, lo puedes ver en la imagen de arriba

Option Explicit
Public saliendo As Boolean

Private Sub Workbook_beforeclose(Cancel As Boolean)
Cancel = True
MsgBox "Modo de cierre no permitido, Presione el Boton SALIR del Sistema..."

Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
ActiveWindow.DisplayWorkbookTabs = True

Application.ScreenUpdating = False
Dim crrtWs As Worksheet: Set crrtWs = ActiveSheet
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
ws.Activate
With ActiveWindow
.DisplayHeadings = True
End With
Next ws
crrtWs.Activate
Application.ScreenUpdating = True
End Sub

Resulta para salir del programa es por la puertecita que esta en la hoja menu,, y clausure el botón cerrar por, pero ahora al intentar cerrar por ali me desbloquea las hojas,,

Como haría entonces,,, como estaba antes esta bien, pero el activate como dices, me genera problemas con el otro libro

Ahora ya puedo abrir los 2 libros sin ningún problema, pero al cerrar un se me cierra el otro también,

Mándame los dos libros Lug. Así esta difícil poder ayudarte.

¡Gracias!

Enlace del archivo libre (servicios y terapias)

https://drive.google.com/open?id=1WzEWpAsjydYm7X849HP0GkE-A6UhAKyp 

enlace de archivo producto

https://drive.google.com/open?id=1w9GK3Tnhop3Rm144_3ZmyezHUKYXer64 

1. La idea es que al cerrar el programa al final del día,, sea por el icono de la puerta que esta en la hoja menu, y que al tratar de cerrar por excel no se abran los encabezados y barras

2. Que se puedan abrir los 2 libros sin problema y se puedan cerrar independientemente uno del otro,

3. En la hoja factura todo quede bloqueado excepto la celda de la fecha, pues no he podido bloquear la celdas donde esta la lista desplegable,, ya que si la bloqueo el filtro no funciona, así que la tuve que validar pero aun así queda desbloqueada, aunque así esta bien,,

Lug estuve revisando tus libros, y me será imposible ayudarte. Seré honesto contigo, es una locura el proyecto VBA. En programación le llamaríamos "código espagueti" de lo enredado que está. Muchos códigos redundantes y sin sentido que me tomaría demasiado tiempo arreglar sin cobrar absolutamente nada, espero que lo entiendas.

Un ejemplo muy simple de algo que me encontré:

Application.EnableEvents = False
With Application
   .EnableEvents = False
End With

Es la misma instrucción haciendo exactamente lo mismo pero escritas dos veces un poco diferentes.

Yo entiendo que no sabes mucho de VBA y que estas aprendiendo, y precisamente por eso el mejor consejo que te puedo dar a ti ya todos los que están aprendiendo, es que no se lancen a hacer proyectos así de grandes sin saber lo que hacen. Primero hagan algún curso almenos básico. Eso de "ir aprendiendo en el camino" no funciona conmigo.

Tomate tiempo para estudiar antes de empezar a poner en producción tus ideas, porque al final terminaran siendo las ideas de otros. Si yo te arreglo todo eso, no aprenderás nada, caerás en la comodidad de que alguien en Todoexpertos arregle tus libros Excel.

Y no me digas que con el arreglo que yo te haga aprenderás algo porque eso no es verdad. La programación es 80% teoría y 20% practica. Te lo he demostrado muchas veces dándote conceptos de que significan cosas, como la charla sobre los eventos Activate, Open, etc etc. Todo eso es teórico, y si no conoces los conceptos, jamas vas a tener éxito en la práctica.

Por ahora te diré por qué se te cierran los dos libros, y aquí viene de nuevo una charla de TEORÍA:

Application. Quit cierra todos los libros de Excel, en general lo que hace esa instrucción es sacar la aplicación Excel de la memoria por completo, en consecuencia, todos los libros, al ser subordinados de la "Aplicacion", se cerrarán.

Para cerrar un solo libro, debes usar una referencia a dicho libro y su método . Close

Por ejemplo: ThisWorkbook. Close

¡Gracias!

buen dia sr andy,, la verdad me esperaba tu respuesta, pues ya me has ayudado harto,, y esperar mas seria falta de respeto,, en verdad no hubiera podido terminar esto sin tu ayuda,,, y creo q es suficiente,, no pense q este proyecto fuera tan grande..  en realidad ya el archivo esta funcional 95%,, se manejara asi: se trabaja un libro sin abrir el otro,, para no pejudicarse entre ellos,,

Gracias, por tu ayuda

Seguiré preguntando en este foro lo que se me ocurra en mi cabeza, detalles, algo para mejorar,, aunque creo que ya el libro esta bien,,, he eliminado muchas cosas por concejo del experto abraham,, en realidad este código es de su autoría, transformado por mi, viendo youtube, google y los foros excel,, este es un favor y regalo que le estoy haciendo a esta dra que me ha ayudado mucho en mi recuperación sin cobrarme, y por ende yo tampoco le cobro, es como un trueque, así que he querido organizar su consultorio para que no lo lleve como una tienda de barrio, me gusta la programación pero nunca la he entendido,, y aun así trato de adaptar códigos de otros que los regalan en sus blog,, bueno tengo que saber al menos un poquito de todo,,

Solo señalame los módulos y formularios, y hojas donde están los posibles errores, y yo me encargo de arreglarlo por fa.

No estoy diciendo que me los tranformes, solo dime o muestra donde están las fallas, ya corregí las que mencionas aquí para cerrar el libro,,

Me insteresa más el libro de servicio,, "LIBRE" ya con ese yo corrijo el otro

Hay 15 módulos (con varias macros cada uno) 4 formularios con más macros, y 11 hojas también con varias macros cada una. Es mucho para revisar. Cada vez que abro uno al azar siempre veo algo mal. Por ejemplo abrí uno que tenia dos variables declaradas con la palabra Global:

Global FechaPri As Date
Global NombreApe As String

Hasta donde yo se, ninguna variable se declara así. Si tu quieres una variable que se pueda usar de manera global en todo el libro, debes declararla con la palabra Public, así:

Public FechaPri As Date
Public NombreApe As String

Siempre que tenga un tiempo libre y este aburrido le echare un vistazo y seguiré comentando acá.

Andy

¡Gracias!

ahhhh,, bueno te digo algo,, las macros sencillas son mías, (la mayori SON PARA PROTEGE Y DESPROTEGE LA HOJA en caso de falla) y los códigos activex son de autores varios, entre ellos tu persona.. y la mayoría de expertos de aquí, todo son códigos adaptados al libro, incluso los formularios,, mientras el libro este funcional y no se bloquee, para mi bien,,

Le quite muchas imágenes y colores formatos para que no se cargue tanto.. la hoja soporte la elimine, y pase los botones MOSTRART Y OCULTAR para la hoja menu pero muy pqñs.  elimine el form soporte y alguna autoformas,,,

Ok gracias

los CONTROLES activate q enlanzan las hojas no se q otro codigo se utiliza,, pues no me gusta los hipervinculos  e imagenes de autoformas para macros,, por ej,, hoja1.activate me lleva ala hola 1 con un boton de comando.. q otra opcion hay?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas