2 opciones para trabajar archivo

29/09/2009 - 18:13 por Brenda | Informe spam
Cuál sería la instruccion para trabajar un archivo que "no se sabe si esta
abierto"
Aqui adjunto un ensayo como a mi me gustaria

Sub Proyecta()
If(ProyectaE1.xls).Está abierto
Windows("ProyectaE1.xls").Activate
Else
ChDir "C:\E1_11G12T"
Workbooks.Open Filename:="C:\E1_11G12T\ProyectaE1.xls
End Sub

Muchisimas gracias por su atención
Brenda

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
29/09/2009 - 20:02 | Informe spam
hola, Brenda !

Cual seria la instruccion para trabajar un archivo que "no se sabe si esta abierto"
Aqui adjunto un ensayo como a mi me gustaria

Sub Proyecta()
If(ProyectaE1.xls).Esta abierto
Windows("ProyectaE1.xls").Activate
Else
ChDir "C:\E1_11G12T"
Workbooks.Open Filename:="C:\E1_11G12T\ProyectaE1.xls
End Sub



voy a suponer que es una accion que se va a repetir varias veces en algun proceso
(con lo que seria mejor definir una funcion personalizada y pasarle el nombre del libro)

solo te sugiero no usar la instruccion Windows("...XLS").Activate
ya que no todas las configuraciones muestran la EXTension en la ventana de sus archivos (?)

si cualquier duda (o informacion adicional)... comentas?
saludos,
hector.

1) si NO se trata de archivos en red...
en un modulo de codigo normal ==Function EsLibroAbierto(Libro As String) As Boolean
On Error Resume Next
EsLibroAbierto = Len(Workbooks(Libro).Name)
End Function

-> la forma de llamar a esta funcion si quisierar abrir "el libro" es +/- como sigue...
If Not EsLibroAbierto("nombre del libro.xls") Then Workbooks.Open "c:uta yombre del libro.xls"

2) si SON archivos en red...
en un modulo de codigo normal ==Function EsLibroAbierto(Nombre As String) As Boolean
Dim Archivo As Byte
Archivo = FreeFile
On Error Resume Next
Open Nombre For Binary Access Read Write Lock Read Write As #Archivo
Close #Archivo
If Err.Number = 0 Then Exit Function
EsLibroAbierto = True
Err.Clear
End Function

-> la forma de llamar a esta funcion si quisierar abrir "el libro" es +/- como sigue...
If Not EsLibroAbierto("C:\Ruta y\Nombre del libro.xls") Then Workbooks.Open "C:\Ruta y\Nombre del libro.xls"

toma nota que en ambos casos el libro que se abre queda como libro activo
Respuesta Responder a este mensaje
#2 Brenda
30/09/2009 - 17:08 | Informe spam
Muchisimas gracias Hector, ademas de eficiente me pareció una solución muy
bonita y elegante.
Brenda

"Héctor Miguel" escribió:

hola, Brenda !

> Cual seria la instruccion para trabajar un archivo que "no se sabe si esta abierto"
> Aqui adjunto un ensayo como a mi me gustaria
>
> Sub Proyecta()
> If(ProyectaE1.xls).Esta abierto
> Windows("ProyectaE1.xls").Activate
> Else
> ChDir "C:\E1_11G12T"
> Workbooks.Open Filename:="C:\E1_11G12T\ProyectaE1.xls
> End Sub

voy a suponer que es una accion que se va a repetir varias veces en algun proceso
(con lo que seria mejor definir una funcion personalizada y pasarle el nombre del libro)

solo te sugiero no usar la instruccion Windows("...XLS").Activate
ya que no todas las configuraciones muestran la EXTension en la ventana de sus archivos (?)

si cualquier duda (o informacion adicional)... comentas?
saludos,
hector.

1) si NO se trata de archivos en red...
en un modulo de codigo normal ==> Function EsLibroAbierto(Libro As String) As Boolean
On Error Resume Next
EsLibroAbierto = Len(Workbooks(Libro).Name)
End Function

-> la forma de llamar a esta funcion si quisierar abrir "el libro" es +/- como sigue...
If Not EsLibroAbierto("nombre del libro.xls") Then Workbooks.Open "c:uta yombre del libro.xls"

2) si SON archivos en red...
en un modulo de codigo normal ==> Function EsLibroAbierto(Nombre As String) As Boolean
Dim Archivo As Byte
Archivo = FreeFile
On Error Resume Next
Open Nombre For Binary Access Read Write Lock Read Write As #Archivo
Close #Archivo
If Err.Number = 0 Then Exit Function
EsLibroAbierto = True
Err.Clear
End Function

-> la forma de llamar a esta funcion si quisierar abrir "el libro" es +/- como sigue...
If Not EsLibroAbierto("C:\Ruta y\Nombre del libro.xls") Then Workbooks.Open "C:\Ruta y\Nombre del libro.xls"

toma nota que en ambos casos el libro que se abre queda como libro activo



Respuesta Responder a este mensaje
#3 Brenda
04/10/2009 - 22:59 | Informe spam
Perdona Hector pero con el uso de esa función, que si bien resuelve mi
solicitud, presenta un problema. También te pido disculpas por no hacerte
conocer que el tabajo implica tener 5 o más archivos abiertos
simultaneamente, así como, llamar a cualquiera de ellos segun la necesidad
del ususario, desde un archivo master que contiene la función

Debido a que esa función siempre llama (abre nuevamente) el archivo
original, esté abierto o no, y si, el usuario ha introducido un cambio
interesante en el archivo recien abierto y no lo ha salvado, y vuelve a
utilizar la función para llamarlo, perderá ese cambio, pues el archivo que
aparecerá será el original.

La idea entonces es, que solo se utilice la función para abrir el archivo,
pero si el archivo ya está abierto sólo lo presente tal como lo hace la
instrucción:
"Windows("Nombre del libro.xls").Activate

Te ruego me disculpes nuevamente por no explcar la totalidad del problema, y
muchisimas gracias por la atención que prestes a la solución del problema.
Brenda



"Brenda" escribió:

Muchisimas gracias Hector, ademas de eficiente me pareció una solución muy
bonita y elegante.
Brenda

"Héctor Miguel" escribió:

> hola, Brenda !
>
> > Cual seria la instruccion para trabajar un archivo que "no se sabe si esta abierto"
> > Aqui adjunto un ensayo como a mi me gustaria
> >
> > Sub Proyecta()
> > If(ProyectaE1.xls).Esta abierto
> > Windows("ProyectaE1.xls").Activate
> > Else
> > ChDir "C:\E1_11G12T"
> > Workbooks.Open Filename:="C:\E1_11G12T\ProyectaE1.xls
> > End Sub
>
> voy a suponer que es una accion que se va a repetir varias veces en algun proceso
> (con lo que seria mejor definir una funcion personalizada y pasarle el nombre del libro)
>
> solo te sugiero no usar la instruccion Windows("...XLS").Activate
> ya que no todas las configuraciones muestran la EXTension en la ventana de sus archivos (?)
>
> si cualquier duda (o informacion adicional)... comentas?
> saludos,
> hector.
>
> 1) si NO se trata de archivos en red...
> en un modulo de codigo normal ==> > Function EsLibroAbierto(Libro As String) As Boolean
> On Error Resume Next
> EsLibroAbierto = Len(Workbooks(Libro).Name)
> End Function
>
> -> la forma de llamar a esta funcion si quisierar abrir "el libro" es +/- como sigue...
> If Not EsLibroAbierto("nombre del libro.xls") Then Workbooks.Open "c:uta yombre del libro.xls"
>
> 2) si SON archivos en red...
> en un modulo de codigo normal ==> > Function EsLibroAbierto(Nombre As String) As Boolean
> Dim Archivo As Byte
> Archivo = FreeFile
> On Error Resume Next
> Open Nombre For Binary Access Read Write Lock Read Write As #Archivo
> Close #Archivo
> If Err.Number = 0 Then Exit Function
> EsLibroAbierto = True
> Err.Clear
> End Function
>
> -> la forma de llamar a esta funcion si quisierar abrir "el libro" es +/- como sigue...
> If Not EsLibroAbierto("C:\Ruta y\Nombre del libro.xls") Then Workbooks.Open "C:\Ruta y\Nombre del libro.xls"
>
> toma nota que en ambos casos el libro que se abre queda como libro activo
>
>
>
Respuesta Responder a este mensaje
#4 Héctor Miguel
05/10/2009 - 01:09 | Informe spam
hola, Brenda !

... esa funcion... presenta un problema... el tabajo implica tener 5 o mas archivos abiertos simultaneamente
... llamar a cualquiera de ellos segun la necesidad del ususario, desde un archivo master que contiene la funcion
Debido a que esa funcion siempre llama (abre nuevamente) el archivo original, este abierto o no
... si, el usuario ha introducido un cambio interesante en el archivo recien abierto y no lo ha salvado
y vuelve a utilizar la funcion para llamarlo, perdera ese cambio, pues el archivo que aparecera sera el original.



no se como estes usando la funcion, pero lo abre SOLAMENTE SI NO esta ya presente en la sesion
si el archivo YA esta presente, la instruccion que llama a la funcion NO abre (nuevamente) dicho archivo

La idea entonces es, que solo se utilice la funcion para abrir el archivo
pero si el archivo ya esta abierto solo lo presente tal como lo hace la instruccion:
"Windows("Nombre del libro.xls").Activate



entonces, lo unico que hace falta (a la instruccion) es complementar el If...Then con un Else (+/- como sigue):

para la funion 1)
If Not EsLibroAbierto("nombre del libro.xls") _
Then Workbooks.Open "c:uta yombre del libro.xls" _
Else Workbooks("nombre del libro.xls").Activate

para la funcion 2 -archivos en red-)
If Not EsLibroAbierto("c:uta yombre del libro.xls") _
Then Workbooks.Open "c:uta yombre del libro.xls" _
Else Workbooks("nombre del libro.xls").Activate

saludos,
hector.
Respuesta Responder a este mensaje
#5 Brenda
05/10/2009 - 17:42 | Informe spam
Muchas gracias por tu pronta respuesta. El macro funciona bien cuando el
archivo requerido no está abierto, pero, por algiuna razon desconocida, no
hace caso a la instrucción Else, cuando el archivo ya está abierto, en cuyo
caso siempre llama al archivo original.

"Héctor Miguel" escribió:

hola, Brenda !

> ... esa funcion... presenta un problema... el tabajo implica tener 5 o mas archivos abiertos simultaneamente
> ... llamar a cualquiera de ellos segun la necesidad del ususario, desde un archivo master que contiene la funcion
> Debido a que esa funcion siempre llama (abre nuevamente) el archivo original, este abierto o no
> ... si, el usuario ha introducido un cambio interesante en el archivo recien abierto y no lo ha salvado
> y vuelve a utilizar la funcion para llamarlo, perdera ese cambio, pues el archivo que aparecera sera el original.

no se como estes usando la funcion, pero lo abre SOLAMENTE SI NO esta ya presente en la sesion
si el archivo YA esta presente, la instruccion que llama a la funcion NO abre (nuevamente) dicho archivo

> La idea entonces es, que solo se utilice la funcion para abrir el archivo
> pero si el archivo ya esta abierto solo lo presente tal como lo hace la instruccion:
> "Windows("Nombre del libro.xls").Activate

entonces, lo unico que hace falta (a la instruccion) es complementar el If...Then con un Else (+/- como sigue):

para la funion 1)
If Not EsLibroAbierto("nombre del libro.xls") _
Then Workbooks.Open "c:uta yombre del libro.xls" _
Else Workbooks("nombre del libro.xls").Activate

para la funcion 2 -archivos en red-)
If Not EsLibroAbierto("c:uta yombre del libro.xls") _
Then Workbooks.Open "c:uta yombre del libro.xls" _
Else Workbooks("nombre del libro.xls").Activate

saludos,
hector.



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida