Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Electro 99

Código de VB em Excel

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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  :mad:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.