• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

jtiagodias

Ver se uma FC existe e se existir fazer uma rotina

10 mensagens neste tópico

Ora viva.

Alguém me dá uma ajuda???

Tenho uma série de folhas de cálculo. Durante alguns processos vou eliminando folhas de cálculo até que ficam apenas as que pretendo.

Nesse momento queria ver, de um determinado grupo, quais é que existem no ficheiro. Depois queria copiar todo o seu conteudo, colar como valor e depois apagar outras FC que serviam de base a essas.

A minha dúvida é apenas saber se ainda existe no ficheiro e, se existir, fazer a rotina que quero...

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não entendi muito bem o que queres ver se existe. Mas se for folhas calculo é só fazeres o seguinte para percorreres todas as folhas de um livro:

    Dim folha As Worksheet
    
    For Each folha In Sheets
        'Colocar aqui o codigo a executar para cada folha
    Next

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tenho uma série de folhas.

Ao longo do processo vou eliminando umas e mantendo outras que contem os inputs.

O objectivo é na fase final ver quais é que ainda existem (exceptuando os input's) e, nessas, seleccionar tudo, copiar como valor para depois apagar as que são input's.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Sub CopiaFolhas()
    Dim folha As Worksheet
    
    For Each folha In Sheets
        folha.Cells.Copy
        Workbooks("Livro a colar.xls").Activate
        Sheets("FolhaAColar").Select 'Aqui deves ter de encontrar uma solução para não estar sempre a colar na mesma, mas isso so vendo o teu codigo.
        Cells.PasteSpecial (xlPasteValues)
    Next
End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora viva.

Com as festas acabei por não conseguir aplicar a dica.

Vejo agora que me serve na perfeição. Eu ia complicar... Ia verificar se a folha existia e se existisse copiar e colar valores etc... Assim pego nos valores de cada uma das folhas e faço e acabou...

Obrigado.

Mas como os meus conhecimentos de VBA não são muitos queria perguntar mais uma coisa...

Isto é um ciclo for... Ele vai fazendo folha a folha mas acontece que tenho umas folhas que são os inputs que são umas grandes listagens...

O que é que eu queria??? Excluir 6 folhas do ciclo for. Assim a rotina ficava muito mais rápida.

Há forma de eu fazer isso??

Obrigado desde já.

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Excluir, excluir do for não podes a não ser que, por exemplo, tenhas sempre as folhas que te interessam num index par ou impar. Ou seja uma quantificação lógica que te permita manobrar.

nesse caso terias de saber quantas folhas estão no livro e depois fazer um ciclo que só vá buscar essas folhas. Por exemplo se só quisesses as folhas impares:

Sub CopiaFolhas()
    Dim numFolhas As Integer
    numFolhas = ActiveWorkbook.Sheets.Count
    
    Dim i As Integer
    For i = 1 To numFolhas Step 2
        Sheets(i).Cells.Copy
        Workbooks("Livro a colar.xls").Activate
        Sheets("FolhaAColar").Select 'Aqui deves ter de encontrar uma solução para não estar sempre a colar na mesma, mas isso so vendo o teu codigo.
        Cells.PasteSpecial (xlPasteValues)
    Next
End Sub

Se esta forma não for viável a única hipotese será colocares um if no inicio do for que avalia se a folha é para ser copiada ou não, com o resto do código no seu interior. Neste caso ele irá passar por essa folha na mesma, simplesmente não fará nada e passará à próxima.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assunto fechado...

Pensava que o problema era das listagens (porque ele demorava a copiar e colcar como valor) mas descobri que afinal a rotina estava a parar porque uma das folhas de cálculo estava protegida.

A rotina não estava a dar erro, como eu pensava que acontecesse, mas estava a demorar e acabava por bloquear o ficheiro...

Já está resolvido e não foi necessário "pegar na tua solução" mas obrigado pela dica.

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom...

Com tantos avanços e recuos também já deves estar baralhado...

Já não me recordava que 2 folhas têm fórmulas... Portanto quando copio e colo como valores perdem-se as fórmulas.

Mas eu preciso que essas fórmulas lá fiquem.

Sendo que isto é apenas em 2 folhas especificas (sempre) lembrei-me que poderia, antes de correr a rotina de copiar e colar como valores, fazer um copy das células dessas folhas e, depois de corrida essa rotina, fazer um colar especial como fórmulas.

O problema é que já testei e não consegui por isso a funcionar.

Deixo aqui um ficheiro qcom o código que tenho e que explica o que queria fazer e o que é qeu me está a acontecer: http://www.box.net/shared/1pvmuhogmt

Consegues dar-me mais essa ajuda?

Obrigado pelo apoio porque, sozinho, não consguiris dar uma série de passos para acabar este ficheiro.

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei se entendi muito bem o que pretendes...

É assim o que me está a parecer é que pretendes transformar em valor o conteúdo de todas as folhas excepto na 5 e 6. Ora, isto como indiquei é algo quantificável. Ou seja podes criar um for que vá só até a folha 4.

Dim i As Integer
    For i = 1 To 4
        Sheets(i).Cells.Copy
        Cells.PasteSpecial (xlPasteValues)
    Next

Só precisas deste código. Mas posso estar a entender mal

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora viva.

De facto estava a complicar... Com o código proposto consegui resolver o meu problema. Tive que renumerar as FC e mas é bem mais fácil desta forma.

De qualquer forma tive que efectuar uma alteração ao código porque ele estava a correr as folhas todas, pegava no conteudo da última e colava na primeira.

Inseri o .select e está a funcionar na perfeição.

O numFolhas-2 é apenas o número de folhas (determinado antes deste ciclo) menos 2 (que são as duas em que eu quero manter as fórmulas existentes).

O cófigo que utilizei foi:

For i = 1 To numFolhas - 2

        Sheets(i).Cells.Copy

        Sheets(i).Select

        Cells.PasteSpecial (xlPasteValues)

Next

Obrigdo pelas dicas preciosas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora