jtiagodias Posted December 17, 2009 at 07:21 PM Report Share #301167 Posted December 17, 2009 at 07:21 PM 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 More sharing options...
MetalFatigue Posted December 17, 2009 at 08:39 PM Report Share #301175 Posted December 17, 2009 at 08:39 PM 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 Link to comment Share on other sites More sharing options...
jtiagodias Posted December 18, 2009 at 05:05 PM Author Report Share #301314 Posted December 18, 2009 at 05:05 PM 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. Link to comment Share on other sites More sharing options...
MetalFatigue Posted December 18, 2009 at 06:10 PM Report Share #301334 Posted December 18, 2009 at 06:10 PM 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 More sharing options...
jtiagodias Posted January 13, 2010 at 09:01 AM Author Report Share #305820 Posted January 13, 2010 at 09:01 AM 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 More sharing options...
MetalFatigue Posted January 13, 2010 at 03:00 PM Report Share #305880 Posted January 13, 2010 at 03:00 PM 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 More sharing options...
jtiagodias Posted January 14, 2010 at 10:51 AM Author Report Share #306025 Posted January 14, 2010 at 10:51 AM 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 More sharing options...
jtiagodias Posted January 15, 2010 at 08:09 AM Author Report Share #306199 Posted January 15, 2010 at 08:09 AM 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 More sharing options...
MetalFatigue Posted January 15, 2010 at 09:05 PM Report Share #306360 Posted January 15, 2010 at 09:05 PM 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 More sharing options...
jtiagodias Posted January 18, 2010 at 08:28 AM Author Report Share #306745 Posted January 18, 2010 at 08:28 AM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now