PDA

View Full Version : [VBA EXCEL] e Pop up


smaksy
19-11-2010, 17:51
Ciao a tutti!
Ho inserito sul mio foglio il seguente codice:

Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(5, 10) < 0 Then MsgBox ("Prova")
End Sub

Sulla cella c'è una formula e se si verifica che il valore diventa minore di 0 dovrebbe uscire un pop up con scritto Prova. Dico dovrebbe perché in realtà non esce alcun pop up, ma se manualmente metto un valore minore di zero, allora sì. Cosa sbaglio? Avete qualche suggerimento?
I suggerimenti semplici sono maggiormente graditi. :D
Giusto per precisione, la formula è derivata da una sottrazione di due valori che variano in tempo reale (dati provenienti dai mercati finanziari).
Grazie mille! Ciao!

MarcoGG
19-11-2010, 18:32
Non sbagli nulla.
Worksheet_Change() entra in gioco solo su modifica diretta dell'utente.
Per reagire alle Fx, usa Worksheet_Calculate()...
;)

smaksy
22-11-2010, 08:59
Non sbagli nulla.
Worksheet_Change() entra in gioco solo su modifica diretta dell'utente.
Per reagire alle Fx, usa Worksheet_Calculate()...
;)

Scusami (ma sono un po' ignorante in materia..), ho fatto come dici e mi esce un errore di compilazione "La dichiarazione della routine non corrisponde alla descrizione dell'evento o della routine con lo stesso nome."
Ti scrivo qui di seguito il codice integrale che ho utilizzato.
Private Sub Worksheet_Calculate (ByVal Target As Range)
If Cells(5, 10) < 0 Then MsgBox ("Occhio!")
End Sub

Grazie mille e buona giornata!
Ciao

MarcoGG
22-11-2010, 09:05
Worksheet_Calculate() non ha il Target.

Private Sub Worksheet_Calculate()

...

End Sub

;)

smaksy
22-11-2010, 09:14
Worksheet_Calculate() non ha il Target.

Private Sub Worksheet_Calculate()

...

End Sub

;)

Grazie mille davvero! :muro:

smaksy
22-11-2010, 09:58
Che tu sappia, c'è la possibilità di creare come evento la spedizione di una e-mail da Excel con il VBA?
E' complicato?
Devo usare necessariamente Outlook?

Grazie anticipatamente per l'attenzione!
Ciao

MarcoGG
22-11-2010, 10:35
Credo di avere già risposto ad una domanda del genere su questo Forum.
Prova a scartabellare... Ma penso che alla fine si arrivò alla conclusione che l'unica era appoggiarsi ad OutLook. Personalmente non ho mai inviato mail con VBA, anche a causa di questa limitazione... ;)

smaksy
22-11-2010, 11:33
Rigrazie mille! Condivido!
Ciao

smaksy
25-11-2010, 16:55
Scusa per la domanda, forse un po' "stupida", sai mica se sia normale che il pop up non compaia sopra tutte le finestre che ho aperte ma che per vederlo debba andare sul foglio xls medesimo? C'è un modo per farlo comparire su qualsiasi cosa io abbia aperto in quel momento e qualsiasi cosa stia facendo?
Grazie e buona serata!

MarcoGG
25-11-2010, 17:18
Scusa per la domanda, forse un po' "stupida", sai mica se sia normale che il pop up non compaia sopra tutte le finestre che ho aperte ma che per vederlo debba andare sul foglio xls medesimo? C'è un modo per farlo comparire su qualsiasi cosa io abbia aperto in quel momento e qualsiasi cosa stia facendo?
Grazie e buona serata!

No. Se Excel passa in secondo piano tutte le sue finestre e sotto-finestre se ne vanno via con lui...

smaksy
25-11-2010, 17:29
Grazie per la celerità della risposta!
Buona serata!
Max

zuper
25-11-2010, 19:19
devi avere il servizio Messenger attivo (non msn...proprio il servizio windows :D)

e puoi usare una cosa del genere

Sub NOTIFY_Click()
Set objShell = CreateObject("WScript.Shell")
objShell.Run "net send " & Environ("UserName") & " " & "ciao", 0
End Sub

MarcoGG
25-11-2010, 20:18
devi avere il servizio Messenger attivo (non msn...proprio il servizio windows :D)

e puoi usare una cosa del genere

Sub NOTIFY_Click()
Set objShell = CreateObject("WScript.Shell")
objShell.Run "net send " & Environ("UserName") & " " & "ciao", 0
End Sub

Uh. :D
Ma che roba è ?!

zuper
25-11-2010, 20:19
Uh. :D
Ma che roba è ?!

che ne so :) scopiazzato da internet...
ti manda un netsend alla vecchia maniera :D

MarcoGG
25-11-2010, 20:25
che ne so :) scopiazzato da internet...
ti manda un netsend alla vecchia maniera :D

Cioè, spiegami, è una risposta su come mandare un popup da Excel mentre è in secondo piano ?
Quindi fai mandare da Excel una MsgBox passando per net send ?
No, ma sul serio, non è una critica. Se funziona è davvero geniale. :D
:hic: :idea:

zuper
25-11-2010, 20:32
Cioè, spiegami, è una risposta su come mandare un popup da Excel mentre è in secondo piano ?
Quindi fai mandare da Excel una MsgBox passando per net send ?
No, ma sul serio, non è una critica. Se funziona è davvero geniale. :D
:hic: :idea:

esatto :)
il netsend ti compare sopra a qualsiasi cosaanche se hai excel iconizzato sotto...questo ti compare e ti rimane davanti finchè nn ci clicchi sopra :)

MarcoGG
25-11-2010, 20:35
esatto :)
il netsend ti compare sopra a qualsiasi cosaanche se hai excel iconizzato sotto...questo ti compare e ti rimane davanti finchè nn ci clicchi sopra :)

Bisognerebbe provarlo in una procedura OnTime(), sennò come faccio ad interagire con il WorkBook se non è accessibile ?
Cmq lo provo appena posso... ;)

zuper
25-11-2010, 20:47
Bisognerebbe provarlo in una procedura OnTime(), sennò come faccio ad interagire con il WorkBook se non è accessibile ?
Cmq lo provo appena posso... ;)

Sub NOTIFY_Click()
Set objShell = CreateObject("WScript.Shell")

For Count = 1 To 20000
If Count = 20000 Then
objShell.Run "net send " & Environ("UserName") & " " & "miii sono a " & Count , 0
Else
Range("a1").Value = Count
End If
Next Count

End Sub


ho fatto una piccola modifica :)
lancia il tutto e poi iconizza :D

MarcoGG
25-11-2010, 21:13
Sarà dura "iconizzare" con quel contatore a palla... :p

Dim objShell As Object
Set objShell = CreateObject("WScript.Shell")
Application.WindowState = xlMinimized

Application.Wait DateAdd("s", 2, Now)
objShell.Run "net send " & Environ("UserName") & " " & "MESSAGGIO", 0

:D ;)

zuper
25-11-2010, 21:19
Sarà dura "iconizzare" con quel contatore a palla... :p

Dim objShell As Object
Set objShell = CreateObject("WScript.Shell")
Application.WindowState = xlMinimized

Application.Wait DateAdd("s", 2, Now)
objShell.Run "net send " & Environ("UserName") & " " & "MESSAGGIO", 0

:D ;)

schiaccia su show desktop e vedi che va tutto giù :)

http://img.brothersoft.com/icon/softimage/s/show_desktop_alternative-192633.jpeg

MarcoGG
25-11-2010, 21:26
schiaccia su show desktop e vedi che va tutto giù :)

http://img.brothersoft.com/icon/softimage/s/show_desktop_alternative-192633.jpeg

Si ? E se uno non c'ha lo "Show Desktop", perchè non visualizza la barra dell'Avvio Veloce ?
Eh eh, a quanto sono pignolo... :cool: :D

E comunque simulare la Sleep() con un contatore cella, dai...

Oltre ad Application.Wait(), si può avere la Sleep anche in VBA con :

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

;)

zuper
25-11-2010, 21:31
Si ? E se uno non c'ha lo "Show Desktop", perchè non visualizza la barra dell'Avvio Veloce ?
Eh eh, a quanto sono pignolo... :cool: :D

E comunque simulare la Sleep() con un contatore cella, dai...

Oltre ad Application.Wait(), si può avere la Sleep anche in VBA con :

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

;)

se nn c'hai la barra avvio veloce....sei LENTO :D:D

schiaccia WIN+D e vedi che va tutto giù :D

se nn hai il tastino windows azzi tuoi :D

se nn hai il tastino D...hai qualche problema :D

MarcoGG
25-11-2010, 21:35
se nn c'hai la barra avvio veloce....sei LENTO :D:D

schiaccia WIN+D e vedi che va tutto giù :D

se nn hai il tastino windows azzi tuoi :D

se nn hai il tastino D...hai qualche problema :D

Ma lo sai quanti utonti ci sono là fuori ?
E se io non so che Win+D mi fa vedere il DeskTop ?

Lo vedi, io non vorrei mai essere cliente di uno che tratta così la gente... :cool:

zuper
25-11-2010, 21:38
Ma lo sai quanti utonti ci sono là fuori ?
E se io non so che Win+D mi fa vedere il DeskTop ?

Lo vedi, io non vorrei mai essere cliente di uno che tratta così la gente... :cool:

io lo so che nn sei utonto :D

io so i clienti con cui tratto :D

se eri utonto ti scrivevo questo

Sub NOTIFY_Click()
Set objShell = CreateObject("WScript.Shell")

CreateObject("Shell.Application").MinimizeAll

For Count = 1 To 20000
If Count = 20000 Then
objShell.Run "net send " & Environ("UserName") & " " & "miii sono a " & Count, 0
Else
Range("a1").Value = Count
End If
Next Count

End Sub

:D

MarcoGG
25-11-2010, 21:45
Non so, continuo a preferire la mia soluzione con Wait(), ma lo spunto è davvero originale, te ne do atto. :)

zuper
25-11-2010, 21:51
Non so, continuo a preferire la mia soluzione con Wait(), ma lo spunto è davvero originale, te ne do atto. :)

beh il bello è confrontarsi :D

tanto lo so che da te c'è sempre da imparare ;)

MarcoGG
25-11-2010, 22:06
beh il bello è confrontarsi :D

tanto lo so che da te c'è sempre da imparare ;)

Assolutamente d'accordo - sul fatto che da me ci sia sempre da imparare - ovviamente... :D :p :D

Comunque quella del net send e del tasto Win+D ancora non la sapevo.
Dico sul serio. Una vita che uso Windows e mai fatto Win+D !
Domani passerò le prime ore della giornata solo a fare Win+D. :fagiano:
Che tristezza... :(

No, è che mi mancano pochi post a quota 3000... :cincin: :rotfl: