JTualufo Posted December 14, 2009 at 09:24 AM Report Share #300251 Posted December 14, 2009 at 09:24 AM 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 More sharing options...
MetalFatigue Posted December 14, 2009 at 11:19 PM Report Share #300432 Posted December 14, 2009 at 11:19 PM 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 More sharing options...
JTualufo Posted December 15, 2009 at 08:59 AM Author Report Share #300445 Posted December 15, 2009 at 08:59 AM 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 More sharing options...
jtiagodias Posted December 16, 2009 at 11:19 AM Report Share #300687 Posted December 16, 2009 at 11:19 AM 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 More sharing options...
MetalFatigue Posted December 17, 2009 at 08:26 PM Report Share #301173 Posted December 17, 2009 at 08:26 PM 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 More sharing options...
joseA Posted December 18, 2009 at 12:17 PM Report Share #301243 Posted December 18, 2009 at 12:17 PM MetalFatigue, não terias como postar um ficheiro exemplo. ? Link to comment Share on other sites More sharing options...
MetalFatigue Posted December 19, 2009 at 02:45 PM Report Share #301413 Posted December 19, 2009 at 02:45 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now