Bienvenido a la mayor comunidad de usuarios EXCEL

Regístrate ahora y podrás: / 💪 Hacer preguntas a los expertos / ⬇️ Descargar ejemplos y plantillas / 🏅 Acceder a contenidos premium

Regístrate gratis

📕 Abrir libro en otra instancia de Excel

arperez

Member
Hola a [email protected]! 👋

Necesito una ayuda, se podrá realizar lo siguiente.
Abrir un libro en una instancia (nueva y separada) de Excel, para que los nuevos libros que abra, no usen la misma instancia del libro abierto.
Estuve probando, cree un acceso directo al libro, le puse en las propiedades del acceso lo siguiente:
Código:
"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" /x /e "C:\Prueba\Prueba.xlsm"

Y puede abrir el libro en una instancia distinta a los libros abiertos, pero los libros nuevos que abro, se abren en esta misma instancia. :(
Será posible crear una macro dentro del libro, que funcione dentro del evento
Código:
Private Sub Workbook_Open()

Muchas gracias.
Saludos.
 

Héctor Miguel

Well-known member
una instancia de excel solo puede administrar otra instancia "separada" (de excel) si la primera mantiene el control desde la apertura de la segunda (GetObject(... o CreateObject(... )

lo del "_open" depende de... para cual instancia lo pretendes y que quieres que controle ?
 

arperez

Member
pretendo que al abrir el libro, se abra en un instancia "separada" (de excel), para ocultar la instancia excel abierta de se libro y que al cerrar esa instancia de ese libro, no se cierren los otros libros y pueda abrir nuevos libros sin que se oculten.

Adjunto un archivo de ejemplo que se llama "arperez_instancias_excel.xlsm".

Al abrir el libro, se va ocultar excel y va mostrar un formulario con tres botones:

CERRAR: Cierra excel.
MOSTRAR: Muestra excel.
OCULTAR: Oculta excel.

Será posible realizar lo que digo?
 

Adjuntos

  • arperez_instancias_excel.xlsm
    13,8 KB · Visitas: 4

Héctor Miguel

Well-known member
pretendo que al abrir el libro, se abra en un instancia "separada" (de excel), para ocultar la instancia excel abierta de se libro y que al cerrar esa instancia de ese libro, no se cierren los otros libros y pueda abrir nuevos libros sin que se oculten
(creo que) ya entiendo lo que pretendes "controlar", el detalle es que existe una serie de imponderables de los cuales necesitas estar consiente, ya que algunos (la mayoria) NO estaran bajo tu completo control (p.ej.)

1) en que version de excel esperas que se abra tu libro ?
- hay un parte-aguas en el comportamiento entre las versiones 2010 (y previas) versus 2013 (y posteriores)

2) quien (o como) se abrira tu archivo ?
- por macros ?... por acciones del usuario ?... otra forma ?

3) cuando se abra tu libro, sera el primero ? (o ya habra otro excel "en ejecucion" ?)
- si tu libro es segundo (o posterior) no podras evitar que se abra en la misma instancia que otro(s)
- a menos que lo abras desde un atajo que asegure su apertura en instancia aparte (puede ser un *.vbs u otro medio)

4) si tu libro es EL PRIMERO que arranque excel, la situacion puede ser (ligeramente) mas simple, bastaria con agregar (con otras ?) las siguientes instrucciones en el modulo del ThisWorkbook
Private Sub Workbook_Open()
Application.IgnoreRemoteRequests = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.IgnoreRemoteRequests = False
End Sub

5) otras formas de abrir (archivos de) excel en instancias separadas, hay muchas, analiza articulos como estos (entre otros):
- How to force Excel to open in a new instance by default
- 7 Ways to Open Multiple Instances of Excel
- Opening workbooks by running separate instances of Excel
- How to Open Multiple Instances of Excel

6) finalmente (y no por ello menos importante)
a) TEN CUIDADO si alguna instancia de excel queda oculta al "terminarse" (se tendria que re-iniciar el sistema)
b) NUNCA cierres un libro de excel estando cargado un formulario
c) tampoco sabes como pueda reaccionar un usuario ante situaciones "desconocidas" (???)
d) si no estas seguro de estar en instancia separada, NO uses Application.Quit cambia por ThisWorkbook.Close
 

arperez

Member
alguna novedad o comentario ?
Estuve viendo los enlaces y analizado lo que dices, coincido con que no se como van a reaccionar las personas y si podre tener el control completo de excel o de las pc donde se vayan usar el libro, hay que tener muchas variables en cuentas, por el no veo una opción buena para lo que busco, porque si uso un acceso directo con la propiedad
Código:
"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" /x /e "C:\Prueba\Prueba.xlsm"

Los próximos libros que abro, se abren dentro de la misma instancia del libro que quiero controlar :( quedando ocultos, hasta que no cierre el formulario o cierre el libro, no puedo trabajar con ellos :( tampoco se si con vba se le puede decir al libro que cambie el registro de excel, según la versión de OS, para que fuerce la apertura de excel en nuevas instancias de forma predeterminada cuando abra, pero tal como dije antes no controlo las pc de las demás personas, es que a veces estamos haciendo un trabajo con un libro, queremos consultar otro y si no puedo ver la información después de abrirlo, de que me sirve usar un formulario, desde donde quiera controlar todo el libro.

Entiendo que los Los formularios en Excel son un método para ingresar datos a nuestras hojas y son de mucha utilidad porque nos ayudan a evitar errores en la captura de información, pero en ciertas ocasiones son un pequeño problema, cuando queremos que sean el centro de captura de información, hacer un libro de excel basado en solo formularios resulta algo complicado al final.

Le hago una pregunta, en todos sus años de uso de excel, usted a logrado crear algún libro donde se controle todo por formularios, ha podido hacer que abra en instancias separadas y que no interfiera con los demás libros?

Tengo muchas preguntas, pero todas enfocan al mismo punto, usar solo las hojas de calculo y en ocasiones recurrir al uso de formularios.
 

Héctor Miguel

Well-known member
crear algún libro donde se controle todo por formularios, ha podido hacer que abra en instancias separadas y que no interfiera con los demás libros?
1) al archivo de tu adjunto previo, deje esto en el modulo del "ThisWorkbok"
Código:
Private Sub Workbook_Open()
  Application.IgnoreRemoteRequests = True
  Application.Visible = False
  UserForm1.Show
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Application.IgnoreRemoteRequests = False
  Application.Visible = True
End Sub

2) lo que necesitas lo puedes hacer con un archivo de procesos de la siguiente forma:

a) abre un bloc de notas y copias > pegas (o escribes) SOLAMENTE las siguientes 4 lineas:
Código:
with createobject("excel.application")
.windowstate = -4137
.workbooks.open("c:\pruebas\master book.xlsm")
end with

=> nota que la ruta del workbook.open (y el nombre del archivo) HA DE SER IGUAL para todos los equipos/usuarios

b) ese archivo (de texto ANSI) lo guardas (p.ej. en el escritorio) con el nombre que quieras, solo asegura que la EXTension sea => .vbs <= (punto incluido)
=> cada usuario lo puede guardar donde quiera, solo debe hacer doble-clic para ejeturarlo

c) que hace cada parte ?
1) el *.vbs asegura que "el libro" se abra en instancia "nueva" (separada)
2) los "ignoreremoterequests" aseguran que otros libros NO se agreguen a la misma instancia
3) no te olvides que cada instancia NO comparte datos de manera transparente con otra(s)

y no olvides tampoco las recomendaciones del mensaje anterior
 

Temas similares

Arriba