Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Código para copiar entre planilhas está apresentando erro [Resolvido]
-
- Colaborador
- Mensagens: 11
- Registrado em: Sex Jul 03, 2020 5:56 pm
Código para copiar entre planilhas está apresentando erro [Resolvido]
Olá! Através de um tutorial escrevi esse código VBA, que é para copiar as linhas para outra planilha e excluir essas linhas em seguida, com critério. Segue abaixo o código:
Sub arquivar()
'
' Arquivar
'
Dim LinhaAtual As Long
Dim UltimaLinha As Long
Dim W As Worksheet
Dim Linha As Integer
Set W = Sheets("REGISTROS")
UltimaLinha = W.UsedRange.Rows.Count
Linha = 3
With W
For LinhaAtual = 1 To UltimaLinha
If Cells(LinhaAtual, "G") <> "" Then
Sheets("ARQUIVO").Cells(Linha, 2) = Format(.Cells(LinhaAtual, 2), "DD/MM/YYYY")
Sheets("ARQUIVO").Cells(Linha, 3) = .Cells(LinhaAtual, 3)
Sheets("ARQUIVO").Cells(Linha, 4) = Format(.Cells(LinhaAtual, 4), "currency")
Sheets("ARQUIVO").Cells(Linha, 5) = .Cells(LinhaAtual, 5)
Sheets("ARQUIVO").Cells(Linha, 6) = Format(.Cells(LinhaAtual, 6), "DD/MM/YYYY")
Sheets("ARQUIVO").Cells(Linha, 7) = Format(.Cells(LinhaAtual, 7), "DD/MM/YYYY")
Linha = Linha + 1
.Rows(LinhaAtual).Delete
Else
End If
Next LinhaAtual
End With
End Sub
Só que está ocorrendo o seguinte erro:
Se alguém puder me dar uma força para corrigir esse código, eu ficarei muito grato.
Sub arquivar()
'
' Arquivar
'
Dim LinhaAtual As Long
Dim UltimaLinha As Long
Dim W As Worksheet
Dim Linha As Integer
Set W = Sheets("REGISTROS")
UltimaLinha = W.UsedRange.Rows.Count
Linha = 3
With W
For LinhaAtual = 1 To UltimaLinha
If Cells(LinhaAtual, "G") <> "" Then
Sheets("ARQUIVO").Cells(Linha, 2) = Format(.Cells(LinhaAtual, 2), "DD/MM/YYYY")
Sheets("ARQUIVO").Cells(Linha, 3) = .Cells(LinhaAtual, 3)
Sheets("ARQUIVO").Cells(Linha, 4) = Format(.Cells(LinhaAtual, 4), "currency")
Sheets("ARQUIVO").Cells(Linha, 5) = .Cells(LinhaAtual, 5)
Sheets("ARQUIVO").Cells(Linha, 6) = Format(.Cells(LinhaAtual, 6), "DD/MM/YYYY")
Sheets("ARQUIVO").Cells(Linha, 7) = Format(.Cells(LinhaAtual, 7), "DD/MM/YYYY")
Linha = Linha + 1
.Rows(LinhaAtual).Delete
Else
End If
Next LinhaAtual
End With
End Sub
Só que está ocorrendo o seguinte erro:
Se alguém puder me dar uma força para corrigir esse código, eu ficarei muito grato.
Editado pela última vez por douglasr20 em Sáb Fev 20, 2021 6:06 pm, em um total de 1 vez.
Re: Código para copiar entre planilhas está apresentando erro
Ter a planilha com os dados ajudaria. De toda forma, depurando o código, qual o valor da LinhaAtual quando falha?
-
- Colaborador
- Mensagens: 11
- Registrado em: Sex Jul 03, 2020 5:56 pm
Re: Código para copiar entre planilhas está apresentando erro
Então, aparece a mensagem de erro somente e a macro não roda. Segue abaixo, os print das planilhas:
A minha intenção é de que quando a macro for executada, as linhas entre as colunas B a G serão copiadas para a planilha ARQUIVOS, somente se as células da coluna G estiverem preenchidas com a data. Logo após, essas mesmas linhas serão apagadas da planilha REGISTRO. Esses intervalo estão configurados como tabelas nas duas planilhas. Não sei se o erro é por causa disso.
A minha intenção é de que quando a macro for executada, as linhas entre as colunas B a G serão copiadas para a planilha ARQUIVOS, somente se as células da coluna G estiverem preenchidas com a data. Logo após, essas mesmas linhas serão apagadas da planilha REGISTRO. Esses intervalo estão configurados como tabelas nas duas planilhas. Não sei se o erro é por causa disso.
Re: Código para copiar entre planilhas está apresentando erro
douglas,
Tem um erro conceitual no código. Você está copiando e deletando a linha na mesma interação. Uma simples depuração o teria ajudado a identificar o problema.
Vamos lá:
Você começa a interação pela linha 1, que não tem dados. Isso já é um desperdício de processamento.
O primeiro laço copia os dados a linha 1, em seguida a deleta, em seguida, pula uma linha. Ou seja, a primeira iteração copia e deleta a linha 1, a segunda a linha 3, depois a 5, e por aí vai.
Refiz o arquivo aqui e pelo menos não deu erro. Vou lhe dar a oportunidade de resolver o problema por conta. Recomendo que faça a copia das linhas e só depois as exclua. Isso vai evitar maiores problemas.
Tem um erro conceitual no código. Você está copiando e deletando a linha na mesma interação. Uma simples depuração o teria ajudado a identificar o problema.
Vamos lá:
Você começa a interação pela linha 1, que não tem dados. Isso já é um desperdício de processamento.
O primeiro laço copia os dados a linha 1, em seguida a deleta, em seguida, pula uma linha. Ou seja, a primeira iteração copia e deleta a linha 1, a segunda a linha 3, depois a 5, e por aí vai.
Refiz o arquivo aqui e pelo menos não deu erro. Vou lhe dar a oportunidade de resolver o problema por conta. Recomendo que faça a copia das linhas e só depois as exclua. Isso vai evitar maiores problemas.
- Anexos
-
- f=20&t=7888.zip
- (17.65 KiB) Baixado 149 vezes
-
- Colaborador
- Mensagens: 11
- Registrado em: Sex Jul 03, 2020 5:56 pm
-
- Colaborador
- Mensagens: 11
- Registrado em: Sex Jul 03, 2020 5:56 pm
Re: Código para copiar entre planilhas está apresentando erro [Resolvido]
Muito obrigado! O código está funcionando. Desculpe a demora do retorno.