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

Sign in to follow this  
Electro 99

Código de VB em Excel

Recommended Posts

Electro 99

Prezados colegas,

Ultimamente tenho trabalhado na criação de uma ferramenta em excel com código VB.

No entanto, tenho uma dúvida:

Se estiver a criar código VB numa determinada folha de excel e se o input de uma determinada variável estiver numa célula doutra folha do Excel, como faço? variavel = range(Folha1!B44), por exemplo?

Agradeço qualquer ajuda que me possam dar ;)

Cumps,

Electro 99

Share this post


Link to post
Share on other sites
MetalFatigue

Public Sub ValorDeOutraFolha()
    Dim x As Integer
    
    x = Sheets("Folha2").Range("A1").Value
    
    MsgBox (CStr(x))
End Sub

É uma coisa assim. A folha é um objecto na colecção sheets que tem o objecto range que tem uma propriedade value. Que é o valor da célula. Se já programaste em linguagens orientada a objectos é fácil de compreenderes.

Share this post


Link to post
Share on other sites
Electro 99

Public Sub ValorDeOutraFolha()
    Dim x As Integer
    
    x = Sheets("Folha2").Range("A1").Value
    
    MsgBox (CStr(x))
End Sub

É uma coisa assim. A folha é um objecto na colecção sheets que tem o objecto range que tem uma propriedade value. Que é o valor da célula. Se já programaste em linguagens orientada a objectos é fácil de compreenderes.

Vou experimentar e depois digo-te alguma coisa ;)

Share this post


Link to post
Share on other sites
Electro 99

Vou experimentar e depois digo-te alguma coisa :thumbsup:

Uma pergunta: que resultado é que a message box vai apresentar?

Share this post


Link to post
Share on other sites
MetalFatigue

O que está na célula A1 da folha com o nome Folha2.

Se não tiver nada, não apresenta nada.

Share this post


Link to post
Share on other sites
Electro 99

O que está na célula A1 da folha com o nome Folha2.

Se não tiver nada, não apresenta nada.

Ok, está a funcionar. No entanto, fico com a impressão que o excel é muito lento com código de visual basic  😡

Share this post


Link to post
Share on other sites
MetalFatigue

Sim, VBA é mais lento pois trabalha sobre uma aplicação (Excel, Access, Word). Ainda assim, só ires buscar o resultado a outra folha não deverias notar nada. O livro tem muitos calculos? pode ser por causa disso. Devias desligar os cálculos automáticos antes dos procedimentos VBA e ligar novamente depois. Desde que os cálculos não sejam necessários durante esse período.

Tens num blog do Paulino, moderador neste fórum, esta e outras técnicas sobre como melhorar a performance em VBA: http://vbtuga.blogspot.com/2009/09/excel-dicas-de-vba-performance.html

Share this post


Link to post
Share on other sites
Electro 99

O livro tem muitos calculos?

Sim, o livro tem mesmo muitos cálculos. Criei algumas macros e cada vez que as ponho a funcionar, as folhas bloqueiam, ficando a piscar um tempo infinito.

Share this post


Link to post
Share on other sites
MetalFatigue

Sim, o livro tem mesmo muitos cálculos. Criei algumas macros e cada vez que as ponho a funcionar, as folhas bloqueiam, ficando a piscar um tempo infinito.

Então fica lento muito provavelmente por isso. Cada vez que o excel sente uma alteração ele procura calcular tudo novamente e mostrar. Ou seja cada vez que copias um valor e colas em VBA ele vai automaticamente fazer os cálculos todos. E se os cálculos tiverem ligações externas então é muito má a velocidade. Podes no entanto obriga-lo a fazer os cálculos só quando é realmente necessário através do Application.Calculation. Isto é basicamente o mesmo que ires a ferramentas-->opções-->calculos e alterares como o excel se comporta. Por isso depois de finalizar o procedimento convém colocar como estava.

Para resolveres o "piscar" tens de dizer para não mostrar nada enquanto não terminar o procedimento. Não só para o "piscar" como também melhora a velocidade já que o excel não tem actualizar o que está a mostrar sempre que fazes alterações o que exige mais processamento. Para isso usas o Application.ScreenUpdating

No entanto, para compreenderes melhor como usares estas ferramentas, aconselho-te ler aquele tópico do Paulino. Está bastante simples e acessível. Qualquer duvida cá estaremos para te ajudar.

Share this post


Link to post
Share on other sites
Electro 99

Então fica lento muito provavelmente por isso. Cada vez que o excel sente uma alteração ele procura calcular tudo novamente e mostrar. Ou seja cada vez que copias um valor e colas em VBA ele vai automaticamente fazer os cálculos todos. E se os cálculos tiverem ligações externas então é muito má a velocidade. Podes no entanto obriga-lo a fazer os cálculos só quando é realmente necessário através do Application.Calculation. Isto é basicamente o mesmo que ires a ferramentas-->opções-->calculos e alterares como o excel se comporta. Por isso depois de finalizar o procedimento convém colocar como estava.

Para resolveres o "piscar" tens de dizer para não mostrar nada enquanto não terminar o procedimento. Não só para o "piscar" como também melhora a velocidade já que o excel não tem actualizar o que está a mostrar sempre que fazes alterações o que exige mais processamento. Para isso usas o Application.ScreenUpdating

No entanto, para compreenderes melhor como usares estas ferramentas, aconselho-te ler aquele tópico do Paulino. Está bastante simples e acessível. Qualquer duvida cá estaremos para te ajudar.

Ok amigo, muito obrigado pelas dicas.

Abraço.

Share this post


Link to post
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
Sign in to follow this  

×

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.