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

JTualufo

Progress bar

7 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link 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