Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Alexandre Botura

Macro não funciona na pasta pessoal

Recommended Posts

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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @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

    Editado por Alexandre Botura

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

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

     

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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?

    Compartilhar este post


    Link para o post
    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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Ajuste essa linha De:

     

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

     

    Para:

     

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

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×