Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

evento calculate

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

evento calculate

Postdi trittico69 » 08/05/11 16:37

Vorrei far si che mi parta automaticamente (anzi che manualmente) una macro al cambiamento automatico di orario in tre celle dove le ore vengono messe li tramite formule

Nel foglio ho inserito questo codice

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("AX1,AY1,AZ1"), Target) Is Nothing Then
    If Range("AX1") <> "" And Range("AY1") <> "" _
    And Range("AZ1") <> "" Then Call minuti
End If
End Sub


E nel modulo

Codice: Seleziona tutto
Sub minuti()
Dim AX As Range
Dim AY As Range
Dim AZ As Range
Dim F As Range
Dim G As Range
Dim H As Range

Set AX = ThisWorkbook.Sheets("GEN ").Range("AX1")
Set AY = ThisWorkbook.Sheets("GEN ").Range("AY1")
Set AZ = ThisWorkbook.Sheets("GEN ").Range("AZ1")
Set F = ThisWorkbook.Sheets("GEN ").Range("F10")
Set G = ThisWorkbook.Sheets("GEN ").Range("G10")
Set H = ThisWorkbook.Sheets("GEN ").Range("H10")

Select Case True

'PRIMO CASO
Case VBA.Minute(AX) > 30 And VBA.Minute(AY) = 0 And VBA.Minute(AZ) = 0
    Application.EnableEvents = False
    F = VBA.Hour(AX) + 1
    G = VBA.Hour(AY)
    H = VBA.Hour(AZ)

Case VBA.Minute(AX) = 0 And VBA.Minute(AY) > 30 And VBA.Minute(AZ) = 0
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY) + 1
    H = VBA.Hour(AZ)
   
Case VBA.Minute(AX) = 0 And VBA.Minute(AY) = 0 And VBA.Minute(AZ) > 30
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY)
    H = VBA.Hour(AZ) + 1
   
'SECONDO CASO
Case VBA.Minute(AX) > 0 And VBA.Minute(AY) > 0 And VBA.Minute(AZ) = 0 _
And VBA.Minute(AX) + VBA.Minute(AY) > 30 And VBA.Minute(AX) _
+ VBA.Minute(AY) <= 60
    Application.EnableEvents = False
    F = VBA.Hour(AX) + 1
    G = VBA.Hour(AY)
    H = VBA.Hour(AZ)
   
Case VBA.Minute(AX) > 0 And VBA.Minute(AY) > 0 And VBA.Minute(AZ) = 0 _
And VBA.Minute(AX) + VBA.Minute(AY) > 60
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY) + 1
    H = VBA.Hour(AZ)
   
'TERZO CASO
Case VBA.Minute(AX) > 0 And VBA.Minute(AY) = 0 And VBA.Minute(AZ) > 0 _
And VBA.Minute(AX) + VBA.Minute(AZ) > 30 And VBA.Minute(AX) _
+ VBA.Minute(AZ) <= 60
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY) + 1
    H = VBA.Hour(AZ)
   

Case VBA.Minute(AX) > 0 And VBA.Minute(AY) = 0 And VBA.Minute(AZ) > 0 _
And VBA.Minute(AX) + VBA.Minute(AZ) > 60
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY)
    H = VBA.Hour(AZ) + 1
   

'QUARTO CASO
Case VBA.Minute(AX) = 0 And VBA.Minute(AY) > 0 And VBA.Minute(AZ) > 0 _
    And VBA.Minute(AY) + VBA.Minute(AZ) > 30 And VBA.Minute(AY) _
    + VBA.Minute(AZ) <= 60
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY) + 1
    H = VBA.Hour(AZ)

Case VBA.Minute(AX) = 0 And VBA.Minute(AY) > 0 And VBA.Minute(AZ) > 0 _
    And VBA.Minute(AY) + VBA.Minute(AZ) > 60
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY)
    H = VBA.Hour(AZ) + 1
   

'OTTAVO CASO
Case VBA.Minute(AX) > 0 And VBA.Minute(AY) > 0 And VBA.Minute(AZ) > 0 _
And VBA.Minute(AX) + VBA.Minute(AY) + VBA.Minute(AZ) > 150
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY) + 1
    H = VBA.Hour(AZ) + 2


'SETTIMO CASO
Case VBA.Minute(AX) > 0 And VBA.Minute(AY) > 0 And VBA.Minute(AZ) > 0 _
And VBA.Minute(AX) + VBA.Minute(AY) + VBA.Minute(AZ) > 120 _
And VBA.Minute(AX) + VBA.Minute(AY) + VBA.Minute(AZ) <= 150
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY)
    H = VBA.Hour(AZ) + 2

'SESTO CASO
Case VBA.Minute(AX) > 0 And VBA.Minute(AY) > 0 And VBA.Minute(AZ) > 0 _
And VBA.Minute(AX) + VBA.Minute(AY) + VBA.Minute(AZ) > 60 _
And VBA.Minute(AX) + VBA.Minute(AY) + VBA.Minute(AZ) <= 90
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY)
    H = VBA.Hour(AZ) + 1

Case VBA.Minute(AX) > 0 And VBA.Minute(AY) > 0 And VBA.Minute(AZ) > 0 _
And VBA.Minute(AX) + VBA.Minute(AY) + VBA.Minute(AZ) > 90 _
And VBA.Minute(AX) + VBA.Minute(AY) + VBA.Minute(AZ) <= 120
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY) + 1
    H = VBA.Hour(AZ) + 1

'QUINTO CASO
Case VBA.Minute(AX) > 0 And VBA.Minute(AY) > 0 And VBA.Minute(AZ) > 0 _
And VBA.Minute(AX) + VBA.Minute(AY) + VBA.Minute(AZ) > 30 _
And VBA.Minute(AX) + VBA.Minute(AY) + VBA.Minute(AZ) <= 60
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY) + 1
    H = VBA.Hour(AZ)

Case VBA.Minute(AX) > 0 And VBA.Minute(AY) > 0 And VBA.Minute(AZ) > 0 _
And VBA.Minute(AX) + VBA.Minute(AY) + VBA.Minute(AZ) > 60
    Application.EnableEvents = False
    F = VBA.Hour(AX)
    G = VBA.Hour(AY)
    H = VBA.Hour(AZ) + 1

'IN NESSUNA DELLE CONDIZIONI SOPRA
Case Else
    Application.EnableEvents = False
    F = ""
    G = ""
    H = ""

End Select

Set AX = Nothing
Set AY = Nothing
Set AZ = Nothing
Set F = Nothing
Set G = Nothing
Set H = Nothing
Application.EnableEvents = True
End Sub



Chi mi aiuta a mettere un evento Calculate?
trittico69
Utente Senior
 
Post: 487
Iscritto il: 16/08/09 18:41

Sponsor
 

Re: evento calculate

Postdi Anthony47 » 08/05/11 21:58

Regola N. 1: non chiedere a noi di cercare sulla guida on line del prodotto, anche nel caso che tu sia molto occupato.

Nel caso in oggetto, l' help on line dle vba, alla voce "Evento Calculate" dice:
Si verifica dopo che il grafico traccia dati nuovi o modificati per l'oggetto Chart o dopo che è stato ricalcolato il foglio di lavoro per l'oggetto Worksheet.
Utilizzo
Private Sub oggetto_Calculate()

oggetto Chart o Worksheet. Per informazioni sull'utilizzo di eventi con l'oggetto Chart, vedere Utilizzo di eventi con l'oggetto Chart.

Esempio
Questo esempio adatta la dimensione delle colonne comprese tra A e F ogni volta che viene ricalcolato il foglio di lavoro.

Private Sub Worksheet_Calculate()
Columns("A:F").AutoFit
End Sub


Ora devi mettere la tua istruzione
If Range("AX1") <> "" And Range("AY1") <> "" _
And Range("AZ1") <> "" Then Call minuti
in mezzo tra Sub ed End Sub.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "evento calculate":


Chi c’è in linea

Visitano il forum: saxas e 9 ospiti