Ir ao conteúdo
  • Cadastre-se

Macro não funciona na pasta pessoal


Posts recomendados

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

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

@Basole, muito obrigado pelo seu retorno. A macro parou de dar erro, porém ela não está RODANDO dentro do módulo da pasta pessoal ainda.

 

Ela roda normalmente no módulo do arquivo.

 

Vou anexar o exemplo que estou usando para ver se você tem alguma outra ideia.

Consolidar.xlsx

Link para o comentário
Compartilhar em outros sites

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?

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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?

Link para o comentário
Compartilhar em outros sites

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...