Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por Stickdaleh 31 Jul 2020 às 15:33
Membro Novato
Mensagens: 10
Reputação: 2
#57607
Prezados,

Estou precisando de uma macro, que cria abas conforme a lista da aba "DADOS". Ela pega o nome/data1/data2 e monta em um formato padrão para todas e coloca-os em um local definido e por ultimo coloca o nome da pessoa na aba (pode ser limitado ao máximo permitido de caracteres da aba ou até 20 caracteres). Conforme vai descendo a linha vai fazendo uma nova aba.

O número de linhas e abas vão depender de cada caso, então a quantidade de vezes que vai ocorrer o processo irá variar de acordo com a necessidade.

Desde já, agradeço a atenção de todos!
Apenas usuários registrados podem ver ou baixar anexos.
Por osvaldomp 31 Jul 2020 às 17:47
Excel Expert
Mensagens: 1773
Reputação: 891
#57612
Experimente:

Código: Selecionar todosSub InserePlanilhas()
 Dim n As Range
  Application.ScreenUpdating = False
  With Sheets("DADOS")
   For Each n In .Range("B2:B" & .Cells(Rows.Count, 2).End(3).Row)
    Sheets.Add after:=Sheets(Sheets.Count)
    With ActiveSheet
     .[C5:I5] = Array("NOME", , , , "DATA 1", , "DATA 2")
     .[D5] = n.Value: .Name = n.Value
     .[H5] = Format(n.Offset(, 1), "mm/dd/yyyy")
     .[J5] = Format(n.Offset(, 2), "mm/dd/yyyy")
     .Range("H:H,J:J").EntireColumn.AutoFit
    End With
   Next n
  End With
End Sub
Por Stickdaleh 01 Ago 2020 às 19:40
Membro Novato
Mensagens: 10
Reputação: 2
#57632
Funcionou!! Muito obrigado pelo seu tempo e atenção, me ajudou muito, vou deixar ainda como não resolvido pois vou testar em outras planilhas e talvez precise de ajuda.

Novamente, muito obrigado!
Por Stickdaleh 03 Ago 2020 às 15:19
Membro Novato
Mensagens: 10
Reputação: 2
#57651
osvaldomp escreveu:Experimente:

Código: Selecionar todosSub InserePlanilhas()
 Dim n As Range
  Application.ScreenUpdating = False
  With Sheets("DADOS")
   For Each n In .Range("B2:B" & .Cells(Rows.Count, 2).End(3).Row)
    Sheets.Add after:=Sheets(Sheets.Count)
    With ActiveSheet
     .[C5:I5] = Array("NOME", , , , "DATA 1", , "DATA 2")
     .[D5] = n.Value: .Name = n.Value
     .[H5] = Format(n.Offset(, 1), "mm/dd/yyyy")
     .[J5] = Format(n.Offset(, 2), "mm/dd/yyyy")
     .Range("H:H,J:J").EntireColumn.AutoFit
    End With
   Next n
  End With
End Sub


A macro da erro quando tem nomes muito grandes, como faz para delimitar até uns 20 caracteres?
Por osvaldomp 03 Ago 2020 às 17:04
Excel Expert
Mensagens: 1773
Reputação: 891
#57654
Me parece que o limite é de 31 caracteres. Se você quiser experimentar com 30, então altere no código conforme abaixo.

no lugar de ~~~> .Name = n.Value

coloque ~~~> .Name = Left(n.Value, 30)