Jump to content

Ver se uma FC existe e se existir fazer uma rotina


jtiagodias

Recommended Posts

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

Link to comment
Share on other 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
Link to comment
Share on other sites

  • 4 weeks later...

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

Link to comment
Share on other 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.

Link to comment
Share on other 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

Link to comment
Share on other 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

Link to comment
Share on other 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

Link to comment
Share on other 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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.