TRATAMENTO DE ERRO CONTINUO
Olá a todos,
Estou desenvolvendo um programinha em VBA para copiar arquivos de um diretório para outro
Porem, os arquivos são definidos por uma listview que a pessoa preenche no form
e o problema é o seguinte:
Pode acontecer da pessoa digitar o nome do arquivo errado e tentar copiar assim mesmo
Como estou usando o método FileCopy
vai gerar nesse caso o erro 53,
já inclui o tratamento para essa ocorrência
o problema é que se a pessoa digitar mais de um arquivo com o nome errado
na segunda verificação o tratamento já não funciona
Segue abaixo o código que grava e executa o tratamento:
grava:
TLista = LVProgramas.ListItems.Count
[txt-color=#0000f0]Dim[/txt-color] TNgravado, ultNGravado [txt-color=#0000f0]As Integer[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] NGravado [txt-color=#0000f0]As String[/txt-color]
[txt-color=#0000f0]On Error GoTo[/txt-color] trata_erro
[txt-color=#0000f0]Do Until[/txt-color] atual = TLista + 1
NomePrograma = LVProgramas.ListItems.Item(atual).SubItems(1)
Origem = DirOrigem & [Ô]\[Ô] & NomePrograma & [Ô].lst[Ô]
atual = atual + 1
FileCopy Origem, DirDestino & [Ô]\[Ô] & NomePrograma & [Ô].lst[Ô]
[txt-color=#0000f0] Loop[/txt-color]
trata_erro:
[txt-color=#0000f0] If[/txt-color] Err.Number = 53 [txt-color=#0000f0]Then[/txt-color]
[txt-color=#0000f0]MsgBox[/txt-color] [Ô]O arquivo [Ô] & NomePrograma & [Ô] nao foi localizado ! [Ô], , [Ô]Erro[Ô]
ultLi = Range([Ô]Plan1!A1[Ô]).End(xlUp).Row
Range([Ô]Plan1!A[Ô] & ultLi + 1).Value = NomePrograma & [Ô], [Ô]
[txt-color=#0000f0] GoTo[/txt-color] grava
[txt-color=#0000f0] ElseIf[/txt-color] Err.Number = 58 [txt-color=#0000f0]Then[/txt-color]
solicitação = MsgBox([Ô]O arquivo [Ô] & NomePrograma & [Ô] já existe, deseja substituilo? !![Ô], vbYesNo, [Ô]Solicitação[Ô])
[txt-color=#0000f0]If[/txt-color] solicitação = vbYes[txt-color=#0000f0] Then[/txt-color]
Kill DirDestino & NomePrograma & [Ô].lst[Ô]
FileCopy DirOrigem & NomePrograma & [Ô].lst[Ô], DirDestino
[txt-color=#0000f0] Else[/txt-color]: [txt-color=#0000f0]GoTo[/txt-color] grava
[txt-color=#0000f0] End If
Else
MsgBox[/txt-color] [Ô]Ocorreu o erro : [Ô] & Err.Number & [Ô] - [Ô] & Err.Description
[txt-color=#0000f0] End If[/txt-color]
Desde já agradeço a todos!
Estou desenvolvendo um programinha em VBA para copiar arquivos de um diretório para outro
Porem, os arquivos são definidos por uma listview que a pessoa preenche no form
e o problema é o seguinte:
Pode acontecer da pessoa digitar o nome do arquivo errado e tentar copiar assim mesmo
Como estou usando o método FileCopy
vai gerar nesse caso o erro 53,
já inclui o tratamento para essa ocorrência
o problema é que se a pessoa digitar mais de um arquivo com o nome errado
na segunda verificação o tratamento já não funciona
Segue abaixo o código que grava e executa o tratamento:
grava:
TLista = LVProgramas.ListItems.Count
[txt-color=#0000f0]Dim[/txt-color] TNgravado, ultNGravado [txt-color=#0000f0]As Integer[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] NGravado [txt-color=#0000f0]As String[/txt-color]
[txt-color=#0000f0]On Error GoTo[/txt-color] trata_erro
[txt-color=#0000f0]Do Until[/txt-color] atual = TLista + 1
NomePrograma = LVProgramas.ListItems.Item(atual).SubItems(1)
Origem = DirOrigem & [Ô]\[Ô] & NomePrograma & [Ô].lst[Ô]
atual = atual + 1
FileCopy Origem, DirDestino & [Ô]\[Ô] & NomePrograma & [Ô].lst[Ô]
[txt-color=#0000f0] Loop[/txt-color]
trata_erro:
[txt-color=#0000f0] If[/txt-color] Err.Number = 53 [txt-color=#0000f0]Then[/txt-color]
[txt-color=#0000f0]MsgBox[/txt-color] [Ô]O arquivo [Ô] & NomePrograma & [Ô] nao foi localizado ! [Ô], , [Ô]Erro[Ô]
ultLi = Range([Ô]Plan1!A1[Ô]).End(xlUp).Row
Range([Ô]Plan1!A[Ô] & ultLi + 1).Value = NomePrograma & [Ô], [Ô]
[txt-color=#0000f0] GoTo[/txt-color] grava
[txt-color=#0000f0] ElseIf[/txt-color] Err.Number = 58 [txt-color=#0000f0]Then[/txt-color]
solicitação = MsgBox([Ô]O arquivo [Ô] & NomePrograma & [Ô] já existe, deseja substituilo? !![Ô], vbYesNo, [Ô]Solicitação[Ô])
[txt-color=#0000f0]If[/txt-color] solicitação = vbYes[txt-color=#0000f0] Then[/txt-color]
Kill DirDestino & NomePrograma & [Ô].lst[Ô]
FileCopy DirOrigem & NomePrograma & [Ô].lst[Ô], DirDestino
[txt-color=#0000f0] Else[/txt-color]: [txt-color=#0000f0]GoTo[/txt-color] grava
[txt-color=#0000f0] End If
Else
MsgBox[/txt-color] [Ô]Ocorreu o erro : [Ô] & Err.Number & [Ô] - [Ô] & Err.Description
[txt-color=#0000f0] End If[/txt-color]
Desde já agradeço a todos!
colega o unico problema que vejo é este
entre estas duas linhas, deveria ter um exit sub
Loop
trata_erro:
exemplo
Loop
[txt-color=#0000f0]Exit Sub[/txt-color]
trata_erro:
entre estas duas linhas, deveria ter um exit sub
Loop
trata_erro:
exemplo
Loop
[txt-color=#0000f0]Exit Sub[/txt-color]
trata_erro:
A sua lógica está errada. Pois toda vez que não houver o arquivo ele vai reiniciar a cópia. Para resolver é bem simples.
Na linha onde está GoTo grava dentro do If do erro 53, substitua por Resume Next. Isto fará o programa continuar da linha seguinte a que gerou o erro, ou seja, do FileCopy.
Sugiro mudar também o GoTo grava dentro do If do erro 58 para Resume. Isto fará o programa repetir a linha do FileCopy no caso da substituição do arquivo.
Na linha onde está GoTo grava dentro do If do erro 53, substitua por Resume Next. Isto fará o programa continuar da linha seguinte a que gerou o erro, ou seja, do FileCopy.
Sugiro mudar também o GoTo grava dentro do If do erro 58 para Resume. Isto fará o programa repetir a linha do FileCopy no caso da substituição do arquivo.
Tópico encerrado , respostas não são mais permitidas