Existem duas maneiras de fazer isso: cópia (Copy) e adição (Add). Devemos verificar se o nome da folha está correto, ou seja, é diferente das demais folhas e não contém caracteres especiais. Em ambos os casos, os controles devem ser os mesmos.
Este método realiza uma cópia de uma folha já criada. O formato e os dados serão idênticos na nova folha criada.
Expressão: Copy (Before, After).
Expressão representa uma Sheet (planilha) ou Worksheet (planilha de trabalho).
Os parâmetros ("Before e After") são opcionais. Você poderá especificar apenas um desses dois parâmetros. Eles são tipo Variante e representam a folha antes ou depois daquela que você quer copiar. Se o parâmetro for omitido, a folha é automaticamente copiada em uma nova planilha.
Ao criar uma nova folha por esse método, ela é criada no lugar desejado (antes ou depois de outra folha da pasta) e nomeada a partir da folha original (ex:: Planilha1 > Planilha1 (2)). Essa folha será idêntica à original e aparece ativada por padrão. Se a folha for copiada em uma nova pasta, ela se torna a planilha ativa.
Copie a "Plan1" depois da "Plan3":
Worksheets("Plan1").Copy After:=Worksheets("Plan3")
Copie a "Plan4" antes da "Plan2":
Sheets("Plan4").Copy Before:=Sheets("Plan2")
Copie a planilha de "recop" em uma nova pasta:
Worksheets("recop").Copy
Copie a planilha de índice 1 na última posição do arquivo, independentemente do nome da última planilha:
Sheets(1).Copy After:=Sheets(Sheets.Count)
Copie a planilha de índice 10 na primeira posição do arquivo, independentemente do nome da primeira planilha:
Sheets(10).Copy Before:=Sheets(1)
Se quiser copiar várias planilhas de sua planilha ativa em um novo arquivo:
Sheets(Array("Plan1", "Plan3", "Plan5")).Copy
Crie uma nova planilha de cálculo, de gráfico ou de macro. A nova planilha se tornará a planilha ativa. E, sendo uma nova folha, esta será virgem de qualquer dado e de qualquer formato.
Expressão: .Add (Before, After, Count, Type).
Expressão representa um objeto Sheet ou Worksheet.
Os parâmetros (Before, After, Count e Type) são opcionais.
Você deve especificar apenas um dos parâmetros Before e After. Estes são do tipo Variante e representam a planilha antes ou depois da qual você deseja colocar a sua nova planilha.
O parâmetro Count (opcional) é do tipo Variante. Ele representa o número de planilhas que você deseja adicionar. O parâmetro tipo representa o tipo de planilha a ser adicionada. Trata-se de:
xlWorksheet, adiciona uma planilha,
xlChart, adiciona uma planilha de gráfico,
xlExcel4MacroSheet, adiciona uma planilha do Excel4,
xlExcel4IntlMacroSheet, adiciona uma planilha de macros do Excel,
xlDialogSheet, adiciona uma planilha de caixa de diálogo.
Atenção: todos estes parâmetros devem ser nomeados. Convém, então, nomeá-los. Esta sintaxe reenviará um erro:
ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count), , 1, xlChart
Coloque uma planilha depois da última planilha do arquivo:
Sheets.Add After:=Worksheets(Worksheets.Count)
Adicione três planilhas na primeira posição do arquivo ativo:
ActiveWorkbook.Sheets.Add Before:=Worksheets(1), Count:=3
Atenção: as três planilhas aparecem sucessivamente, a ordem poderá ser invertida. A planilha ativa é a última a ser criada.
Adiciona uma planilha de gráfico de um arquivo chamado "Wbk18" (Open!), depois a planilha com o nome "Plan4".
WorkBooks("Wbk18").Sheets.Add After:=Worksheets("Plan4"), Type:=xlChart
.
Atenção: A localização da planilha criada pode reservar algumas pequenas surpresas...
'Verifique se a planilha já existe. Function Planilha_Exist(strWbk As String, strWsh As String) As Boolean 'Gerenciador de erro On Error Resume Next "Teste" Planilha_Exist =
'Verifique se a planilha já existe Function Planiha_Exist(strWbk As String, strWsh As String) As Boolean.
'Verifique se a string contém um caractere a ser evitado Função valid_name (strName As String, strchr As String) As Boolean Dim i As Byte, Tb_Car () As String, strProhib As String strProhib = "/\:*?""<>|" ' Lista dos caracteres a serem evitados Tb_Car = Split(StrConv(strProhib, vbUnicode), Chr$(0)) 'Loop sobre todos os caracteres a serem evitados. 'Atenção: o -1 se deve ao split da string pelo separador Chr(0) 'Na verdade, na string que termina por um Chr(0) convém excluir este último caractere. For i = LBound (Tb_Car) To UBound (Tb_Car) - 1 'Verifique se a string contém um caractere proibido If InStr(strName, Tb_Car (i))> 0 Then 'Se sim: Return False Valid_Name = False 'E retorna o caractere proibido strChr = Tb_Car(i) Exit Function End If Next i 'Se OK: Return True Valid_Name = True End Function
Em ambos os métodos, o código é o mesmo. Na verdade, a planilha criada leva um nome determinado pelo Excel e torna-se a planilha ativa. Como não se pode saber com antecedência o nome da nova planilha (Sheet1 (3), por exemplo), vamos usar o fato de que ela seja a planilha ativa, ou seja, ActiveSheet:
Sub Principal() Dim strNewName As String, strCara As String strNewName = "NewSheet" If Valid_Name(strNewName, strCara) = False Then MsgBox "O nome: " & strNewName & " é invalido." & vbCrLf & _ "Um nome de planilha não pode conter o caractere : " & strCara, vbCritical Exit Sub End If If Planilha_Exist(ThisWorkbook.Name, strNewName) = True Then MsgBox "O nome: " & strNewName & " é invalido." & vbCrLf & _ "Este nome de planilha já é usado nesta pasta.", vbCritical Exit Sub End If ThisWorkbook.Sheets.Add 'Ou: ThisWorkbook.Sheets("Plan1").Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = strNewName End Sub
O pacote Office 2013 traz dois métodos complementares. Trata-se da cópia de um intervalo de células de uma planilha para várias planilhas e do método Add2 para os NewLayouts das coleções de objetos gráficos.
Este método só está disponível a partir das versões do Office 2013. Você só quer copiar um intervalo de células da planilha "Plan1" para as planilhas "Plan3", "Plan5" e "recop". Para isso, você pode usar o método FillAcrossSheets:
Planilhas = Array("Plan3", "Plan5", "Plan7") Sheets (Folhas).FillAcrossSheets Worksheets("Plan1").Range("A1:C5")
Os parâmetros deste método são:
Range (Intervalo): obrigatório
Tipo: opcional. Ele indica como copiar o intervalo e pode ter três valores:
xlFillWithAll: copia o conteúdo e os formatos.
xclFillWithContents: copia o conteúdo.
xlFillWithFormats: copia os formatos.
Disponível a partir do Office 2013. Este método está disponível apenas para as coleções de objetos gráficos e retorna um erro "Run Time" quando é usado com objetos "Sheets e WorkSheets". Não existe mais informação no site "Microsoft.com", exceto a sintaxe:
Expressão: .Add (Before, After, Count, NewLayout).
Expressão representa um objeto Worksheet.
Os parâmetros são idênticos aos do método Add, fora a substituição do Tipo pelo parâmetro NewLayout. Se NewLayout tem o valor true, o gráfico é inserido com as novas regras de layout dinâmico (o título e a legenda aparecem somente se houver várias séries.).
Foto: © Dzmitry Kliapitski - 123RF.com