none
Mensagem quando nao encontra o arquivo procurado no diretorio, em VBA RRS feed

  • Pergunta

  • Bom dia.

    Fiz um codigo em VBA como abaixo,para abrir arquivo programado conforme  as variaveis "m" e "d" e caso nao encontre o arquivo, em vez de dar erro gostaria que desse uma mensagem de que o "arquivo numero tal nao foi encontrado".

    Desde ja agradeco

    Tadao

        Workbooks.Open ThisWorkbook.Path & "\xyz2015." & m & "." & d & ".xls", UpdateLinks:=0

    segunda-feira, 11 de maio de 2015 06:49

Respostas

  • Ola Natan,mais uma vez desculpe pela demora da resposta.

    Fiz uso do artificio do BreakPoint e notei que mesmo que nao encontre o arquivo procurado, nao entra na rotina do 

    If wkb Is Nothing Then

    MsgBox "Arquivo Nao Encontrado"

    Endif

    Entao antes do If, coloquei o comando 

    Set Wkb = Nothing

    Dai deu tudo certo, o meu muto obrigado pela atencao.

    Tadao

    Set Wkb = Nothing

    If wkb Is Nothing Then
        
                MsgBox "Arquivo Nao Encontrado"
        Else

    domingo, 17 de maio de 2015 14:55

Todas as Respostas

  • Tente assim:

    Dim wkb as Workbook
    
    on error resume next
    
    set wkb = Workbooks.Open (ThisWorkbook.Path & "\xyz2015." & m & "." & d & ".xls", UpdateLinks:=0)
    
    If wkb is nothing then
    
     msgbox "Arquivo Não Encontrado"
    
    end if
    
    on error goto 0


    Natan

    segunda-feira, 11 de maio de 2015 11:11
  • Bom dia Natan, desculpe pela demora do retorno.

    Estava experimentando o codigo que voce mandou e funcionou uma beleza, muito obrigado.

    So nao entendi porque quando coloca o objeto na variavel wkb precisa colocar o parenteses depois do Open.Quando o programa rotava sem a variavel wkb nao tinha colocado os parendeses mas funcionava normal.

    Bom, depois que vi que tava funcionando bem fiz umas adaptacoes e coloquei no programa abaixo, mas quando nao encontra o arquivo fica em loop e nao para.A unica adaptacao que fiz foi colocar um Else antes do End If para colocar a rotina do programa caso encontre o arquivo.

    Gostaria que quando nao encontra o arquivo carrege o contador d do For Next e abra o proximo arquivo.

    Desde ja agradeco se puder me ajudar, ainda sou novado na area de VBA.

    Tadao

    Abaixo a rotina resumida onde adaptei o seu codigo.

    Sub tranferencia()

    Dim i As Integer
    Dim j As Integer
    Dim m As Variant
    Dim fl As Variant
    Dim d As Integer
    Dim di As Variant
    Dim df As Variant
    Dim ws As Object
    Dim wsp As Object


    volta:
    m = Range("d1").Value

    di = Application.InputBox("Digite o Dia Inicial de Transferencia: ", "K Line Group" & "  M E S : " & m)
    If di = False Then
        Exit Sub
    Else
        If di = vbNullString Then
            GoTo volta
        End If
    End If

    df = Application.InputBox("Digite o Dia Final de Transferencia: ", "K Line Group" & "  M E S : " & m, di)
    If df = False Then
        Exit Sub
    Else
        If df = vbNullString Then
            GoTo volta
            
        End If
    End If

    Application.ScreenUpdating = False
    For d = di To df
        i = 0                                            'contador da linha da folha de horas da fabrica
        j = Range("e10000").End(xlUp).Offset(1).Row      'ultima linha vazia

        Dim wkb As Workbook

        On Error Resume Next
        
        Set wkb = Workbooks.Open(ThisWorkbook.Path & "\K   LINE稼働実績2015." & m & "." & d & ".xls", UpdateLinks:=0)
        
        If wkb Is Nothing Then
        
                MsgBox "Arquivo Nao Encontrado"
        Else
        

        
            Set ws = Workbooks("K   LINE稼働実績2015." & m & "." & d & ".xls")
            
            Set wsp = Workbooks("Transferencia horas").Worksheets("sheet1")
            
            wsp.Activate
            Range("d1") = m
            Range("b8").Select
            
            ws.Worksheets("日報").Activate
            Range("c4").Select
        
            Do While ActiveCell.Offset(i, -2).Value <> "男子計"
        
                 If ActiveCell.Offset(i).Value = "" Then
                     i = i + 1
                 Else
                     
                     ActiveCell.Offset(i, -2).Copy 'nome
                     wsp.Cells(j, 3).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
                     
                     ActiveCell.Offset(i, 2).Copy 'dias trabalhadas
                     wsp.Cells(j, 4).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
                     
                     ActiveCell.Offset(i, 4).Copy 'Horas normais
                     wsp.Cells(j, 5).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
                     
                     ActiveCell.Offset(i, 9).Copy 'Horas extras
                     wsp.Cells(j, 6).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
                    
                     Range("h1").Copy 'data
                     wsp.Cells(j, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
                     
                     Application.CutCopyMode = False
                     j = j + 1
                     i = i + 1
                 
                 End If
            Loop
        End If
        On Error GoTo 0
        ws.Close

    Next d

    wsp.Activate
    Range("b1").Copy Range(Cells(8, 2), Cells(j - 1, 2))
    Application.ScreenUpdating = True

    Range("a8").Select

    End Sub


    quarta-feira, 13 de maio de 2015 15:39
  • Olá Tadao,

    Quanto ao parenteses, quando você chama um método que retorne um objeto e você queira atribuir esse retorno a uma variável criada por você, você deve enviar os parâmetros entre parênteses.

    Workbooks.Open "Arquivo 'Apenas abre o arquivo sem atribui-lo a nenhuma variável

    set wbk = Workbooks.Open("Arquivo) 'atribui a variável wbk o retorno do método Open

    Para finalizar o laço, você pode incluir um exit Sub ou Exit For quando o programa entender que não existe mais nada a procurar...

    If wkb Is Nothing Then
        
         MsgBox "Arquivo Nao Encontrado"
         Exit For 'Ou Exit Sub
       
    Else
    
    ...
    
    End If

    Não esqueça de Marcar Como Resposta!


    Natan

    quarta-feira, 13 de maio de 2015 16:36
  • Obrigado pelas instrucoes dos parenteses,Natan.

    Quanto ao Exit For ou Exit Sub, esta acontecendo a mesma coisa. Se por exemplo coloco para abrir arquivos dos dias 1,2,3 e 4 colocando em For d=di to df onde a variavel do dia inicial di=1 e variavel do dia final df=4, sendo que no diretorio nao tem o arquivo do dia 4, o programa roda direitinho transferindo dados  dos dias 1,2,3 e quando for abrir o arquivo dod dia 4, deveria dar mensagem de que nao encontrou o arquivo e sair fora da rotina, mas ela nem da mensagem e fica dando loop no Do while Loop sem parar.

    Tadao

    quinta-feira, 14 de maio de 2015 15:44
  • Tadao,

    cria um breakPoint e roda o programa em modo depuração para saber que condição deve ser incluída para sair do laço.

    acredito que deva ser incluída mais alguma condição dento do While que você tem.


    Natan

    quinta-feira, 14 de maio de 2015 16:04
  • Ola Natan,mais uma vez desculpe pela demora da resposta.

    Fiz uso do artificio do BreakPoint e notei que mesmo que nao encontre o arquivo procurado, nao entra na rotina do 

    If wkb Is Nothing Then

    MsgBox "Arquivo Nao Encontrado"

    Endif

    Entao antes do If, coloquei o comando 

    Set Wkb = Nothing

    Dai deu tudo certo, o meu muto obrigado pela atencao.

    Tadao

    Set Wkb = Nothing

    If wkb Is Nothing Then
        
                MsgBox "Arquivo Nao Encontrado"
        Else

    domingo, 17 de maio de 2015 14:55