Procedimiento VBA

21/09/2006 - 13:35 por Fernando | Informe spam
Hola,

Mi pregunta es la siguiente ¿Que instrucción debería utilizar para evaluar
si un libro de trabajo está abierto? Me explico.
Tengo creado un procedimiento en un módulo de un libro de trabajo que toma
los datos de otro libro de trabajo. Yo QUIERO que para poder capturar los
datos de ese libro se tenga que obligatoriamente abrir el libro de trabajo de
origen. Por eso, quiero crear una instrucción en el procedimiento del libro
de destino que evalúe si el libro de trabajo de origen está abierto ó
cerrado. Si está abierto continúa con el resto de instrucciones pero si está
cerrado con la instrucción GOTO redireccionarle a una etiqueta que produzca
un mensaje al usuario (MsgBox) diciendole que debe abrir el libro antes.

Espero haberme explicado correctamente.
Muchas gracias y un saludo,
 

Leer las respuestas

#1 Héctor Miguel
21/09/2006 - 21:23 | Informe spam
hola, Fernando !

... Que instruccion deberia utilizar para evaluar si un libro de trabajo esta abierto? [...]



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]

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(ByVal Nombre As String) As Boolean
Dim Libro As Workbook
On Error Resume Next
Set Libro = Workbooks(Nombre)
EsLibroAbierto = (Not Libro Is Nothing)
Set Libro = Nothing
End Function

=> la forma de 'llamar' a esta funcion es +/- como sigue...
If Not EsLibroAbierto("Nombre del libro.xls") Then Workbooks.Open "C:\Ruta y\Nombre 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 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<-

Preguntas similares