Notifications
Clear all

atribuir propriedades à células ao criar planilhas via VBA

4 Posts
2 Usuários
0 Reactions
815 Visualizações
(@ronibarros)
Posts: 0
New Member
Topic starter
 

Caríssimos,
tenho um código que cria planilhas em várias abas de uma pasta a partir de uma planilha principal e indexado por uma coluna. por exemplo: na coluna que serve de índice para criar as planilhas têm nomes de cada agência, daí a sub verifica as linhas que possuem casa nome de agência e coloca na planilha correspondente.
o problema é que, ao criar as planilhas eu preciso atribuir algumas condições a algumas células, pois as planilhas serão usadas por outras pessoas para inserir informações.
já consigo atribuir a condição de não bloquear as células para a edição quando eu bloquear as planilhas, com a linha a seguir: Range("Z4:AH3000").Locked = False. gostaria de umas linhas para atribuir validação de dados, como por exemplo para a pessoa só conseguir inserir data ou as palavras "sim" ou "não". é complicado criar várias planilhas e ter que fazer essas atribuições uma por uma.
outra solução seria conseguir copiar de uma forma que as atribuições das células da planilha original sejam copiadas para as planilhas criadas, o que não acontece com o código que eu tenho conforme abaixo.

Sub FiltraEmAbas()
Dim ws1 As Worksheet
Dim wsNew As Worksheet
Dim rng As Range
Dim r As Integer
Dim c As Range
Dim rng1 As Range

Set ws1 = Sheets("Consolidada")

'Calcula e Monta o range Nomeado
Call AddNameRange

Set rng = Range("Database")
Set rng1 = ActiveWorkbook.Worksheets("top").Range("Z1:AH2")
'extrai uma lista geral '1 3 E 4
ws1.Columns("F:F").AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=Range("AK1"), Unique:=True
r = Cells(Rows.Count, "AK").End(xlUp).Row

'estabelece uma área de critério ' 1
Range("AM1").Value = Range("F1").Value

For Each c In Range("AK2:AK" & r)
'adiciona a lista geral cada noma à área de critério ' 1
ws1.Range("AM2").Value = c.Value
'adiciona uma nova sheet e aciona o filtro avançado
Set wsNew = Sheets.Add
wsNew.Move After:=Worksheets(Worksheets.Count)
wsNew.Name = c.Value
rng.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Consolidada").Range("AM1:AM2"), _
CopyToRange:=wsNew.Range("A3"), _
Unique:=False
' rng.AdvancedFilter Action:=xlFilterCopy, _
' CriteriaRange:=Sheets("top").Range("A1:AH2"), _
' CopyToRange:=wsNew.Range("A1"), _
' Unique:=False

wsNew.Columns("AK:AM").Delete
'copiar as células TOP
rng1.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=wsNew.Range("Z1:AH2"), Unique:=False
Range("Z4:AH3000").Locked = False
Cells.Select
Cells.EntireColumn.AutoFit
Next

ws1.Select
ws1.Columns("AK:AM").Delete
End Sub

Quero deixar claro que esse código eu peguei na internet e adaptei e fiz meus acréscimos, conforme minhas necessidades.

 
Postado : 04/03/2016 8:40 am
(@mprudencio)
Posts: 0
New Member
 

Cara eu nem olhei o codigo, mas qdo uso um codigo com esse objetivo, utilizo de uma planilha modelo, ou seja ela ja esta formatada como eu desejo e com todas as propriedades que wu considere necessario.

Pra vc entender configuro a pagina para uma possivel impressão, configuro todas as validações de dados necessarias, insiro todas as formulas que possam ser necessarias.

Enfim tudo que preciso na planilha ja esta pronto para que não tenha que configurar cada nova aba a cada criação.

Para duplicar a aba, efeito didadito apenas, escolha uma aba qualquer clique sobre seu nome com o botao direito, escolha mover ou copiar, na janela que abrir, marque criar copia, marque mover para o fina(opicional), e confirme, o resultado sera uma nova aba com o mesmo nome (2), esta nova aba sera exatamente igual a primeira com todas as formatações, formulas, e tudo que estiver na primeira aba.

 
Postado : 04/03/2016 10:39 am
(@ronibarros)
Posts: 0
New Member
Topic starter
 

Cara eu nem olhei o codigo, mas qdo uso um codigo com esse objetivo, utilizo de uma planilha modelo, ou seja ela ja esta formatada como eu desejo e com todas as propriedades que wu considere necessario.

Pra vc entender configuro a pagina para uma possivel impressão, configuro todas as validações de dados necessarias, insiro todas as formulas que possam ser necessarias.

Enfim tudo que preciso na planilha ja esta pronto para que não tenha que configurar cada nova aba a cada criação.

Para duplicar a aba, efeito didadito apenas, escolha uma aba qualquer clique sobre seu nome com o botao direito, escolha mover ou copiar, na janela que abrir, marque criar copia, marque mover para o fina(opicional), e confirme, o resultado sera uma nova aba com o mesmo nome (2), esta nova aba sera exatamente igual a primeira com todas as formatações, formulas, e tudo que estiver na primeira aba.

Meu caro, obrigado por responder,
acho que não fui claro na minha questão. A planilha original já tem todas as configurações e validações necessárias. O que eu faço não é simplesmente copiar a aba, o código divide a planilha por agência, e para isso ele lê uma determinada coluna onde as células se referem à agência daquele contrato. Daí ele gera as abas com todos os dados daquelas linhas daquela agência.
se você ou alguém souber como configurar determinadas células de uma planilha no momento da criação, través do VBA, pra mim seria suficiente. Tipo como eu fiz para desbloquear, na linha: Range("Z4:AH3000").Locked = False. para mudar propriedade ou aceitação de entrada de dados das células.

 
Postado : 04/03/2016 11:43 am
(@mprudencio)
Posts: 0
New Member
 

Vc nao entendeu, fiz esse exemplo do que descrevi acima, veja que criei uma aba com o nome modelo é ela que vai ser duplicada e suas propriedades mantidas, ela é exatamente igual a base de dados. Veja que ela contem uma validação uma coluna formatada como moeda e uma como data.

Assim que vc executar a macro a aba modelo permanecera oculta (nem vai aparecer no menu de contexto), e preciso exibir editando o VBA.

Exiba o editor VBA e depure o codigo pra ver como ele funciona.

 
Postado : 04/03/2016 1:13 pm