Jump to content

Progress bar


JTualufo
 Share

Recommended Posts

Boas...

tenho um programa em VBA, quase completo, mas gostaria de colocar 'progress bar' ou 'status bar' para mostrar o usuario que determinada operacao esta ser processada.

pro exempo:

consideremos um comando para gravar.

sub  gravar()

dim i as integer

dim s as double

s = o

for i = 0 to 100

s = s + sheet1.cells(i, 2).value

next i

sheet1.cells( 2, 3). value = s

end sub

este e apenas um exemplo dum comando que algumas vezes demora processar dependendo do tamanho do cilco, entao eu gostaria de encontrar uma forma de criar uma barra de progresso para mostrar ao usuario que o processo ainda esta em curso, tem uma funcao em VBA que experimenmtei mas nao funcionou "application.statusbar ou application.progressbar"

agradeco a vossa colaboracao.

Link to comment
Share on other sites

Podes fazer mesmo uma barra de progresso com uma form, mas acho desnecessário e mais pesado a nível de recursos.

O ideal é usares a statusbar para indicar o progresso textualmente. Uma coisa deste género:

sub  gravar()

dim i as integer
dim s as double
dim max as integer
max=100
s = o

for i = 0 to max

s = s + sheet1.cells(i, 2).value
Application.Statusbar=cstr(i) + " gravados de " + cstr(max) + ". Por favor Aguarde..."
next i

sheet1.cells( 2, 3). value = s
Application.Statusbar=false
end sub
Link to comment
Share on other sites

Oi  MetalFatigue, a ideia eh optima e fiunciona, mas para o meu caso seria necessario mesmo uma progress bar porque us usuarios tem pouca familiaridade com o exel e eles esperam trabalhar apenas com a interface grafica que produzi... ja criei um formulario para a progress bar, o problema eh como colocar um evento neste formulario e associa-lo a um outro evento dum outro formulario com o botao "Gravar"?  peco ajuda e obrigado pela sua atencao.

Link to comment
Share on other sites

MetalFatigue.

Desculpa lá a minha ignorância mas como é que utilizo este código??

Estou a fazer um Form para, com base na selecção feita pelo utilizador, ele automaticamente pegar numas folhas de cálculo, abrir um novo ficheiro e colar lá as folhas seleccionadas.

A minha pergunta é, como é qeu consigo utilizar o código que tu, pro-activamente, aqui deixaste.

Desde já o meu obrigado.

Abraço

Podes fazer mesmo uma barra de progresso com uma form, mas acho desnecessário e mais pesado a nível de recursos.

O ideal é usares a statusbar para indicar o progresso textualmente. Uma coisa deste género:

sub  gravar()

dim i as integer
dim s as double
dim max as integer
max=100
s = o

for i = 0 to max

s = s + sheet1.cells(i, 2).value
Application.Statusbar=cstr(i) + " gravados de " + cstr(max) + ". Por favor Aguarde..."
next i

sheet1.cells( 2, 3). value = s
Application.Statusbar=false
end sub

Link to comment
Share on other sites

Oi  MetalFatigue, a ideia eh optima e fiunciona, mas para o meu caso seria necessario mesmo uma progress bar porque us usuarios tem pouca familiaridade com o exel e eles esperam trabalhar apenas com a interface grafica que produzi... ja criei um formulario para a progress bar, o problema eh como colocar um evento neste formulario e associa-lo a um outro evento dum outro formulario com o botao "Gravar"?  peco ajuda e obrigado pela sua atencao.

Nunca fiz nenhuma progressbar, mas dou-te aqui uns exemplos que encontrei uma vez que estive quase a precisar de uma:

Esta é mais simples de fazer:

http://www.your-save-time-and-improve-quality-technologies-online-resource.com/excel-vba-progressbar.html

Esta julgo que é dando uso mesmo a um controlo de progressbar. Não sei se precisa-se de instalar algum componente:

http://www.codeguru.com/vb/controls/vb_activex/activex/article.php/c7121/#more

MetalFatigue.

Desculpa lá a minha ignorância mas como é que utilizo este código??

Estou a fazer um Form para, com base na selecção feita pelo utilizador, ele automaticamente pegar numas folhas de cálculo, abrir um novo ficheiro e colar lá as folhas seleccionadas.

A minha pergunta é, como é qeu consigo utilizar o código que tu, pro-activamente, aqui deixaste.

Desde já o meu obrigado.

Abraço

Suponho que as folhas sejam coladas uma a uma. Não?

Basicamente no ciclo que deves ter logo a seguir de ele colar no novo livro colocas esta linha de código com a informação que queres passar (podes usar contagens de folhas por exemplo):

Application.Statusbar="Informação que quero passar ao utilizador"

No final do processamento todo deves colocar esta linha:

Application.Statusbar=false

Que vai fazer com que devolvas o comando da statusbar ao próprio excel.

Deves ter em atenção que esta informação não aparece numa form, mas sim na statusbar do excel. Que é barra no fundo do excel. Por isso se estiveres a trabalhar muito com forms poderás preferir colocar a informação directamente na form através de uma label.

Link to comment
Share on other sites

Aqui está um exemplo. Basta abrirem um novo livro e colocarem o código em um modulo e correrem:

Sub Macro1()
    Dim max As Integer, i As Integer
    max = 20
    Cells.ClearContents
    For i = 1 To max
        Cells(i, 1).Value = i
        Application.StatusBar = "Processadas " & CStr(i) & " de " & CStr(max)
        Application.Wait (Now + TimeValue("00:00:02"))
    Next
    
    Application.StatusBar = False
End Sub

É muito simples. Não há muito mais a dizer. O resto já se prende com uso do excel e das macros. o que está dentro do For é uma simulação de um processo que demora cerca de 2 segundos (daí o application.wait, que será provavelmente desnecessário nas vossas aplicações). O que ele faz é na 1ª Coluna ir preenchendo de 1 a 20 as celulas e após cada colocação de valor na celula mostra ao utilizador uma mensagem na statusbar de quantas já foram colocadas e quantas faltam.

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.