Usuário com melhor resposta
Mensagem quando nao encontra o arquivo procurado no diretorio, em VBA

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
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- Marcado como Resposta Antonio Tadao kano domingo, 17 de maio de 2015 14:55
Todas as Respostas
-
-
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- Editado Antonio Tadao kano quarta-feira, 13 de maio de 2015 15:43
-
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
-
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
-
-
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- Marcado como Resposta Antonio Tadao kano domingo, 17 de maio de 2015 14:55