Condividi:        

pop- up

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

pop- up

Postdi larzillo » 20/05/16 20:18

Salve rieccomi con altro problema per il mago Anthony .Ho un range (tipo B5 - B55) dove in ogni cella ho un collegamento in DDE che aggiorna il dato numerico in esse contenuto, avrei bisogno di un pop up che si attivi nel foglio attivo(diverso da quello dove si trova il range in oggetto) quando in una qualsiasi cella del range si verifica un incremento improvviso che modifica il dato da X a X+100 o piu.
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Sponsor
 

Re: pop- up

Postdi Anthony47 » 21/05/16 17:24

Il mio suggerimento e' che lo fai con una macro "On Time" che ogni N secondi controlla se sul foglio di importazione ci sono delle celle che differiscono da quanto riportato su un "foglio replica" (che deve gia' esistere):
La macro da mandare in esecuzione ogni N secondi e' questa:
Codice: Seleziona tutto
Public myNext As Date     'IN TESTA AL MODULO
Sub HighL()
Dim DDESh As Worksheet, Shadw As Worksheet, myC As Range, myCVal
Dim myFl As Boolean, myDiff As String
'
Set DDESh = Sheets("Foglio1")   '<<<1 il foglio con i link
Set Shadw = Sheets("1shad")     '<<<2 il foglio "replica"
'
myDiff = Format(Now, "hh:mm:ss") & vbCrLf
For Each myC In DDESh.Range("B5:B55")
    myCVal = myC.Value
    If IsNumeric(myCVal) And myCVal <> 0 Then
        If Abs((myCVal - Shadw.Range(myC.Address).Value) / myCVal) > 0.1 Then   '***
            myFl = True
            myDiff = myDiff & myC.Address & ", "         '+++
        End If
        Shadw.Range(myC.Address).Value = myCVal
    End If
Next myC
If myFl Then
    If Len(myDiff) > 200 Then myDiff = Left(myDiff, 200) & "...."
    UserForm1.Show vbModeless
    UserForm1.Label1.Caption = myDiff
Else
    Unload UserForm1
End If
End Sub

Va inserita in un Modulo standard; le due istruzioni marcate <<< vanno adattate al tuo caso.
Il "foglio replica" deve gia' esistere, e corrispondere a quando indicato nella riga marcata <<<2.
Le condizioni per cui si innesca la segnalazione e' codificata nell'istruzione marcata *** (ora scatta quando un valore cambia oltre il 10% del precedente valore); il tipo di messaggio segnalato e' codificato nell'istruzione marcata +++ (ora viene segnalato l'indirizzo di cella)

All'inizio, quando avvii per la prima volta l'esecuzione della Sub HighL e' meglio che il foglio replica sia vuoto, salvo che nei primi cicli rapidamente esso verra' allineato al foglio principale (questo provochera' alcune segnalazioni probabilmente improprie nel primo minuto di esecuzione).

Per avviare l'esecuzione automatica della macro:
Dopo il codice della Sub HighL aggiungi questa macro:
Codice: Seleziona tutto
Sub Avvio()
Call HighL
myNext = Now + TimeSerial(0, 0, 10)     '### Riesegui tra 10 secondi
Application.OnTime myNext, "Avvio"
End Sub

Per rieseguire piu' spesso /meno spesso cambia l'istruzione marcata ###

Nel modulo "Questa_Cartella_di_Lavoro" inserire
Codice: Seleziona tutto
Private Sub Workbook_Open()
Sheets("1shad").Cells.ClearContents
Call Avvio
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnTime myNext, "Avvio", , False
End Sub


Infine devi inserire nel tuo file una userform1 contenente una sola "Label", che sara' usata per le segnalazioni. Il tempo minimo di persistenza del messaggio e' pari al ritardo di riesecuzione della Sub HighL, nel senso che alla prossima riesecuzione il messaggio potra' scomparire (non ci sono variazioni superiori alle soglie impostate) o si aggiornera' (se nel frattempo ci sono state variazioni).

Dopo che hai fatto tutto cio' puoi controllare il funzionamento del tutto avviando "a mano" piu' volte la Sub HighL.
Infine salvi il file, lo chiudi e lo riapri: l'esecuzione della Sub HighL avverra' periodicamente (secondo il ritardo impostato nella Sub Avvio) fino alla chiusura del file.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: pop- up

Postdi larzillo » 22/05/16 07:07

buongiorno Anthony , eccellente come al solito, due domande prima di eseguire il lavoro,
a - mi serve un valore numerico secco , non percentuale , per cui va bene se al posto di 0.1 inserisco 100 x esempio?
b - il pop .up mi segnala , che nel range si è verificato l'evento . a me serve invece che mi segnali in quale cella del range in esame si è verificato l'evento, , per esempio l'incremento di 100 si è verificata nella cella B35 del range B5-B55?
tanto per complicarti la vita...
ed inoltre il pop - up che mi si apre in un foglio diverso da quello del range posso decidere di farlo comparire in un settore specifico del foglio o non e possibile controllarlo?
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55

Re: pop- up

Postdi Anthony47 » 23/05/16 22:33

Ti ho indicato la riga in cui viene decodificata una modifica significativa (l'istruzione marcata ***) proprio perche' immaginavo che le condizioni da testare fossero varie, e devi imparare a codificartele da solo dopo che hai avuto la struttura della macro; eccezionalmente questa te la codifico ancora io:
-per lavorare con un valore assoluto di confronto, sostituisci la riga
If Abs((myCVal - Shadw.Range(myC.Address).Value) / myCVal) > 0.1 Then con
Codice: Seleziona tutto
If myCVal >= 100 and Shadw.Range(myC.Address).Value< 100 then

Il messaggio sulla form dice quali sono le celle coinvolte nel rilevamento.

Il messaggio viene visualizzato in una userform; puoi impostare la sua posizione nella window di excel usando una macro di UserForm_Activate; ad esempio inserisci sul modulo di codice della userform:
Codice: Seleziona tutto
Private Sub UserForm_Activate()
Me.Left = 100
Me.Top = 50
End Sub

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: pop- up

Postdi larzillo » 25/05/16 17:06

come al solito hai ragione ti ringrazio per la grande cortesia a risentirci
larzillo
Utente Junior
 
Post: 40
Iscritto il: 20/09/15 22:55


Torna a Applicazioni Office Windows

Chi c’è in linea

Visitano il forum: Nessuno e 21 ospiti