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.

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

VBA Tips - Delay

































Blog Office VBA | Blog Excel | Blog Access |


As funções de delay são muito úteis quando precisamos desacelerar algum processamento ou funcionalidade em detrimento de esperarmos conexões de banco de dados, processos pendentes fora da nossa aplicação e por aí afora.














Divirtam-se!


  Public Function Delay(dblInterval As Double)
   '----------------------------------------------------
   ' Name: Delay
   ' Purpose: Generic delay code
   ' Inputs: dblInterval As Double
   ' Author: Arvin Meyer
   ' Date: January 2, 1999
   ' Comment: 
   '----------------------------------------------------
  On Error GoTo Err_Delay
  Dim Timer1 As Double
  Dim Timer2 As Double
  Timer1 = Timer()
    Do Until Timer2 >= Timer1 + dblInterval
        DoEvents
        Timer2 = Timer()
    Loop

Exit_Delay:
 Exit Function

Err_Delay:
 Select Case Err

 Case Else
  MsgBox Err.Description
  Resume Exit_Delay
 End Select

End Function

Agora, este código, pode ser usado para fazer um texto piscar ou animá-lo. Também pode usá-lo SendKeys, ou outra necessidade qualquer:
Option Explicit 
'API declaration to suspend operation for a specified time (Milliseconds)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Ou  
Option Explicit 
 Sub Wait(tSecs As Single) 
     '   Timer to create a pause
    Dim sngSec As Single      
    sngSec = Timer + tSecs 
    Do While Timer < sngSec 
        DoEvents 
    Loop 
End Sub 


No MS Excel:
Application.Wait Now + TimeValue("0:00:01")

Verifique o Help do VBA para o comando "Wait":
newHour = Hour(Now())newMinute = Minute(Now())newSecond = Second(Now()) + 10waitTime = TimeSerial(newHour, newMinute, newSecond)Application.Wait waitTime

Caso deseje esperar apenas 1 minuto, então:Application.Wait (now() + timevalue("00:01:00"))

Tags: VBA, Office, Tips, delay, wait, espera

Inspiration: 

VBA Tips - Como converto números para horas?

bgHeaderClock2.png

Como no Access a exibição de horas é limitada (só vai até 23:59), é uma prática comum usar números Single nos cálculos. A exibição nos relatórios, porém, precisa ser no formato de horas.

Para converter um número Single para uma String no formato de horas, a seguinte função pode ser usada:

'************************************************** 
'Funções para se trabalhar com horas acima de 24h
'************************************************** 
Public Function HrStr (dblHora As Double) As String
'Pega um valor numérico e o converte para Horas/Minutos
'Ex: 123,5 = "123:30"
'Ex: 23,9833333333333 = "23:59"
Dim strHoras As String
Dim strMinutos As String
'Pega as horas (parte inteira)
strHoras = CStr(Fix(dblHora))
'Pega os minutos
strMinutos = Format$(Abs((dblHora - Fix(dblHora)) * 60), "00")
'Verifica se o total de minutos é 60
If strMinutos = "60" Then
strMinutos = "00"
strHoras = CStr(CDbl(strHoras) + 1)
End If
'Concatena os dois
HrStr = strHoras & ":" & strMinutos
End Function
Esta outra função faz o contrário: pega um string no formato de horas e converte para número:
Public Function HrDbl(stHora As String) As Double
'Converte um string de hora (formato (h)hh:mm) para Double
'Ex: "135:30" = 135,5
'Ex: "23:59" = 23,9833333333333
Dim dblHoras As Double
Dim intMinutos As Integer
Dim blnDoisPontos As Boolean, blnNum As Boolean
Dim strNum As String
'Verifica se o sinal de dois pontos ':' está na terceira casa
'da direita para esquerda
If Asc(Left(Right(stHora, 3), 1)) = 58 Then
    blnDoisPontos = True
Else
    blnDoisPontos = False
End If
'Verifica se o resto dos dígitos são numéricos
strNum = Left(stHora, Len(stHora) - 3) & Right(stHora, 2)
If IsNumeric(strNum) = True Then
    blnNum = True
Else
    blnNum = False
End If
'Sai do procedimento se o formato estiver incorreto
If (blnDoisPontos = False) Or (blnNum = False) Then
    MsgBox "Informe a hora no formato hh:mm", vbCritical + vbOKOnly
    Exit Function
End If
'Pega os minutos
If CDbl(strNum) < 0 Then
    intMinutos = CInt(Right(strNum, 2)) * (-1)
Else
    intMinutos = CInt(Right(strNum, 2))
End If
'Pega as horas
dblHoras = Fix(CDbl(Left(strNum, Len(strNum) - 2)))
'Calcula a hora
HrDbl
= dblHoras + (intMinutos / 60)
End Function 


Tags
Microsoft Office, VBA, tips, convert, hour, hora, clock, time

André Luiz Bernardes
A&A® - Work smart, not hard.


diHITT - Notícias