Não saber por quanto tempo um programa será executado nos deixa inquietos. O programa pode ter travado ou terminar em cinco minutos – ou talvez em duas horas. Este artigo visa manter o usuário ansioso informado em tempo real por meio da barra de status.
Este artigo pressupõe que o leitor tenha a faixa Desenvolvedor exibida e esteja familiarizado com o Editor VBA. Se não, por favor, Google “Excel Developer Tab” ou “Excel Code Window”.
O exercício ficará assim, usando o arquivo de exemplo encontrado aqui.
O Processo
O programa extrairá os dados, onde o Fornecedor possui um país, para um array.
Depois que os dados forem extraídos, o programa gravará a matriz na planilha de resultados.
Em cada caso, a barra de status mostrará o progresso.
O código
Nesse código, toda vez que o nomeador (número da linha) dividido por 2000 = 0.00, o programa relata o progresso.
Modifique o denominador de 2000 conforme necessário.
Insira um módulo VBA e copie o seguinte código na janela de código:
Option Explicit Dim arrSupplier(70000, 3) 'um array 2D de 70,000 linhas e três colunas Dim eRow As Long Dim nProgress As Integer Dim cRow As Long Dim nMarker As Single Dim nArrayRows As Long Dim n As Long Dim i As Long Sub Main( ) Call LoadArray Call WriteResults MsgBox "A execução foi concluída. A barra de status agora será limpa." Application.StatusBar = False Application.Screenupdating = True End Sub Sub LoadArray() Application.ScreenUpdating = False 'evitar que a tela pisque Erase arrSupplier() 'certifique-se de que nenhum resíduo permaneça na matriz Application.StatusBar = False 'limpe o intervalo da barra de status ("A3").Select Selection.End(xlDown).Select 'Encontrar a última linha, como denominador eRow = ActiveCell.Row n = -1 Range("A3").Select Do While ActiveCell > "" 'Loop while data dura If ActiveCell.Offset(0, 1) > "" Then 'Se houver um país, registre o fornecedor n = n + 1 arrSupplier(n, 0) = ActiveCell arrSupplier(n, 1) = ActiveCell.Offset(0, 1) arrSupplier(n, 2) = ActiveCell.Offset(0, 2) End If cRow = ActiveCell.Row nMarker = cRow / 2000 'buscando zero If cRow > 0 And nMarker - Int(nMarker) = 0 Then 'mesmo resultado que usando um operador 'Mod' nProgress = (cRow / eRow) * 100 Application.StatusBar = "Gravando dados no array " & nProgress & "% completo" DoEvents End If Range("A" & ActiveCell.Row + 1).Selecione Loop nProgress = (cRow / eRow) * 100 'atualiza os resultados, após o último marcador Application.StatusBar = "Imprimindo resultados " & nProgress & "% concluído" nArrayRows = n End Sub Sub WriteResults() Sheets("Results").Activate Range("A3:C100000").ClearContents 'limpa a área de resultados Range("A3").Select For i = 0 To n 'percorre o array… If arrSupplier(i, 0) = "" Then Exit For '… até que esteja vazio ActiveCell = arrSupplier(i, 0) ActiveCell.Offset(0, 1) = arrSupplier(i, 1) ActiveCell.Offset(0, 2) = arrSupplier(i, 2) cRow = ActiveCell.Row nMarker = cRow / 2000 If cRow > 0 And nMarker - Int(nMarker) = 0 Then nProgress = (cRow / nArrayRows) * 100 Application.StatusBar = "Printing results " & nProgress & "% complete" DoEvents End If Range("A" & ActiveCell .Row + 1).Select Next i nProgress = (cRow / nArrayRows) * 100 'atualizar os resultados Application.StatusBar = "Imprimindo resultados " & nProgress & "% concluído" End Sub
Adicionar um botão a start subprocedimento “Principal”
O Resultado
A barra de status do Excel exibirá o progresso. Se você tiver um computador muito rápido, pode ser necessário dobrar ou triplicar a quantidade de dados.
Recuperando pastas de trabalho corrompidas
À medida que o Excel se tornou mais sofisticado, ele tende a travar de vez em quando por vários motivos, desde configurações de margem da impressora em segundo plano até suplementos defeituosos ou danos gerais ao Office Suite. Quando isso acontece, é tarde demais para tomar medidas preventivas; o trabalho feito desde o último salvamento pode ser irrevogávelcabLiost, a menos que você tenha um Reparação do Excel ferramenta para corrigir a pasta de trabalho corrompida.
Introdução do autor:
Felix Hooker é um especialista em recuperação de dados em DataNumen, Inc., líder mundial em tecnologias de recuperação de dados, incluindo rar reparar e produtos de software de recuperação SQL. Para mais informações visite www.datanumen.com
Deixe um comentário