Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

.: Vitrine

Carregando artigos...

Views

Mostrando postagens com marcador ScreenUpdating. Mostrar todas as postagens
Mostrando postagens com marcador ScreenUpdating. Mostrar todas as postagens

VBA Excel Basic - Usando a Propriedade ScreenUpdating

VBA Excel - Usando a Propriedade ScreenUpdating















Na grande maioria das vezes que implementamos algum código para automação, não desejamos visualizar na tela o código que está sendo processado, para isso podemos usar a propriedade ScreenUpdating:


A sintaxe é: Application.ScreenUpdating

Ao utilizar essa funcionalidade o seu código será executado mais rápidamente:


Let Application.ScreenUpdating = False

Depois de colocar esta linha antes do início do processamento do seu código, não será capaz de ver o que a macro está fazendo, mas após o término não se esqueça de redefinir a propriedade ScreenUpdating de volta para True.


Let Application.ScreenUpdating = True

Exemplo:


'  Adicione uma Nova Worksheet

Private Sub GenerateNewWorksheet()
    Dim ActSheet As Worksheet
    Dim NewSheet As Worksheet

    ' Prevenindo as atualizações de tela.
    Let Application.ScreenUpdating = False
    Set ActSheet = ActiveSheet
    Set NewSheet = ThisWorkbook.Sheets().Add()

    NewSheet.Move

After:=Sheets(ThisWorkbook.Sheets().Count)

    ActSheet.Select
     ' Reativando a atualização da tela.
    Let Application.ScreenUpdating = True
End Sub

Please connect with me - I'm always happy to befriend.
(Caso queira conectar-se comigo, estou sempre feliz em ajudar.)

VBA Excel Basics - Bloqueando o usuário


O objeto Application do MS Excel fornece algumas formas que limitam a interação do usuário com a planilha que está usando. Isso será bem útil quando desejar impedir que os usuários interrompam alguma processo da sua aplicação MS Excel enquanto este executa algum processo demorado.

Explicando:

Defina a propriedade DisplayAlerts como False, escondendo as caixas de diálogo padrão do MS Excel enquanto o código for executado.

Configure a propriedade Interactive como False para bloquear completamente os usuários do MS Excel.

Otimize a propriedade ScreenUpdating como False, ocultando as alterações executadas via código. Um dos benefícios da definição de ScreenUpdating como False é que o código anterior é executado mais rapidamente, pois o MS Excel não precisa atualizar a tela ou rolar a planilha quando células estiverem selecionadas. 

Cada abordagem acima requer que se inclua um código no final do procedimento para retornar a configuração ao seus padrão original, caso contrário poderá bloquear um usuário permanentemente.

Segue:


Sub UserBlock()
    Dim cel As Range
    
    Let Application.Cursor = xlWait
    Let Application.Interactive = False
    Let Application.ScreenUpdating = False
    
    ' Simulando uma ação.
    For Each cel In [a1:iv999]
        cel.Select
    Next
    
    ' Restaura as configurações padrão
    Let Application.Interactive = True
    Let Application.ScreenUpdating = True
    Let Application.Cursor = xlDefault
    
    [a1].Select
End Sub


Tags: VBA, Excel, Basics, workbook, user, block, interactive, ScreenUpdating, DisplayAlerts, application

VBA Excel - Performance, mergulhando profundamente no VBA - VBA Performance


Muitas pessoas que utilizam o VBA para resolver os seus problemas no dia a dia, sequer imaginam que a linguagem VBA é a mesma utilizada no VB 6.0.

Essa dica a seguir serve para aqueles que corajosamente começaram criando uma macro aqui e outra ali e com o tempo interessaram-se pelo VBA, e hoje criam soluções prá lá e prá cá.

Application.ScreenUpdating & Application.Calculation

O modo como estes dois trabalham juntos encorajaram muitos desenvolvedores VBA para o MS Excel a desligá-los, enquanto seu código executa salvando um monte de tempo e desperdício de ciclos de processamento. E a melhoria é realmente significativa. Há aplicações que chegam a ficar 100 vezes mais rápido (por exemplo: Certo processo levava vários minutos antes da customização, após a otimização leva apenas par de segundos).

A configuração do cálculo é vital embora um erro grave tenha sido relatado depois que alguém, inadvertidamente desabilitou os cálculos dos números manualmente, não percebendo a necessidade de reativá-los quando a aplicação fazia cálculos.

Application.Calculation


Por padrão o MS Excel está definido para o cálculo automático. Para isso o MS Excel usa o seu motor inteligente - apenas calcula as células que foram alteradas, ou tenham sido afetadas por mudanças desde o último cálculo. Isso é ótimo, mas é importante ter em mente as coisas que fazem o MS Excel recalcular:

  • Inserir / editar ou apagar um valor na célula
  • Pressionar F9 para acionar um cálculo manual
  • Inserir ou excluir linhas ou colunas
  • ocultar ou reexibir linhas ou colunas
  • fixação ou remoção de dados de filtragem
  • e alguns outros.

Application.Screenupdating

O padrão do MS Excel mantém a visão da tela atualizada para refletir quaisquer alterações. Isso é uma coisa boa, caso contrário, não veríamos os efeitos quando editássemos uma planilha. A grosso modo a atualização da tela acontece sempre que um calcule ocorre. E isso às vezes pode ser uma chatice no desempenho, especialmente se houver gráficos complexos ou gráficos para redesenhar.

Aqui está um código que ajudará a tornar as suas aplicações muito mais rápidas:

Option Explicit
Option Private Module

Private mlCalcStatus As Long
Private mbInSpeed As Boolean

Public Sub speed()
   On Error Resume Next
   If Not mbInSpeed Then
      Let Application.ScreenUpdating = False
      Let Application.DisplayAlerts = False
      Let Application.EnableEvents = False
      Let mlCalcStatus = Application.Calculation
      Let Application.Calculation = xlCalculationManual
      Let mbInSpeed = True
   Else
      'we are already in speed - don't do the settings again
   End If
End Sub

Public Sub unspeed()
   On Error Resume Next
   Let Application.ScreenUpdating = True
   Let Application.DisplayAlerts = True
   Let Application.EnableEvents = True
   If mbInSpeed Then
      Let Application.Calculation = mlCalcStatus
   Else
      'this shouldn't be happening - put calc to auto - safest mode
      Let Application.Calculation = xlCalculationAutomatic
   End If
   Let mbInSpeed = False
End Sub

Use mais ou menos assim nas suas aplicações:

Public Sub mnu_ListFormulaLinks()
   On Error GoTo err_h
   
   If Not ActiveWorkbook Is Nothing Then
      speed
      'do your stuff
   Else
      MsgBox "Please open the workbook you wish to analyse", vbExclamation, gc_MsgBoxTitle
   End If
   
exit_proc:
   unspeed
   Exit Sub

err_h:
   MsgBox "Error " & Err.Number
   Resume exit_proc

End Sub


Reference: Codematic.net

Tags: VBA, Excel, performance, speed

Tornando a execução do seu código mais rápida por para a atualização da tela (Stop Screen Flickering)





Muitas vezes quando estamos manipulando inúmeras colunas, linhas e células, ficamos felizes por acompanhar os deslocamentos, agrupamentos e recálculos de tudo o que elaboramos. Isso acontece na primeira e segunda vez, depois torna-se extremamente irritantes visualizarmos a tela deslizando prá elá e prá cá na nossa frente enquanto a planilha demora infinitos minutos até finalizar a execução. Seus problemas acabaram. Basta que desligue a atualização da tela e sua planilha será atualiza somente uma vez, após ter processado tudo o que pediu que fosse processado. Divirta-se...

Sub StopFlickering()
   Application.ScreenUpdating=False

   ' Adicione o seu código.

   Application.ScreenUpdating=True
End Sub
André Luiz Bernardes A&A - WORK, DON´T PLAY! http://al-bernardes.sites.uol.com.br/ bernardess@gmail.com
diHITT - Notícias