Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

è possibile chiudere automaticamente un msgbox?

2,025 views
Skip to first unread message

Triton

unread,
Jul 22, 2005, 12:10:03 PM7/22/05
to
Se faccio apparire un msgbox ad una certa condizione, posso poi anche farlo
sparire senza che l'user debbla cliccare su OK?

Come posso fare per indicare sul foglio la condizione di salto routine di
calcolo? Sò che ci sono delle scritte che possono apparire, io vorrei una
scritta chiara che rimanesse ben visibile pur non intralciando le perazioni
di inserimento dati da parte dell'utente.
Grazie
--
Triton

eliano

unread,
Jul 23, 2005, 4:12:03 AM7/23/05
to

"Triton" ha scritto:

Ciao Tritone.
Per quanto riguarda il Msgbox credo che la risposta sia NO; tra l'altro, se
ritieni che la situazione giustifichi l'emissione di un messaggio che
dovrebbe attirare l'attenzione dell'utente, il clic di risposta dovrebbe
significare che il messaggio è stato visto, letto, compreso ed ha dato
origine ad una reazione logica.

Per il secondo quesito ti consiglio di aprire un altro thread, chiarendo
meglio di cosa si tratta, in particolare cosa significa *salto della routine
di calcolo*, in che situazione si dovrebbe verificare, il perchè si verifica
e non ultimo, quanti centimetri deve saltare quella routine.:-)))

Buona domenica Tritone
Eliano

Maurizio Borrelli

unread,
Jul 23, 2005, 4:14:20 AM7/23/05
to
"Triton" ha scritto nel messaggio
news:A92ED84B-CB65-433A...@microsoft.com...

Ciao, Triton.

Potresti usare uno UserForm. Per esempio cosi':

' modMacro Modulo
'
Option Base 0
Option Compare Binary
Option Explicit

Public Sub MyMsgBox_test()
Dim blnTest As Boolean
Dim frm As frmMyMsgBox

blnTest = True
If (blnTest) Then
Set frm = New frmMyMsgBox
With frm
.Caption = "Finestra messaggio"
.lblPrompt.Caption = "Test."
.Show vbModeless
End With
Else
' No MsgBox
End If

Set frm = Nothing
End Sub

' frmMyMsgBox UserForm
'
Option Base 0
Option Compare Binary
Option Explicit

Private p_lblPrompt As MSForms.Label

Public Property Get lblPrompt( _
) As MSForms.Label
Set lblPrompt = p_lblPrompt
End Property

Private Sub UserForm_Initialize()
Const c_sngOffset As Single = 20

Dim ctlPrompt As MSForms.Control

Set p_lblPrompt = Me.Controls.Add("Forms.Label.1" _
, "p_lblPrompt" _
, True)
Set ctlPrompt = Me.lblPrompt
With Me
ctlPrompt.Move c_sngOffset _
, c_sngOffset _
, .InsideWidth - (c_sngOffset * 2) _
, .InsideHeight - c_sngOffset
With .lblPrompt
.TextAlign = fmTextAlignCenter
'.BorderStyle = fmBorderStyleSingle
End With
End With
Set ctlPrompt = Nothing
End Sub

Private Sub UserForm_Terminate()
Set p_lblPrompt = Nothing
End Sub

--
(Facci sapere se ed eventualmente come hai risolto. Grazie.)

Ciao :o)
Maurizio Borrelli, Microsoft Office Access MVP
--------
?SPQR(C)
X
--------


KL

unread,
Jul 23, 2005, 4:26:55 AM7/23/05
to
Ciao Tritone

Potresti usare questo link: http://tinyurl.com/apqzd

KL


"Triton" <Tri...@discussions.microsoft.com> wrote in message
news:A92ED84B-CB65-433A...@microsoft.com...


> Se faccio apparire un msgbox ad una certa condizione, posso poi anche
> farlo
> sparire senza che l'user debbla cliccare su OK?
>
> Come posso fare per indicare sul foglio la condizione di salto routine di

> calcolo? So che ci sono delle scritte che possono apparire, io vorrei una

eliano

unread,
Jul 23, 2005, 5:29:02 AM7/23/05
to

"Maurizio Borrelli" ha scritto:

> Potresti usare uno UserForm. Per esempio cosi':

Grazie Maurizio.
Saluti
Eliano

eliano

unread,
Jul 23, 2005, 5:31:03 AM7/23/05
to

"KL" ha scritto:

> Potresti usare questo link: http://tinyurl.com/apqzd

Grazie KL, ma resto della mia opinione, ovviamente valida SOLO per me; se
MSG deve essere significa che voglio una risposta.
Saluti
Eliano

KL

unread,
Jul 23, 2005, 1:07:30 PM7/23/05
to
eliano,

Respeto tu opinon, pero... Creo que esto no es necesariamente cierto, hay
casos que pides una respuesta pero si el usuario tarda en contestar te puede
interesar cerrar el archvo, cosa que no puedes hacer si un verdadero msgbox
esta abierto.
------------------
Rispetto la tua opinione, ma... Credo che questo non sia necessariamente
certo, ci sono casi che si voglia una risposta ma se l'utente non risponde,
puo avere bisogno di chiudere il archivo, cosa che non si puo fare se un
msgbox reale e aperto.

Scusi il mio italiano :-)

Ciao,
KL

"eliano" <eli...@discussions.microsoft.com> wrote in message
news:6C8ED17E-E05C-4321...@microsoft.com...

Triton

unread,
Jul 25, 2005, 4:23:03 AM7/25/05
to
Aaapperinzoli Maurizio! Ma come faccio ad usare una cosa che è così lontana
dalla mia comprensione?
Io sono poco + di un utente di excel e queste funzioni evolute mi spaventano
un tantino! Ti ringrazio per il suggerimento ma probabilmente il mio problema
devo risolverlo con la realizzazione di un messaggio colorato (una scritta di
testo in una cella in mezzo al foglio). Potresti mandarmi 2 righe di esempio
su come creare questa scritta?
Grazie
--
Triton


"Maurizio Borrelli" ha scritto:

Maurizio Borrelli

unread,
Jul 25, 2005, 4:46:02 AM7/25/05
to
"Triton" ha scritto nel messaggio
news:67CF90B6-8C04-4846...@microsoft.com...

> "Maurizio Borrelli" ha scritto:
>> "Triton" ha scritto nel messaggio
>> news:A92ED84B-CB65-433A...@microsoft.com...

1)

> Aaapperinzoli Maurizio! Ma come faccio ad usare una cosa che č cosě
> lontana dalla mia comprensione?

2)

> Io sono poco + di un utente di excel e queste funzioni evolute mi
> spaventano un tantino! Ti ringrazio per il suggerimento ma probabilmente
> il mio problema devo risolverlo con la realizzazione di un messaggio
> colorato (una scritta di testo in una cella in mezzo al foglio). Potresti
> mandarmi 2 righe di esempio su come creare questa scritta?

Ciao, Triton.

1) Fai come tutti: studi. ;-)

Se non hai tempo, voglia, capacita', disponibilita' o che so io, fa'
domande circostanziate e vedrai che quello che adesso ti spaventa :-) ti
sembrera' meno terribile.

2) Dunque il tuo problema non e' piu':

Fare "apparire un msgbox ad una certa condizione" da
fare poi "sparire senza che l'user debbla cliccare su OK"?

E questo:

"Come posso fare per indicare sul foglio la condizione di
salto routine di calcolo?"

non ti serve piu'?

Scrivi poi "il mio problema devo risolverlo...", ma qual e' questo
tuo problema? Se ce lo illustri (dettagliatamente, anche con parole tue)
forse ti si puo' aiutare piu' efficacemente.

"In mezzo al foglio" cosa vuol dire? Proprio *in mezzo*? E "foglio"
cos'e'? La finestra visibile? Tutto il Foglio di lavoro di 256 per 65.536
celle? Il foglio su cui stampi?

Aiutaci ad aiutarti.

Mauro Gamberini

unread,
Jul 25, 2005, 4:49:48 AM7/25/05
to
> Aaapperinzoli Maurizio! Ma come faccio ad usare una cosa che è così
lontana
> dalla mia comprensione?
> Io sono poco + di un utente di excel e queste funzioni evolute mi
spaventano
> un tantino!
>

Tieni presente che questo ng *non* dovrebbe essere
un corso di vba e neppure un help desk.

Una traccia...
Mettici un po' di tuo e guarda nella guida che cosa
è una UserForm.

' modMacro Modulo
'
[cut]
Metti il codice in un Modulo di codice.

' frmMyMsgBox UserForm
'
[cut]
Creati una UserForm(in vba: Inserisci-->UserForm)
e metti il codice nel suo modulo di codice.
Rinomina la UserForm così:
frmMyMsgBox

Per chiamare la UserForm, questo il codice da inserire
nella routine(macro o funzione) chiamante:

MyMsgBox_test

Adesso però rispondi a questa domanda:
hai la tua MsgBox che avvisa del salto di calcolo;
come chiudiamo la finestra? A tempo? Se l'utente
fa click sul Foglio? E se a tempo, dopo quanto tempo?
E se l'utente era distratto e non ha visto?
Se metto un avviso, credo(per una volta!!! 8-)) abbia
ragione Eliano, voglio essere sicuro che l'avviso
è stato visto....


--
----------------------------
Mauro Gamberini


Triton

unread,
Jul 25, 2005, 5:01:01 AM7/25/05
to
Grazie Eliano, ma come dicevo a Maurizio il mio problema vorrei risolverlo
con una soluzione da me più "gestibile" (il suo user form mi risulta ostico).
Stavo pensando ad un messaggio di testo colorato che appaia o scompaia
condizionato dal fatto che io esegua o meno una parte di codice (vorrei
inserirlo all'interno di una routine).

Ho anche un altro problemino, non riesco a capire esattamente la seguente
riga di codice:
a$ = "19:" & Right$(Str$(52 - Nopassi), 2)

se la variabile Nopassi ha valore 10 a$=?

grazie
--
Triton


"eliano" ha scritto:

Triton

unread,
Jul 25, 2005, 5:18:02 AM7/25/05
to


> Adesso però rispondi a questa domanda:
> hai la tua MsgBox che avvisa del salto di calcolo;
> come chiudiamo la finestra? A tempo? Se l'utente
> fa click sul Foglio? E se a tempo, dopo quanto tempo?
> E se l'utente era distratto e non ha visto?
> Se metto un avviso, credo(per una volta!!! 8-)) abbia
> ragione Eliano, voglio essere sicuro che l'avviso
> è stato visto....
>
>
> --
> ----------------------------
> Mauro Gamberini
>
>
Buongiorno Mauro!
Allora, non penso più di usare un msgbox, troppo pesante da gestire per
quello che serve a me. io volevo solo avvisare l'utente quando una sub in VBA
viene saltata e quindi alcuni dati sul foglio non sono corretti. Appena poi
l'utente inserisce i dati giusti e la Sub torna ad essere eseguita, il
messaggio deve sparire.

Grazie per la spiegazione riguardo la user form. Ho capito cos'è ma al
momento la vedo complicata da gestire. Prometto che appena avrò un attimo
farò qualche prova con le user forms.

Non ho ben capito la tua frase:


"Tieni presente che questo ng *non* dovrebbe essere
un corso di vba e neppure un help desk."

Definisci ng

A me sembra ("sembra") cmq che almeno alcuni dei miei quesiti possano esser
tornati utili ad altri utenti.
Mi scuso se ho arrecato disturbo a qualcuno.

Grazie

Mauro Gamberini

unread,
Jul 25, 2005, 5:37:00 AM7/25/05
to
> Allora, non penso più di usare un msgbox, troppo pesante da gestire per
> quello che serve a me. io volevo solo avvisare l'utente quando una sub in
VBA
> viene saltata e quindi alcuni dati sul foglio non sono corretti. Appena
poi
> l'utente inserisce i dati giusti e la Sub torna ad essere eseguita, il
> messaggio deve sparire.
>
[cut]

Potresti colorare una cella.

E questo nella routine che *chiama*
quella che *non* deve
essere saltata:

With Foglio1.Range("A1").Interior
.ColorIndex = 3
End With

Questo nella routine
che *non* deve essere saltata:

With Foglio1.Range("A1").Interior
.ColorIndex = xlNone
End With


Cosa succede?
Bè, la routine chiamante la seconda, colora di rosso
la cella. Se la seconda routine non viene eseguita,
la cella rimane rossa, altrimenti torna trasparente.

> Non ho ben capito la tua frase:
> "Tieni presente che questo ng *non* dovrebbe essere
> un corso di vba e neppure un help desk."
>

Quello che ho scritto.

--
----------------------------
Mauro Gamberini


Triton

unread,
Jul 25, 2005, 5:36:02 AM7/25/05
to

--
Triton


"Maurizio Borrelli" ha scritto:

> "Triton" ha scritto nel messaggio
> news:67CF90B6-8C04-4846...@microsoft.com...
> > "Maurizio Borrelli" ha scritto:
> >> "Triton" ha scritto nel messaggio
> >> news:A92ED84B-CB65-433A...@microsoft.com...
>
> 1)
>

> > Aaapperinzoli Maurizio! Ma come faccio ad usare una cosa che è così

Hai ragione Maurizio, dovrei studiare di più!
Cmq il mio messaggio dovrebbe indicare all'utente quanto una sub viene
saltata in modo che sia chiaro che i dati nel foglio in quel momento non sono
aggiornati. Forse pensando ad un msgbox stavo andando a caccia di mosche con
un cannone!

Per "in mezzo al foglio" intendo dire nell'area visibile (potrei anche
collocare la scritta in corrispondenza di una certa cella, dato che quando la
sub viene saltata sicuramente l'utente stà inserendo i dati iniziali)

Di fronte alla vostra infinita saccenza mi sento piccolo-piccolo (anche se
non son più un giovanotto:-( ), vi sono grato per il tempo che perdete a
darmi retta.
Se continuerò ad aver necessità di sviluppare fogli in Excel forse un giorno
diverrò bravo come voi:-)!

Un ultima richiesta per un consiglio: dove posso trovare la lista di tutti i
termini usati in VBA con la relativa spiegazione (per esempio "right$" o
Str$) ?

Triton

unread,
Jul 25, 2005, 6:38:03 AM7/25/05
to


"Mauro Gamberini" ha scritto:

Ma un messaggio con altezza carattere maggiorata e di colore rosso che dica
"ricalcolo celle G20:L20 bloccato" e che appaia nello spazio delle celle
F13:I13 quando la mia sub:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range("A1:N13")

If Not Intersect(Target, rng) Is Nothing Then

Pippo

End If

Set rng = Nothing

End Sub

non richiama la sub Pippo, come potrei farlo?

Mauro Gamberini

unread,
Jul 25, 2005, 8:01:55 AM7/25/05
to
> Ma un messaggio con altezza carattere maggiorata e di colore rosso che
dica
> "ricalcolo celle G20:L20 bloccato" e che appaia nello spazio delle celle
> F13:I13 quando la mia sub:
>
[cut]

Unendo le celle e scrivendoci dentro il messaggio...
ma, qui alcuni *non amano* il Merge(unione) delle celle...
comunque...:

Public Sub mTestoIn()

Range("F13:I13").Merge

With Range("F13")
.Value = "Quello che vuoi tu"
.Font.Bold = True
.Font.Size = 20
End With

End Sub

Public Sub mTestoOut()

Range("F13:I13").MergeCells = False

With Range("F13")
.Value = ""
.Font.Bold = False
.Font.Size = 10
End With

End Sub


Uffa, ma cosa c'è che non va in una semplice MessageBox?

--
----------------------------
Mauro Gamberini


Mauro Gamberini

unread,
Jul 25, 2005, 8:08:23 AM7/25/05
to
> > Ma un messaggio con altezza carattere maggiorata e di colore rosso che
>

Ah, ho dimenticato il *rosso*...:

Public Sub mTestoIn()

Range("F13:I13").Merge

With Range("F13")
.Value = "Quello che vuoi tu"
.Font.Bold = True
.Font.Size = 20

.Font.ColorIndex = 3
End With

End Sub

Public Sub mTestoOut()

Range("F13:I13").MergeCells = False

With Range("F13")
.Value = ""
.Font.Bold = False
.Font.Size = 10

.Font.ColorIndex = 0
End With

End Sub

--
----------------------------
Mauro Gamberini


Triton

unread,
Jul 25, 2005, 8:21:02 AM7/25/05
to
Grazie Mauro, la provo subito!
La msgbox non permette all'utente di proseguire con l'inserimento dei dati
finchè non clicca su ok! Io devo avvisare, non intralciare l'utente.

Potresti cortesemente tradurmi la seguente espressione che serve per
calcolare delle righe da nascondere (non ne comprendo i dettagli)?

Nopassi = Sheets("Calcolo").Cells(7, 7).Value
Sheets("Calcolo").Unprotect Password:=""


a$ = "19:" & Right$(Str$(52 - Nopassi), 2)

b$ = Right$(Str$(52 - Nopassi), 2) & ":51"
If Nopassi <> 33 Then
Sheets("Calcolo").Rows(a$).Hidden = True
Sheets("Calcolo").Rows(b$).Hidden = False
Sheets("calcolo").Protect Password:=""

Non capisco "a$ = "19:" & Right$(Str$(52 - Nopassi), 2)"
A te sembrerà banale ma...

Grazie

Triton

Mauro Gamberini

unread,
Jul 25, 2005, 8:58:29 AM7/25/05
to
> Potresti cortesemente tradurmi la seguente espressione che serve per
> calcolare delle righe da nascondere (non ne comprendo i dettagli)?
>

>


> Non capisco "a$ = "19:" & Right$(Str$(52 - Nopassi), 2)"
> A te sembrerà banale ma...
>

> Nopassi = Sheets("Calcolo").Cells(7, 7).Value
>
Recupera il valore della cella G7 del foglio Calcolo

> Sheets("Calcolo").Unprotect Password:=""
>

Toglie la protezione al foglio Calcolo

> a$ = "19:" & Right$(Str$(52 - Nopassi), 2)
>

Forse a non è stata dichiarata o lo è stata come Variant.
Adesso la si vuole String e uguale a:
19 concatenato ai primi due numeri
partendo da dx del valore che esce dalla sottrazione
52 meno il valore di G7(Nopassi). Per me *sarebbe*
stata sufficente una cosa tipo:
Dim a As String
a = "19" & CStr(Right((52 - Nopassi), 2))
o
a = "19" & Right((52 - Nopassi), 2)

Mettiamo che Nopassi valga 100.
Il valore di a sarà: 1948(dove 48 è
dato da 52-100 = -48. Prendendo le prime
due a partire da dx, elimino il -)

> b$ = Right$(Str$(52 - Nopassi), 2) & ":51"
>

Forse b non è stata dichiarata o lo è stata come Variant.
Vedi sopra, solo che qui alla fine si concatena ":51"

> If Nopassi <> 33 Then
>
Se la variabile Nopassi è diversa da 33

> Sheets("Calcolo").Rows(a$).Hidden = True
>

Nascondi(Hidden=True) la riga(Rows) che corrisponde a a.
Le righe hanno un numero che le identifica, da 1 a 65536.

> Sheets("Calcolo").Rows(b$).Hidden = False
>

Questo, invece, ti mostra la riga che corrisponde a b

> Sheets("calcolo").Protect Password:=""
>

Rimette la password al foglio.


--
----------------------------
Mauro Gamberini


Triton

unread,
Jul 25, 2005, 9:50:05 AM7/25/05
to

"Mauro Gamberini" ha scritto:

Il messaggio FUNZIONA! Grazie.
A me sembrerebbe che la a$ utilizzata come stringa prenda un valore tipo
19:xx dove xx è, come giustamente mi spiegavi tu, il risultato della
sottrazione considerando le ultime due cifre solamente. Alla fine mi ritrovo
in a$ un valore tipo "19:11" che mi identifica il range delle celle che vado
a nascondere con row...hidden. Grazie mille per la traduzione!!!
Per oggi devo staccare con excel. Domani mi ci rimetto che devo aggiungere
altre cosine al mio foglio.
Grazie ancora
--
Triton


eliano

unread,
Jul 26, 2005, 5:26:08 AM7/26/05
to

"KL" ha scritto:

> eliano,
>
> Respeto tu opinon, pero... Creo que esto no es necesariamente cierto, hay
> casos que pides una respuesta pero si el usuario tarda en contestar te puede
> interesar cerrar el archvo, cosa que no puedes hacer si un verdadero msgbox
> esta abierto.
> ------------------
> Rispetto la tua opinione, ma... Credo che questo non sia necessariamente
> certo, ci sono casi che si voglia una risposta ma se l'utente non risponde,
> puo avere bisogno di chiudere il archivo, cosa che non si puo fare se un
> msgbox reale e aperto.
>
> Scusi il mio italiano :-)
>
> Ciao,
> KL

Hermano KL, scusa per il ritardo ma la domenica non tocco il computer e
lunedì 25 Luglio è stata la festa del nostro Patrono Sant'Jacopo.
Tutte le opinioni sono da rispettare, comunque nel caso proposto l'unico
pulsante agibile era *OK*.
Cordialidad Y arriba Espana.
Eliano
P.S.
Il tuo italiano è sicuramente migliore del mio spagnolo.

KL

unread,
Jul 26, 2005, 4:48:30 PM7/26/05
to

"eliano" wrote in message
> Cordialidad Y arriba Espana.
>...
> Il tuo italiano e sicuramente migliore del mio spagnolo.

:-)))


0 new messages