Notifications
Clear all

Tratamento de Erro na Abertura de um documento

7 Posts
2 Usuários
0 Reactions
5,330 Visualizações
(@jose_da_silva)
Posts: 24
Eminent Member
Topic starter
 

Caros amigos como tratar um erro na abertura de um documento dentro de uma procedure usando o comando VBa -> Workbooks.Open (C:TESTE.XLS") ? Preciso tratar dois tipos erros : arquivo não encontrado, e arquivo já aberto.

 
Postado : 11/12/2011 9:03 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Jose,

A rotina abaixo, verifica se o Diretorio e o Arquivo existem : :

    Private Sub VerificaArquivo()
        Dim FileName As String, Path As String, meuArqu

        Path = "C:Documents and Settingsmauro.coutinhoMeus documentos"
        meuArqu = "NomeMeuArquivo.xls"
       
       'VERIFICA SE O CAMINHO EXISTE
        If Not Dir(Path, vbDirectory) = vbNullString Then
             'SE EXISTIR
             'adiciona a barra, se não houver
             If Right(Path, 1) <> "" Then Path = Path & ""
                'monta o caminho completo do arquivo
                FileName = Dir(Path & meuArqu)

            Else

                MsgBox "O CAMINHO :" & Chr(13) & Path & Chr(13) & "NÃO EXISTE"
                Exit Sub
        End If
         
        'VERIFICA SE O ARQUIVO EXISTE
        If FileName = "NomeMeuArquivo.xls" Then
           'SE EXISTIR, Coloque aqui sua chamada para abrir o arquivo
            MsgBox "OK, Arquivo encontrado"
           Exit Sub
        Else
                MsgBox "O Arquivo:" & Chr(13) & meuArqu & Chr(13) & "NÃO existe !!!"
        End If
           
    End Sub

E a rotina mais a Function, verifica se o mesmo já está aberto, é só fazer a adaptação :
Fonte :
Código de macro para verificar se um arquivo já está aberto
http://support.microsoft.com/kb/291295/pt-br

Sub TestFileOpened()

    ' Test to see if the file is open.
    If IsFileOpen("c:Book2.xls") Then
        ' Display a message stating the file in use.
        MsgBox "File already in use!"
        '
        ' Add code here to handle case where file is open by another
        ' user.
        '
    Else
        ' Display a message stating the file is not in use.
        MsgBox "File not in use!"
        ' Open the file in Microsoft Excel.
        Workbooks.Open "c:Book2.xls"
        '
        ' Add code here to handle case where file is NOT open by another
        ' user.
        '
    End If

End Sub

' This function checks to see if a file is open or not. If the file is
' already open, it returns True. If the file is not open, it returns
' False. Otherwise, a run-time error occurs because there is
' some other problem accessing the file.

Function IsFileOpen(filename As String)
    Dim filenum As Integer, errnum As Integer

    On Error Resume Next   ' Turn error checking off.
    filenum = FreeFile()   ' Get a free file number.
    ' Attempt to open the file and lock it.
    Open filename For Input Lock Read As #filenum
    Close filenum          ' Close the file.
    errnum = Err           ' Save the error number that occurred.
    On Error GoTo 0        ' Turn error checking back on.

    ' Check to see which error occurred.
    Select Case errnum

        ' No error occurred.
        ' File is NOT already open by another user.
        Case 0
         IsFileOpen = False

        ' Error number for "Permission Denied."
        ' File is already opened by another user.
        Case 70
            IsFileOpen = True

        ' Another error occurred.
        Case Else
            Error errnum
    End Select

End Function

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 11/12/2011 9:28 am
(@jose_da_silva)
Posts: 24
Eminent Member
Topic starter
 

Mauro Obrigado pela atenção. Inseri a rotina modelo na minha aplicação com as devidas adaptações, todavia ocorreu um erro de interno de execução do VB na linha de comando --> "Error errnum". A mensagem diz "erro em tempo de execução 53 - o arquivo não foi localizado".

 
Postado : 11/12/2011 4:09 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Jose, a principio a mensagem esta correta, a linha :
Error errnum - é para retornar (informar) se houve algum erro.

Não tem como eu testar sem ter a sua rotina completa, então de uma analizada em suas adaptações, se colocou o caminho e nome do arquivo correto, pode ser somente algum ajuste nestas partes.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 11/12/2011 4:26 pm
(@jose_da_silva)
Posts: 24
Eminent Member
Topic starter
 

Ok Mauro você tinha razão. Fiz uma outrra alteração e agora esta funcionando corretamente. Obrigado.

 
Postado : 12/12/2011 8:06 am
(@jose_da_silva)
Posts: 24
Eminent Member
Topic starter
 

Olá Mauro. Retomei as minha aplicações em VBA este ano. Com relação ao problema anterior que você me deu a dica, quero lhe pedir mais uma ajuda : Tenho vária planilhas abertas. No tratamento do erro tem como eu saber qual o número de índice desta planilha já aberta, para usar mais adiante na função "Activate" ?

 
Postado : 03/03/2012 12:11 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Jose, quando diz "planilhas abertas", suponho que esteja se referindo a "PASTAS" (WORKBOOKs.

Se for isto, a rotina abaixo exibe uma mensagem com o Nome de todos os WorkBooks abertos, é só adaptar para utilizar a Variavel.

Sub NavegarPastas()
    Dim wb As Workbook
    Dim x As String
    
    For Each wb In Workbooks
        'Verifica se tem outras Pastas Abertas
        If wb.Name <> ThisWorkbook.Name Then
        'Se o nome for diferente da pasta
            
            'Guarda na Variavel "x" os nomes das outras pastas Abertas
            x = IIf(wb.Name = ThisWorkbook.Name, wb.Name & " (this workbook)", wb.Name)
        
            MsgBox "Pastas aberta, Nome " & vbCrLf & x

        Else
            'Se tivermos só a Pasta Principal aberta, sai da rotina
            If Workbooks.Count = 1 Then Exit Sub
    
        End If
    
    Next wb
    
    'Para ativar a Pasta da variável
    'Dependendo de como irá utilizar, é só adaptar
    'Então selecionará a última Pasta armazenada
    Workbooks(x).Activate
    
End Sub

A rotina acima, foi uma adaptação que tirei do site :
VBA - Switching between Workbooks(Navegar entre WorkBooks)
http://www.mrexcel.com/forum/showthread.php?t=83547

Aproveitei e montei um exemplo com a dica sugerida pelo "Tom Urtis" no site acima, é bem interessante, é montado no Evento do Botão Direito do Mouse, um menu com todos os Workbooks abertos, se existir, selecionamos o que queeremos e ativamos, se não, exibe o menu padrão :

VBA - Switching between Workbooks(Navegar entre WorkBooks)

A Fonte e o Autor já estão citados a cima.

Espero que de para tirar proveito e adaptar.

Qualquer duvida, retorne.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 03/03/2012 10:16 pm