none
Criar Planilhas RRS feed

  • Pergunta

  • Pessoal, boa noite.

    Preciso de uma ajuda. É o seguinte:

    Tenho uma lista de nomes da Plan1 e preciso criar uma planilha para cada nome. Na verdade, uma planilha base será duplicada de acordo com a quantidade de nomes na lista. 
    Ex: na Lista tem 10 nomes, portanto, a planilha base será duplicada 10 vezes.

    Tenho o seguinte código que uso para contar a quantidade de nomes e duplicar a planilha base.

    Dim i As Integer
    
    Qtde = WorksheetFunction.CountA(Sheets("Plan1").Range("A1:A50"))
    
    	For i = 0 To Qtde
    	    ThisWorkbook.Worksheets("Plan3").Copy Before:=ThisWorkbook.Sheets(1)
    	Next i

    A minha dúvida é a seguinte: Após duplicar a planilha, como faço para o nome ser copiado para a A1 na nova planilha?
    Ou seja, o primeiro nome é copiado para a primeira cópia, o 2 nome para a segunda e assim por diante.



    • Editado matmendes terça-feira, 8 de março de 2016 23:38
    terça-feira, 8 de março de 2016 22:30

Respostas

  • Boa noite Mateus.

    Existem inúmeras formas de fazer isso. Uma bem simples é:

    Dim i As Long   'No VBA é mais eficiente usar Long
    Dim Qtde As Long
    
    Qtde = WorksheetFunction.CountA(Sheets("Plan1").Range("A1:A50"))
    
        For i = 1 To Qtde       'Troque para 1
            ThisWorkbook.Worksheets("Plan3").Copy Before:=ThisWorkbook.Sheets(1)
            ActiveSheet.Name = Sheets("Plan1").Cells(i, 1).Value2
        Next i

    Abraço.


    Filipe Magno

    quarta-feira, 9 de março de 2016 00:47
  • A resposta do Filipe te atende perfeitamente.

    Mas aqui vai uma ideia pro caso de querer manter a ordenação:

    Sub Adiciona_Sheets()
        Dim MyCell As Range, MyRange As Range
        
        Set MyRange = Sheets("Plan1").Range("A1")
        Set MyRange = Range(MyRange, MyRange.End(xlDown))
        Sheets.Add After:=Worksheets(Worksheets.Count)
        Sheets(Sheets.Count).Name = "Controle"
      
        For Each MyCell In MyRange
             Sheets("Plan3").Copy Before:=Sheets("Controle")
             Sheets(Sheets.Count - 1).Name = MyCell.Value
        Next MyCell
        Sheets(Sheets.Count).Delete
    End Sub
    Att,


    Antero Marques

    quarta-feira, 9 de março de 2016 02:16

Todas as Respostas

  • Boa noite Mateus.

    Existem inúmeras formas de fazer isso. Uma bem simples é:

    Dim i As Long   'No VBA é mais eficiente usar Long
    Dim Qtde As Long
    
    Qtde = WorksheetFunction.CountA(Sheets("Plan1").Range("A1:A50"))
    
        For i = 1 To Qtde       'Troque para 1
            ThisWorkbook.Worksheets("Plan3").Copy Before:=ThisWorkbook.Sheets(1)
            ActiveSheet.Name = Sheets("Plan1").Cells(i, 1).Value2
        Next i

    Abraço.


    Filipe Magno

    quarta-feira, 9 de março de 2016 00:47
  • A resposta do Filipe te atende perfeitamente.

    Mas aqui vai uma ideia pro caso de querer manter a ordenação:

    Sub Adiciona_Sheets()
        Dim MyCell As Range, MyRange As Range
        
        Set MyRange = Sheets("Plan1").Range("A1")
        Set MyRange = Range(MyRange, MyRange.End(xlDown))
        Sheets.Add After:=Worksheets(Worksheets.Count)
        Sheets(Sheets.Count).Name = "Controle"
      
        For Each MyCell In MyRange
             Sheets("Plan3").Copy Before:=Sheets("Controle")
             Sheets(Sheets.Count - 1).Name = MyCell.Value
        Next MyCell
        Sheets(Sheets.Count).Delete
    End Sub
    Att,


    Antero Marques

    quarta-feira, 9 de março de 2016 02:16