Ir ao conteúdo

Posts recomendados

Postado

Pessoal, boa tarde.

 

Acompanho muito o fórum e até o momento já retirei muitas dúvidas graças aos esclarecimentos que já foram compartilhados aqui.

Não sei se estou postando no lugar certo, porém lá vai:

 

Tenho um código que está funcionando normalmente quando insiro ele num módulo dentro do próprio arquivo, porém ele não funciona quando eu insiro ele na pasta pessoal de macros.

O intuito do código é poder consolidar todos os dados das abas existentes em apenas uma aba chamada "Consolidado", colando sempre os dados na última linha vazia e isso ele faz corretamente quando o código é inserido no próprio módulo da planilha.

 

Sub Consolidar()

'consolida as abas do arquivo numa só

Dim ws As Worksheet
Dim LRo As Long
Dim LRd As Long

LRo = Sheets("Consolidado").Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Consolidado").Range("A2:E" & LRo).ClearContents

For Each ws In ThisWorkbook.Worksheets


If ws.Name <> "Consolidado" Then
LRo = ws.Cells(Rows.Count, 1).End(xlUp).Row

With Sheets("Consolidado")
LRd = .Cells(Rows.Count, 1).End(xlUp).Row
.Cells(LRd + 1, 1).Resize(LRo - 1, 5).Value = ws.Range("A2:E" & LRo).Value

End With
End If

Next ws

End Sub

O erro é o seguinte:

 

'1004' - Erro de definição de aplicativo ou de definição de objeto

 

dado nesta linha:

 

.Cells(LRd + 1, 1).Resize(LRo - 1, 5).Value = ws.Range("A2:E" & LRo).Value

 

 

Alguém poderia me dar uma mão?

 

Muito obrigado

Postado

O ideal seria voce postar um exemplo com alguns dados, de qualquer forma veja se com essa alteração resolve o seu problema. 

 

Sub Consolidar()
Dim ws As Worksheet
Dim LRo As Long
Dim LRd As Long

LRo = Sheets("Consolidado").Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Consolidado").Range("A2:E" & LRo).ClearContents

For Each ws In ThisWorkbook.Worksheets


If ws.Name <> "Consolidado" Then
LRo = ws.Cells(Rows.Count, 1).End(xlUp).Row

LRo = VBA.IIf(LRo <= 1, 2, LRo)

With Sheets("Consolidado")
LRd = .Cells(Rows.Count, 1).End(xlUp).Row
.Cells(LRd + 1, 1).Resize(LRo - 1, 5).Value = ws.Range("A2:E" & LRo).Value

End With
End If

Next ws

End Sub

 

  • Curtir 1
Postado
1 minuto atrás, Basole disse:

O que seria "módulo da pasta pessoal" ? 

 

 

@Basole a pasta pessoal de macros (personal.xlsb)

 

Terei que consolidar mais de 200 planilhas de cada centro de custo da empresa, por isso queria gravar a macro e atribuir um atalho pra ela e ai meu trabalho seria apenas abrir cada uma das planilhas e clicar nesse botão que será inserido na barra de ferramentas de acesso rápido do excel.

 

Entendeu?

Postado

O problema está nessa linha:

 

For Each ws In ThisWorkbook.Worksheets

A pasta pessoal de macros é um arquivo Excel separada. Ou seja, *Thisworkbook.Worksheets" contém todas as abas da planilha *Pasta Pessoal". Entretanto, o que você quer é que a macro rode no arquivo que estiver aberto.

 

Experimente assim:

 

For Each ws In ActiveWorkbook.Worksheets

Clique em curtir se resolvi o seu problema =)

  • Curtir 1
Postado
1 minuto atrás, Wendell Menezes disse:

O problema está nessa linha:

 


For Each ws In ThisWorkbook.Worksheets

A pasta pessoal de macros é um arquivo Excel separada. Ou seja, *Thisworkbook.Worksheets" contém todas as abas da planilha *Pasta Pessoal". Entretanto, o que você quer é que a macro rode no arquivo que estiver aberto.

 

Experimente assim:

 


For Each ws In ActiveWorkbook.Worksheets

Clique em curtir se resolvi o seu problema =)

@Wendell Menezes, cara muito obrigado. Resolveu totalmente o meu problema. Agradeço muito.

 

Uma última dúvida, não sei preciso abrir outro tópico, mas percebi esse inconveniente agora pouco.

Assim que rodo a macro, o nome das Colunas A1,B1,C1,D1,E1 somem, acredito que o código cole em branco essa linha e ai ela desaparece. Será que é possível alterar algo no código para que ele cole os dados das outras abas a partir da segunda linha, sem "deletar" o nome das colunas?

 

De qualquer modo, muito obrigado. Caso não seja possível é só me responder q eu já coloco como resolvido também.

Postado
1 minuto atrás, Wendell Menezes disse:

Ajuste essa linha De:

 


Sheets("Consolidado").Range("A2:E" & LRo).ClearContents

 

Para:

 


If LRo > 1 Then Sheets("Consolidado").Range("A2:E" & LRo).ClearContents

 

@Wendell Menezes , cara você é *****... Muito obrigado

 

Problema resolvido!

adicionado 2 minutos depois

Onde que eu coloco como resolvido? Parece que eu tinha visto um lugara para marcar ou seria apenas um moderador mesmo?

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!