Ayuda con macro

Hola Experto, podrías ayudarme con este caso.
Necesito implementar un VBA en excel que me permita identificar si un archivo en excel (ubicado en D:\ por ejemplo) está abierto como lectura.
Qué tipo de código puede utilizar, la idea es que dicho archivo sólo se pueda abrir una vez y cuando ya este abierto y otra persona quiera abrirlo le salga un mensaje (msgbox) que le diga intente más tarde.
Gracias amigo.

3 Respuestas

Respuesta
1
' Activar Referencia a Microsoft Excel XX.X Objet Library
Private Sub Command1_Click()
        Dim objExcel As Excel.Application
            If Abrir_Archivo("c:\Calculo.xls") Then    ' Llamamos a la Funcion que Verifica si esta Abierto
                MsgBox "El Archivo Esta en Uso!"
            Else
                MsgBox "El Archivo No Esta en Uso"
                Set objExcel = New Excel.Application
                ' Abrimos el Archivo
                Set xLibro = objExcel.Workbooks.Open("c:\Calculo.xls")
              objExcel.Visible = True
            End If
End Sub
' Ahora la Funcion
Function Abrir_Archivo(Nombre As String)
    Dim ArchivoN As Integer, ErrNum As Integer
        On Error Resume Next
        ArchivoN = FreeFile()
        Open Nombre For Input Lock Read As #ArchivoN
        Close ArchivoN
        ErrNum = Err                   ' Grabamos el Error si es 70 es por que Esta Abierto
        On Error GoTo 0
        Select Case ErrNum
            Case 0
                 Abrir_Archivo = False
            Case 70                     ' El Numero del Error Cuando Ya Esta Abierto
                 Abrir_Archivo = True
            Case Else
                 Error ErrNum
        End Select
End Function
Espero que esto te Ayude. Si necesitas más información no dudes en preguntar.
V. Pitcher !
Respuesta
1
Lo siento, no puedo ayudarte con código Visual Basic, iría tanteando y no podría ayudarte, dirígete a otro experto.
Respuesta
1
Te mando la función...
Private Sub Busca()
Dim lb As Workbook
Dim Aplicacion As FileSearch
Set cmdbar = CommandBars.Item(1)
Set Aplicacion = Application.FileSearch
With Aplicacion
       .NewSearch
       .LookIn = "C:\" ' donde va a buscar
       .SearchSubFolders = False 'Buscar en los subfolders
       .Filename = "Prueba.xls" ' que va a buscar
       .FileType = msoFileTypeExcelWorkbooks ' Tipo de archivo a buscar
       .MatchTextExactly = True ' Una busqueda m´pas exacta
' Execute realiza el ordenamiento, asedente o descendente, asi como la actualización de la lista
    If .Execute(SortBy:=msoSortByFileName, _
        SortOrder:=msoSortOrderAscending, AlwaysAccurate:=False) > 0 Then
        For I = 1 To .FoundFiles.Count
              For Each lb In Workbooks
                  If lb.Name = .Filename Then
                     If lb.ReadOnly = True Then
                        MsgBox "El archivo esta abierto intente en modalidad de solo lectura"
                     Else
                        MsgBox "El archivo esta abierto pero no como solo de lectura"
                     End If
                  End If
               Next lb
         Next I
    Else
          MsgBox "No se localizó el archivo"
    End If
End With
End Sub
El Readonly indica si el archivo esta en modo de solo lectura, pero si el archivo se abrió como lectura/escritura este será falso pero el archivo esta abierto...
Si requieres sber unicamente si el archivo esta abierto o no...
Elimina lo siguiente:
If lb.ReadOnly = True Then
     MsgBox "El archivo esta abierto intente en modalidad de solo lectura"
Else
     MsgBox "El archivo esta abierto pero no como solo de lectura"
End If
Y cambiamos el mansaje:
MsgBox "Intente más tarde"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas