Você está na página 1de 6

Como adicionar uma folha em uma planilha no VBA

Julho 2015

1. Introduo
2. Mtodo da Copia
1. Sintaxe
2. O que acontece
3. Exemplos de uso
3. Mtodo Add
1. Sintaxe
2. Exemplos de uso
4. As funes de verificao
1. Se a planilha j existe em uma pasta
2. Cdigo de chamada das funes de verificao
5. Complementos teis do Office 2013
1. Cpia parcial
2. Mtodo Add2

Introduo
Existem duas maneiras de proceder, dependendo do resultado esperado: o mtodo da Cpia, para obter
uma cpia de uma folha existente, ou o mtodo Add, para adicionar uma nova folha em branco ao seu
arquivo. Na programao, devemos verificar se o nome da nova folha est conforme, ou seja, o nome da
folha no deve ser idntico ao de uma folha j existente, assim como no deve conter certos caracteres
proibidos. Em ambos os casos, os controles devem ser os mesmos.

Mtodo da Copia
Este mtodo realiza uma cpia conforme a folha que voc copia. O formato e os dados sero idnticos na

nova folha criada.

Sintaxe
Expresso: .Copy (Before, After). Expresso representa uma Sheet (planilha) ou Worksheet (planilha de
trabalho). Os parmetros ("Before e After") so opcionais. Voc poder especificar apenas um desses dois
parmetros. Eles so tipo Variante e representam a folha antes ou depois daquela que voc quer copiar.
Se o parmetro for omitido, a folha automaticamente copiada em uma nova planilha.

O que acontece
Ao criar uma nova folha por esse mtodo, ela: criada no lugar desejado (antes ou depois de outra folha
da pasta), nomeada pelo nome da folha copiada (ex:: Sheet1 > Sheet1 (2)), idntica folha copiada, E
torna-se a planilha ativa. Se a folha for copiada em uma nova pasta, esta se torna a planilha ativa.

Exemplos de uso
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 posio do arquivo, independentemente do nome da ltima planilha:
Sheets(1).Copy After:=Sheets(Sheets.Count)

Copie a planilha de ndice 10 na primeira posio do arquivo, independentemente do nome da primeira


planilha:
Sheets(10).Copy Before:=Sheets(1)

Se quiser copiar vrias planilhas de sua planilha ativa em um novo arquivo:


Sheets(Array("Plan1", "Plan3", "Plan5")).Copy

Mtodo Add
Crie uma nova planilha de clculo, de grfico 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.

Sintaxe
Expresso: .Add (Before, After, Count, Type). Expresso representa um objeto Sheet ou Worksheet. Os
parmetros (Before, After, Count e Type) so opcionais. Voc deve especificar apenas um dos parmetros
Before e After. Estes so do tipo Variante e representam a planilha antes ou depois da qual voc deseja
colocar a sua nova planilha. O parmetro Count (opcional) do tipo Variante. Ele representa o nmero de
planilhas que voc deseja adicionar. O parmetro tipo representa o tipo de planilha a ser adicionada.
Trata-se de: xlWorksheet, adiciona uma planilha, xlChart, adiciona uma planilha de grfico,
xlExcel4MacroSheet, adiciona uma planilha do Excel4, xlExcel4IntlMacroSheet, adiciona uma planilha de
macros do Excel, xlDialogSheet, adiciona uma planilha de caixa de dilogo. Ateno: todos estes
parmetros devem ser nomeados. Convm, ento, nome-los. Esta sintaxe reenviar um erro:
ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count), , 1, xlChart

Exemplos de uso
Coloque uma planilha depois da ltima planilha do arquivo:
Sheets.Add After:=Worksheets(Worksheets.Count)

Adicione trs planilhas na primeira posio do arquivo ativo:


ActiveWorkbook.Sheets.Add Before:=Worksheets(1), Count:=3

Ateno: as trs planilhas aparecem sucessivamente, a ordem poder ser invertida. A planilha ativa a
ltima a ser criada. Adiciona uma planilha de grfico de um arquivo chamado "Wbk18" (Open!), depois a
planilha com o nome "Plan4". WorkBooks("Wbk18").Sheets.Add After:=Worksheets("Plan4"), Type:=xlChart .
Ateno: A localizao da planilha criada pode reservar algumas pequenas surpresas...

As funes de verificao
Se a planilha j existe em uma pasta

'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 =
<code basic>'Verifique se a planilha j existe
Function Planiha_Exist(strWbk As String, strWsh As String) As Boolean
===Se o nome desejado tiver um caractere proibido===
<code Basic> 'Verifique se a string contm um caractere a ser evitado
Funo 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.
'Ateno: o -1 se deve ao split da string pelo separador Chr(0)
'Na verdade, na string que termina por um Chr(0) convm excluir este ltimo caractere.
For i = LBound (Tb_Car) To
UBound (Tb_Car) - 1
'Verifique se a string contm 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

Cdigo de chamada das funes de verificao


Em ambos os mtodos, o cdigo o mesmo. Na verdade, a planilha criada leva um nome determinado
pelo Excel e torna-se a planilha ativa. Como no se pode saber com antecedncia 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 no 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

Complementos teis do Office 2013


O pacote Office 2013 traz dois mtodos complementares. Trata-se da cpia de um intervalo de clulas de
uma planilha para vrias planilhas e do mtodo Add2 para os NewLayouts das colees de objetos
grficos.

Cpia parcial
Este mtodo s est disponvel a partir das verses do Office 2013. Voc s quer copiar um intervalo de
clulas da planilha "Plan1" para as planilhas "Plan3", "Plan5" e "recop". Para isso, voc pode usar o
mtodo FillAcrossSheets:
Planilhas = Array("Plan3", "Plan5", "Plan7")
Sheets (Folhas).FillAcrossSheets Worksheets("Plan1").Range("A1:C5")

Os parmetros deste mtodo so: Range (Intervalo): obrigatrio Tipo: opcional. Ele indica como copiar o
intervalo e pode ter trs valores: - xlFillWithAll: copia o contedo e os formatos. - xclFillWithContents: copia
o contedo. - xlFillWithFormats: copia os formatos.

Mtodo Add2
Disponvel a partir do Office 2013. Este mtodo est disponvel apenas para as colees de objetos
grficos e retorna um erro "Run Time" quando usado com objetos "Sheets e WorkSheets". No existe
mais informao no site "Microsoft.com", exceto a sintaxe: Expresso: .Add (Before, After, Count,
NewLayout). Expresso representa um objeto Worksheet. Os parmetros so idnticos aos do mtodo
Add, fora a substituio do Tipo pelo parmetro NewLayout. Se NewLayout tem o valor true, o grfico
inserido com as novas regras de layout dinmico (o ttulo e a legenda aparecem somente se houver vrias
sries.).
Traduo feita por Ana Spadari

Este documento, intitulado Como adicionar uma folha em uma planilha no VBA a partir de CCM (br.ccm.net) est disponibilizado sob
a licena Creative Commons. Voc pode copiar, modificar cpias desta pgina, nas condies estipuladas pela licena, como esta nota
aparece claramente.