Jump to content

Execução simultânea de macros (resolvido)


Recommended Posts

Boas

Alguém sabe se  alguma maneira de correr macros simultaneamente em VBA?

Por exemplo, com 3 macros

FunçãoA

FunçãoB

FunçãoC

Queria que a FunçãoA corresse enquanto são executadas FunçãoB e FunçãoC.

No fim da execução da FunçãoC, então a FunçãoA deverá parar.

Não coloco aqui o código porque é enorme (cerca de  2000 linhas de código).

Se me pudessem ajudar neste problema era genial, obrigado!

Link to comment
Share on other sites

Boas

Obrigado pelo link, mas penso que mesmo assim não dá para fazer mesmo o que eu queria. O que eu pretendia fazer era mostrar uma animação enquanto os cálculos são executados, pois estes às vezes demoram algum tempo.

Eu tenho a animação feita, mas como a animação é uma macro que nunca termina, nunca há hipótese de as funções principais (as de cálculo propriamente ditas) serem executadas  👍

Link to comment
Share on other sites

Sim podes utilizador o timer, mas não estou a ver em quê que isso ajude... Só iria fazer com que o processo demora-se mais.

Podes por exemplo antes de começar a tarefa avisar o utilizador que a mesma pode demorar bastante tempo...

Ou se por exemplo utilizares um formulário, criar algum tipo de animação com auxilio de um label...

Link to comment
Share on other sites

Sim, atrasa o procedimento mas pode dar um aspecto engraçado se forem poucos segundos 😉

podes me explicar como funciona isso do timer sff?

A sintaxe, espeficamente..

Teria que fazer basicamente o seguinte:


Start timer  'inicia a contagem

Do While (timer<5segundos)  ' esta parte está obviamente errada mas é para se perceber a ideia

MyMacro

Loop

O que devo colocar dentro do while para ele só executar "MyMacro" 5 segundos?

Link to comment
Share on other sites

Consegui agora mesmo, com esta função consigo correr código durante o tempo que quiser. Neste caso é uma coisa simples, que consiste em escrever "olá" durante 5 segundos.

Dim i As Long
Dim n As Date, l As Date

Sub func()

d = Time()
l = DateAdd("s", 5, Time)

Worksheets("Folha1").Cells(1, 1) = d
Worksheets("Folha1").Cells(1, 2) = l

i = 1
Do While d < l

    Worksheets("Folha1").Cells(i, 3) = "ola"
    i = i + 1
    d = Time()

Loop

End Sub

Obrigado por toda a ajuda, cumps! 😉

Link to comment
Share on other sites

Eu costumo usar o Application.StatusBar, para indicar ao utilizador quanto tempo falta ou o estado do cálculo.

Podes também colocar em pontos estratégicos do cálculo principal a animação durante uns segundinhos, mas vai acabar por atrasar o cálculo sem dar qualquer sossego ao utilizador. É preferível, em cálculos demorados, dar um apoio quantitativo ao utilizador do que uma simples animação.

Quero com isto dizer que apenas uma animação não vai causar menos frustração de demora prolongada, simplesmente sabe que não bloqueou, mas não sabe se falta muito ou está  a terminar. Agora se meteres a dizer na statusbar algo do género: "A processar cálculo 55 de 350" ou algo do género o utilizador não só sabe que está activo, como também mais ou menos o tempo de demora.

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
 Share

×
×
  • 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.