Há dias, num grupo de discussão de Excel, foi colocada a seguinte questão (adaptada):
“
Pressupostos:
– Tenho uma folha de cálculo “Clientes” com uma lista de clientes;
– Tenho uma folha de cálculo “Modelo” que é um modelo;
Problema:
– preciso criar folhas de cálculo iguais à folha “Modelo”, mas com os nomes constantes da lista de clientes da folha “Clientes”.
Alguém me pode ajudar?”
Tomemos o seguinte exemplo ilustrativo:
O que temos:
a) Uma folha, denominada “Modelo”
b) Uma folha, denominada “Clientes”
O que pretendemos, será ter tantas folhas, quantos os nomes que se encontram na folha Clientes, com o nome de cada um deles no tabulador, mas com o conteúdo da folha “mestra” – “Modelo”.
Para uma melhor ilustração, suponhamos que dos 18 nomes, apenas pretendemos obter 6 folhas (de A1:A6), ou seja, de “Manuel a Jorge”. Então, o resultado seria:
Ou seja, todas as 6 folhas, criadas e já renomedas com os nomes pretendidos, teriam como conteúdo, o conteúdo da folha “Modelo”.
O Código, que executaremos em primeiro lugar e que dará para criar o número de folhas pretendido:
Private Sub Copia_Modelo()
Dim sNum As Integer
On Error Resume Next
sNum = InputBox(“Quantos Clientes?”)
For i = sNum To 1 Step -1
Sheets(“Modelo”).Select
Sheets(“Modelo”).Copy Before:=Sheets(1)
Next
Sheets(“Clientes”).Select
End Sub
Agora o código que executaremos em 2º lugar e que renomeará as folhas criadas anteriormente, com os nomes correspondentes ao número de clientes que estabelecemos com o Código anterior:
Private Sub Renomear_Folhas()
On Error Resume Next
For i = 1 To Worksheets.Count – 2
Sheets(i).Name = Worksheets(“Clientes”).Cells(i, 1).Value
Next i
End Sub
Por último, o Código que, por uma questão de comodidade, dá para apagar todas as folhas anteriormente criadas e renomeadas, ficando sempre e só, as folhas “Modelo” e “Clientes”:
Sub Delete_Sheets()
Dim sNum As Integer
On Error Resume Next
Application.DisplayAlerts = False
sNum = Worksheets.Count – 2
For i = sNum To 1 Step -1
Sheets(1).Select
Sheets(1).Delete
Next
Application.DisplayAlerts = True
Sheets(“Modelo”).Select
End Sub
Nota final: As folhas “Modelo” e “Clientes”, deverão ficar sempre na sequência em que se encontram no exemplo, ou seja, as duas últimas, à direita.
Tópicos relacionados:
- Excel VBA Performance Coding Best Practices
- Excel VBA & Macro Code Tips, Tricks – OZGrid.com
- The Microsoft Excel Support Team Blog
- Criar um novo arquivo excel dinamicamente – Excel do Seu Jeito
- Application.DisplayAlerts
- Application.
- Worksheets in VBA Coding and in Worksheet Formulas – David Mcritchie