TRATAMENTO DE ERRO CONTINUO

PROMORG 05/10/2013 12:45:30
#429581
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!
MARCELO.TREZE 07/10/2013 09:03:28
#429622
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:

FFCOUTO 07/10/2013 10:35:03
#429627
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.

Tópico encerrado , respostas não são mais permitidas