Evitar cierre de Archivo

03/10/2006 - 21:23 por José A. Castrejón | Informe spam
Hola Buenas tardes. Deseo saber si es posible evitar que un archivo se cierre
mientras esté otro abierto.
Uso un archivo para emitir facturas, en éste tengo un combobox el cual toma
los nombres de los clientes de otro archivo. La cuestion es que si el usuario
cierra el archivo de catalogo, el combobox deja de funcionar o me envía un
error.

He intentado con Auto_Close y con el evento Before_Close, y envío un mensaje
de advertencia al usuario, de hecho siempre actualizo una celda para que me
pregunte si quiero guardar cambios, y si en ese momento el usuario aprieta el
boton aceptar el archivo se cierra.
Si esto no es posible, ¿se puede actualizar un combobox desde un archivo
cerrado ? he intentado :

ComboBox1.ListFillRange = "Cat_Ctes.xls!CLIENTES" y esto funciona si el
archivo está abierto, de otra forma no funciona.

Si ésto ultimo tampoco se puede, ¿Existe algun evento del combobox que se
ejecute "antes" de Change?, si es así, podria en ese evento verificar si el
archivo está abierto y actualizar la propiedad del combobox... supongo...

Ahora bien si el archivo de facturas está cerrado el archivo de clientes
debe permitir el cierre. Tengo un codigo para saber si algun libro está
abierto o no (codigo que me dio Hector Miguel si recuerdo bien). Y lo utilizo
para abrir el catalogo de clientes cuando abro facturas.

Gracias

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
04/10/2006 - 05:53 | Informe spam
hola, José !

podrias evitar que el libro con el catalogo de origen se pueda cerrar mientras este abierto el archivo de facturas [p.e.]
en el proyecto de macros del libro 'catalogo' [Cat_Ctes.xls] copia/pega los siguientes codigos:

a) en un modulo de codigo general...

Function EsArchivoAbierto(ByVal Nombre As String) As Boolean
Dim Libro As Workbook
On Error Resume Next
Set Libro = Workbooks(Nombre)
EsArchivoAbierto = (Not Libro Is Nothing)
Set Libro = Nothing
End Function

b) en el modulo de codigo del libro [ThisWorkbok]

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = EsArchivoAbierto("el archivo de facturas.xls")
End Sub

saludos,
hector.

__ la consulta original __
... evitar que un archivo se cierre mientras este otro abierto.
... un archivo para emitir facturas... un combobox... toma los nombres de los clientes de otro archivo
... si el usuario cierra el archivo de catalogo, el combobox deja de funcionar o me envia un error.
He intentado con Auto_Close y con el evento Before_Close, y envio un mensaje de advertencia al usuario
de hecho siempre actualizo una celda para que me pregunte si quiero guardar cambios
y si en ese momento el usuario aprieta el boton aceptar el archivo se cierra.
Si esto no es posible, se puede actualizar un combobox desde un archivo cerrado ? he intentado:
ComboBox1.ListFillRange = "Cat_Ctes.xls!CLIENTES" y esto funciona si el archivo esta abierto, de otra forma no funciona.
Si esto ultimo tampoco se puede, Existe algun evento del combobox que se ejecute "antes" de Change?
si es asi, podria en ese evento verificar si el archivo esta abierto y actualizar la propiedad del combobox... supongo...
Ahora bien si el archivo de facturas esta cerrado el archivo de clientes debe permitir el cierre.
Tengo un codigo para saber si algun libro esta abierto o no... lo utilizo para abrir el catalogo de clientes cuando abro facturas.
Respuesta Responder a este mensaje
#2 José A. Castrejón
04/10/2006 - 22:10 | Informe spam
Como siempre funciona muy bien, muchas gracias. Ahora me viene a la mente la
segunda pregunta que hice, en este caso estoy trabajando con un archivo
dependiente de otros, pero si necesitara tener varios archivos abiertos, ¿No
se puede actualizar uncombobox de un archivo cerrado ?
Gracias por tu respuesta

"Héctor Miguel" wrote:

hola, José !

podrias evitar que el libro con el catalogo de origen se pueda cerrar mientras este abierto el archivo de facturas [p.e.]
en el proyecto de macros del libro 'catalogo' [Cat_Ctes.xls] copia/pega los siguientes codigos:

a) en un modulo de codigo general...

Function EsArchivoAbierto(ByVal Nombre As String) As Boolean
Dim Libro As Workbook
On Error Resume Next
Set Libro = Workbooks(Nombre)
EsArchivoAbierto = (Not Libro Is Nothing)
Set Libro = Nothing
End Function

b) en el modulo de codigo del libro [ThisWorkbok]

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = EsArchivoAbierto("el archivo de facturas.xls")
End Sub

saludos,
hector.

__ la consulta original __
> ... evitar que un archivo se cierre mientras este otro abierto.
> ... un archivo para emitir facturas... un combobox... toma los nombres de los clientes de otro archivo
> ... si el usuario cierra el archivo de catalogo, el combobox deja de funcionar o me envia un error.
> He intentado con Auto_Close y con el evento Before_Close, y envio un mensaje de advertencia al usuario
> de hecho siempre actualizo una celda para que me pregunte si quiero guardar cambios
> y si en ese momento el usuario aprieta el boton aceptar el archivo se cierra.
> Si esto no es posible, se puede actualizar un combobox desde un archivo cerrado ? he intentado:
> ComboBox1.ListFillRange = "Cat_Ctes.xls!CLIENTES" y esto funciona si el archivo esta abierto, de otra forma no funciona.
> Si esto ultimo tampoco se puede, Existe algun evento del combobox que se ejecute "antes" de Change?
> si es asi, podria en ese evento verificar si el archivo esta abierto y actualizar la propiedad del combobox... supongo...
> Ahora bien si el archivo de facturas esta cerrado el archivo de clientes debe permitir el cierre.
> Tengo un codigo para saber si algun libro esta abierto o no... lo utilizo para abrir el catalogo de clientes cuando abro facturas.



Respuesta Responder a este mensaje
#3 Héctor Miguel
04/10/2006 - 23:27 | Informe spam
hola, José !

... la segunda pregunta que hice, en este caso estoy trabajando con un archivo dependiente de otros
pero si necesitara tener varios archivos abiertos
No se puede actualizar uncombobox de un archivo cerrado ?



ve si te es de utilidad algo de lo comentado en las siguientes conversaciones: -> http://tinyurl.com/hbpz8

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 José A. Castrejón
05/10/2006 - 01:35 | Informe spam
Gracias, ya lei las conversaciones,sin embargo en ellas se habla de
actualizar CELDAS desde otro archivo y no estoy seguro de si éso se aplica a
mi caso o al menos no sabría como aplicarlo.
Yo utilizo los combobox a manera de "Ayuda" para que se puedan ver los
catálogos y se seleccionen clientes y ahora productos también, (con tus
codigos ya logre que no se cierren los archivos que necesito abiertos y
también con tu ayuda estoy "forzando" a que se abran los archivos si es que
no fueron abiertos previamente).
Ahora se me ocurre que podria tener otros combobox que trajeran información
de otros catálogos que se utilizan, siendo éste el caso no sería mejor
actualizar un combobox (ListFillRange) desde un archivo aunque esté cerrado?
...en caso que se pueda .


"Héctor Miguel" wrote:

hola, José !

> ... la segunda pregunta que hice, en este caso estoy trabajando con un archivo dependiente de otros
> pero si necesitara tener varios archivos abiertos
> No se puede actualizar uncombobox de un archivo cerrado ?

ve si te es de utilidad algo de lo comentado en las siguientes conversaciones: -> http://tinyurl.com/hbpz8

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#5 Héctor Miguel
05/10/2006 - 03:48 | Informe spam
hola, José !

... ya lei las conversaciones,sin embargo en ellas se habla de actualizar CELDAS desde otro archivo
... no estoy seguro de si eso se aplica a mi caso o al menos no sabria como aplicarlo.
... utilizo los combobox a manera de "Ayuda" para que se puedan ver los catalogos y se seleccionen clientes
... ahora productos tambien... ya logre que no se cierren los archivos que necesito abiertos
y... estoy "forzando" a que se abran los archivos si es que no fueron abiertos previamente).
Ahora se me ocurre que podria tener otros combobox que trajeran informacion de otros catalogos que se utilizan
... no seria mejor actualizar un combobox (ListFillRange) desde un archivo aunque este cerrado?
...en caso que se pueda ...



1) en los ejemplos de las conversaciones sugeridas [probablemente] encontraras dos instrucciones 'puente' [me explico]
una que dice +/- asi: Registros.Open Ejecutar, , adOpenKeyset, adLockOptimistic
luego una serie de instrucciones a manera de 'bucles'
y finalmente una linea que TERMINA +/- como sigue: ... ConectarCon.Close
terminando el codigo con: Set ConectarCon = Nothing: Set Registros = Nothing: Set Ejecutar = Nothing

2) podrias sustituir TODAS las lineas 'intermedias' [entre el .Open y el .Close] con algo +/- como lo siguiente:
[asumiendo que te decides por utilizar una hoja 'oculta' para rescatar temporalmente los datos y 'subirlos' al combo]
[... las otras lineas del codigo ...]
With Worksheets("Oculta")
.Range("a1").CopyFromRecordset Registros
With Range(.Range("a1"), .Range("a1").End(xlToRight).End(xlDown))
Listado = .Value
.ClearContents
End With
End With
With UserForm1
.ListBox1.ColumnCount = Registros.Fields.Count
.ComboBox1.List = Listado
.Show vbModeless
End With
[... las lineas finales del codigo ...]

3) solo 'decide' si la lectura del libro cerrado sera llamada con referencias a hojas y rangos... o a rangos-nombrados -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida