Ir ao conteúdo
  • Cadastre-se

Criar e Nomear Abas - VBA


Ir à solução Resolvido por minoso,

Posts recomendados

E aí, pessoal? Tudo bem?

 

Estou começando agora a programar em VBA e estou com dificuldade em uma parte: preciso criar novas abas de acordo com a quantidade de células pintadas de vermelho que estão na linha 1 na aba principal. Cada aba receberia o nome que estivesse nesta célula.  Resumindo: o programa tem que analisar a primeira linha da aba principal e cada vez que encontrar uma célula vermelha deve abrir uma nova aba e nomear esta aba com o texto da célula em questão.

 

Abraços

Marcus

Link para o comentário
Compartilhar em outros sites

Olá @Marcus Casanova Nogueira,

 

você precisa usar o comando Sheet.Add para criar novas planilhas, junto com algumas outras lógicas para atender sua demanda, veja o código abaixo.

Sub Nova_Aba()' Criação de novas abas com nomes pre-estabelecidos    'declarando variáveis    Dim contacoluna As Integer    Dim nome As String    'congela a tela do Excel para não ficar mostrando execução de linha a linha da macro    Application.ScreenUpdating = False        'contando quantas células (colunas) estão preenchidas a partir da A1, leitura da esquerda para direita.    Sheets("Matriz").Select    Range("A1").Select    Selection.End(xlToRight).Select    contacoluna = ActiveCell.Column    Range("A1").Select    'repetição for até o fim da coluna preenchida    For i = 1 To contacoluna            'cria uma nova planilha        Sheets.Add After:=ActiveSheet            'nomeia a nova planilha criada        Sheets("Matriz").Select        nome = ActiveCell.Offset(0, contacoluna - i).Value        ActiveSheet.Next.Select        ActiveSheet.Name = nome        Sheets("Matriz").Select           Next iEnd Sub

Qualquer dúvida quanto ao entendimento, retorne aqui e vamos nos falando (comentei algumas linhas para facilitar a leitura e manutenção do código)

 

Note que ele faz a leitura através do conteúdo da célula, não se ela está preenchida na cor vermelha ou não. (com essa condição não sei te ajudar, pois desconheço uma função do excel que conte a célula se ela estiver pintada de uma cor específica, desculpa)


Planilha de exemplo anexada.

nova_aba.xlsx

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Obrigado por responder, Minoso!
 
Desculpe a ignorância, mas não entendi ao certo o que o comando activecell.column faz. Pra questão da célula estar pintada de vermelho ou não, pensei em colocar um IF pra isso. Algo tipo:

 

 

For i = 1 To contacoluna
 

If Cells(1,n).interior.color = rgbred then 
 

Sheets.Add After:=ActiveSheet

Sheets("Matriz").Select
nome = ActiveCell.Offset(0, contacoluna - i).Value
ActiveSheet.Next.Select
ActiveSheet.Name = nome
Sheets("Matriz").Select

Next i

 

end if

End Sub

 

Mas não sei se funcionaria corretamente.

 

Abraços

 

PS: Aparentemente deu certo este IF dentro do seu código. Mas se puder explicar como funciona o Activecell.column eu agradeceria muito!

 

Abraços

 

PS2: Modifiquei um pouco seu código pois em outra macro ja obtinha o número de células ocupadas na linha 1 (o Range("a24") :

 

Sub Nova_Aba()
 
         Dim nome As String
 
      Application.ScreenUpdating = False
    
 
   For i = 1 To Range("a24")
    
    If Cells(1, i).Interior.Color = rgbRed Then
    
 
        Sheets.Add After:=ActiveSheet
    
 
        Sheets("Plan1").Select
        nome = Cells(1, i).Value
        Range("c20").Value = nome
        ActiveSheet.Next.Select
        ActiveSheet.Name = nome
        Sheets("Plan1").Select
        
        End If
       
    Next i
 
 
End Sub
 
Obrigado mesmo pela Ajuda!
 
Abraços
Link para o comentário
Compartilhar em outros sites

  • Solução

Opa! Que bom que deu certo! Obrigado por compartilhar o sistema de condição de cores, essa eu não sabia!  :D

 

Com relação ao ActiveCell.Column é simples, ela retorna o valor da coluna em que a célula selecionada está. É o mesmo de você inserir na célula a fórmula =COL( )  ;)

 

Uso esse número para saber quantas células ele precisará percorrer ao ir criando as novas abas. Entendeu?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...
Em 18/12/2014 às 11:39, minoso disse:

Olá @Marcus Casanova Nogueira,

 

você precisa usar o comando Sheet.Add para criar novas planilhas, junto com algumas outras lógicas para atender sua demanda, veja o código abaixo.


Sub Nova_Aba()' Criação de novas abas com nomes pre-estabelecidos    'declarando variáveis    Dim contacoluna As Integer    Dim nome As String    'congela a tela do Excel para não ficar mostrando execução de linha a linha da macro    Application.ScreenUpdating = False        'contando quantas células (colunas) estão preenchidas a partir da A1, leitura da esquerda para direita.    Sheets("Matriz").Select    Range("A1").Select    Selection.End(xlToRight).Select    contacoluna = ActiveCell.Column    Range("A1").Select    'repetição for até o fim da coluna preenchida    For i = 1 To contacoluna            'cria uma nova planilha        Sheets.Add After:=ActiveSheet            'nomeia a nova planilha criada        Sheets("Matriz").Select        nome = ActiveCell.Offset(0, contacoluna - i).Value        ActiveSheet.Next.Select        ActiveSheet.Name = nome        Sheets("Matriz").Select           Next iEnd Sub

Qualquer dúvida quanto ao entendimento, retorne aqui e vamos nos falando (comentei algumas linhas para facilitar a leitura e manutenção do código)

 

Note que ele faz a leitura através do conteúdo da célula, não se ela está preenchida na cor vermelha ou não. (com essa condição não sei te ajudar, pois desconheço uma função do excel que conte a célula se ela estiver pintada de uma cor específica, desculpa)

 

Planilha de exemplo anexada.

 

nova_aba.xlsx

Olá tudo bem?

Não tenho muita experiência com VBA, estou iniciando. Veja se pode me ajudar. Estou tentando criar um formulário onde todas as vezes que cadastrar um cidadão seja criada uma nova aba com o nome da pessoa cadastrada. Baixei a sua planilha nova_aba para tentar estudá-la, mas, não funcionou. Copiei os comandos descritos acima, porém está dando um erro 1004  ActiveSheet.Name = nome 

Pode me ajudar?

 

Muito grato!

 

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

Olá a todos,

Sobre esse formato de criação de abas, achei fantástico, porém não consegui por em prática no quesito adicionar informação nas abas criadas.

 

Eu possuo um arquivo em txt, cujo o início de cada linha representa um tipo de transação.

Meu objetivo é abrir uma aba como o demonstrado nesse tópico, mas agrupando os dados correspondentes a cada transação de acordo com a sua classificação.

 

Ex.:

Transação1;un;1;1,59;1,59;01/01/2018

Transação1;un;2;2;4;01/01/2018

Transação1;un;3;6;18;01/01/2018

Transação2;un;1;1,59;1,59;02/01/2018

Transação2;un;2;2;4;02/01/2018

Transação2;un;3;6;18;02/01/2018

Transação3;un;1;1,59;1,59;03/01/2018

Transação3;un;2;2;4;03/01/2018

Transação3;un;3;6;18;03/01/2018

 

Resultado

Aba 1 = Transação1

Transação1;un;1;1,59;1,59;01/01/2018

Transação1;un;2;2;4;01/01/2018

Transação1;un;3;6;18;01/01/2018

 

Aba 2 = Transação2

Transação2;un;1;1,59;1,59;02/01/2018

Transação2;un;2;2;4;02/01/2018

Transação2;un;3;6;18;02/01/2018

 

Aba 3 = Transação3

Transação3;un;1;1,59;1,59;03/01/2018

Transação3;un;2;2;4;03/01/2018

Transação3;un;3;6;18;03/01/2018

 

Eu uso Excel2016.

 

Desde já agradeço a ajuda!!

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!