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

MsgBox di avviso se cella vuota

406 views
Skip to first unread message

Antonio

unread,
Aug 26, 2007, 1:18:00 PM8/26/07
to
Traendo spunto da una macro di Mauro Gamberini (ciao) postata qualche anno fà
http://www.microsoft.com/office/community/it-it/default.mspx?dg=microsoft.public.it.office.excel&mid=49bf6d82-949a-494f-ac98-fa06408d4573
) ho inserito un CommandButton che mi lancia la macro in base al nome posto
nella cella G15, capita che se detta cella è vuota e per sbaglio premo il
pulsante ho il solito errore di run-time '1004', come posso evitare ed
eventualmente aggiungere un MsgBox di avviso che nella cella và inserito un
valore?

Grazie a tutti e un saluto

Ciao
Antonio

pippo

unread,
Aug 26, 2007, 2:33:13 PM8/26/07
to

"Antonio" <Ant...@discussions.microsoft.com> ha scritto nel messaggio
news:681B4732-358B-4E16...@microsoft.com...

Prova con il seguente codice, cambiando le righe indicate, con i tuoi
riferimenti:

'================================================

Private Sub CommandButton1_Click()

Dim s As String
Dim sCella As String
Dim sWks As String

sCella = "G5" '<== da cambiare
sWks = "Foglio1" '<== da cambiare

On Error GoTo XIT

'Inzio tuo codice

s = Worksheets(sWks).Range(sCella).Value

Application.Run s '<== da cambiare

'Fine tuo codice


Exit Sub


XIT:

MsgBox "Devi inserire un nome nella cella " & sCella _
& "," & " oppure controlla che il nome della macro sia corretto."


End Sub

'=====================================================


Se invii il tuo codice, posso essere piu' preciso... :-)

Ciao
Pippo


pippo

unread,
Aug 26, 2007, 2:41:40 PM8/26/07
to

"pippo" <nospam@nospam> ha scritto nel messaggio
news:46d1c77f$0$4787$4faf...@reader4.news.tin.it...

ops..la riga * Application.Run s * non e' da cambiare!!

Ciao
Pippo

Antonio

unread,
Aug 26, 2007, 2:58:01 PM8/26/07
to

"pippo" ha scritto:

> Prova con il seguente codice, cambiando le righe indicate, con i tuoi
> riferimenti:
>
> '================================================
>
> Private Sub CommandButton1_Click()
>
> Dim s As String
> Dim sCella As String
> Dim sWks As String
>
> sCella = "G5" '<== da cambiare
> sWks = "Foglio1" '<== da cambiare
>
> On Error GoTo XIT
>
> 'Inzio tuo codice
>
> s = Worksheets(sWks).Range(sCella).Value
>
> Application.Run s '<== da cambiare
>
> 'Fine tuo codice
>
>
> Exit Sub
>
>
> XIT:
>
> MsgBox "Devi inserire un nome nella cella " & sCella _
> & "," & " oppure controlla che il nome della macro sia corretto."
>
>
> End Sub
>
> '=====================================================
>
>
> Se invii il tuo codice, posso essere piu' preciso... :-)
>
> Ciao
> Pippo
>

Grazie Pippo dell'aiuto il codice è il seguente, ora provo ad adattare la tua

Ciao
Antonio

Antonio

unread,
Aug 26, 2007, 3:00:02 PM8/26/07
to
Scusa mi è partito il colpo ecco il codice

Private Sub CommandButton1_Click()
Dim s As String

s = Worksheets("COLORS").Range("G15").Value
Application.Run s

ActiveSheet.Unprotect
Range("V24:AD34").Select
Selection.Copy
Range("V12:AD12").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("M18:T18").Select
Application.CutCopyMode = False
Range("G14").Select
Selection.ClearContents
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub

Ciao
Antonio

Antonio

unread,
Aug 26, 2007, 3:06:01 PM8/26/07
to

Ho così adattato e pare che funge

Private Sub CommandButton2_Click()

Dim s As String
Dim sCella As String
Dim sWks As String

sCella = "G15" '<== da cambiare
sWks = "COLORS" '<== da cambiare

On Error GoTo XIT

s = Worksheets(sWks).Range(sCella).Value

Application.Run s


ActiveSheet.Unprotect
Range("V24:AD34").Select
Selection.Copy
Range("V12:AD12").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("M18:T18").Select
Application.CutCopyMode = False
Range("G14").Select
Selection.ClearContents
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True

Exit Sub

XIT:
MsgBox "Devi inserire un nome nella cella " & sCella _
& "," & " oppure controlla che il nome della macro sia corretto."

End Sub

Grazie dell'aiuto Pippo

Ciao
Antonio

Poeta

unread,
Aug 26, 2007, 3:35:25 PM8/26/07
to

"pippo" <nospam@nospam> ha scritto nel messaggio
news:46d1c979$0$4793$4faf...@reader4.news.tin.it...
------------------------------

Ciao Antonio,
oltre alla soluzione del mio omonimo (ciao Pippo), prova
anche questa che uso da un paio di anni.

Se automaticamente in apertura, in ThisWorkbook :
Private Sub Workbook_Open()
Dim NomeMacro As String
NomeMacro = Worksheets("DATI").Range("B4").Value
If NomeMacro > "" Then
Application.Run NomeMacro
Else
End If
End Sub

in un modulo :
Sub A()
Range("G4").Select
ActiveCell.FormulaR1C1 = "Questa è una prova"
End Sub

Se invece da un CommandButton, nel codice foglio DATI :
Private Sub CommandButton1_Click()
Dim NomeMacro As String
NomeMacro = Worksheets("DATI").Range("B4").Value
If NomeMacro > "" Then
Application.Run NomeMacro
Else
MsgBox "Att.ne la cella B4 è vuota!"
End If
End Sub


Ciao, fai sapere.

Pippo Coco


Antonio

unread,
Aug 26, 2007, 4:20:01 PM8/26/07
to

"Poeta" ha scritto:

Grazie Poeta (Pippo Coco) ho testato anche la tua e va bene, ... Tropa
grazia Sant'A... mio protettore :-) , buona serata.

Ciao
Antonio

eliano

unread,
Aug 26, 2007, 8:24:00 PM8/26/07
to

"Antonio" ha scritto:

Ciao Antonio.
Cerca sulla guida in linea: proprietà error e verifica se non sia il caso di
inserire nella macro una istruzione del tipo:

on error goto gesterr ' gestione errori, ce ne potrebbero essere altri da
gestire

quindi, inserisci un tag di arrivo e dal momento che ogni errore dovrebbe
essere identificato da un numero, nel tuo caso 1004, fagli fare quello che
vuoi:

exit sub
gesterr:
if err.number = 1004 then
'quello che vuoi
end if
end sub

eliano

Antonio

unread,
Aug 27, 2007, 6:16:02 AM8/27/07
to

"eliano" ha scritto:

>
>
> "Antonio" ha scritto:


> Ciao Antonio.
> Cerca sulla guida in linea: proprietà error e verifica se non sia il caso di
> inserire nella macro una istruzione del tipo:
>
> on error goto gesterr ' gestione errori, ce ne potrebbero essere altri da
> gestire
>
> quindi, inserisci un tag di arrivo e dal momento che ogni errore dovrebbe
> essere identificato da un numero, nel tuo caso 1004, fagli fare quello che
> vuoi:
>
> exit sub
> gesterr:
> if err.number = 1004 then
> 'quello che vuoi
> end if
> end sub
>
> eliano

Ciao eliano e scusama ma io di VB oltre registrare macro e adattare qualche
riga già scritta, non vado, difatti con i suggerimenti di Pippo ho così
adattato

Private Sub CommandButton2_Click()

Dim s As String
Dim sCella As String
Dim sWks As String

sCella = "G15" '<== da cambiare
sWks = "COLORS" '<== da cambiare

On Error GoTo XIT

s = Worksheets(sWks).Range(sCella).Value

Application.Run s


ActiveSheet.Unprotect
Range("V24:AD34").Select
Selection.Copy
Range("V12:AD12").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("M18:T18").Select
Application.CutCopyMode = False
Range("G14").Select
Selection.ClearContents
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True

Exit Sub

XIT:
MsgBox "Devi inserire un nome nella cella " & sCella _
& "," & " oppure controlla che il nome della macro sia corretto."

End Sub

pensi che non vada bene e che possa darmi altri errori? In pratica io (o
utente) inserisco in cella G15 un nome da elenco convalida per cui altro
valore non è accettato, e poi premo il CommandButton a cui è associato il
codice per avviare macro, ma può capitare che erroneamente venga premuto il
pulsante e quindi si verifica il problema dell'errore '1004'. Grazie e un
saluto.

Ciao
Antonio

pippo

unread,
Aug 27, 2007, 1:52:35 PM8/27/07
to
"Antonio" <Ant...@discussions.microsoft.com> ha scritto nel messaggio
news:CEE7F8DC-61F2-4175...@microsoft.com...


Eliano ti vuol dire che, gli "ERRORI" (di varie tipologie) da gestire in una
procedura, *possono* essere molti, e, bisogna far in modo,
da dare all'utente, l'opportuno messaggio, in base al *tipo* di errore che
si verifica.

Un semplice esempio:

nel caso particolare della tua macro, prova ad es. a cambiare il nome
(lasciando inalterato quello reale sulla linguetta) del foglio su cui agisce
la macro, assegnando un nome di foglio *non* esistente:

sWks = "COLOR" '<== da "COLORS" a "CLOR" (nome foglio *non* esistente)

Il codice genera un errore, non trovando il foglio "CLOR":

in tal caso saltera' *lo stesso* all'etichetta "XIT:", facendo attivare
l'istruzione

MsgBox "Devi inserire un nome nella cella " & sCella _
& "," & " oppure controlla che il nome della macro sia corretto."

Il msg che pero' ottieni, non e' certo relativo *all'effettivo* problema che
si e' verificato:
utilizzo di un "nome" foglio *inesistente*.!!!

Spero di non averti confuso ulteriormente le idee.. ;-)... cmq anche se non
ti e' tutto chiaro, approfondendo lo studio del vba, ti accorgerai
che, alcuni concetti, non sono poi molto difficili da capire.......

Fammi sapere! ;-)


PS: anche io sono agli inizi!!

Ciao
Pippo

pippo

unread,
Aug 27, 2007, 4:02:18 PM8/27/07
to

"pippo" <nospam@nospam> ha scritto nel messaggio
news:46d30f68$0$17946$4faf...@reader1.news.tin.it...

> "Antonio" <Ant...@discussions.microsoft.com> ha scritto nel messaggio
> news:CEE7F8DC-61F2-4175...@microsoft.com...

[cut]

Un esempio di una miglior (forse.. ;-)..) gestione degli errori, *potrebbe*
essere la seguente macro.

A tal proposito, chiedo l'aiuto di *Maurizio Borrelli* (& Company), in
quanto ho preso spunto da alcune sue istruzioni .......

Maurizio ci sei ??? ;-))


La gestione degli errori controlla:

1) Nome esistente per il foglio di lavoro;

2) Indirizzo corretto della cella (es. "AAA333" e' un indirizzo non valido);

3) Verifica se il nome della macro inserito nella cella esiste (controllo
previsto, ma non necessario, in quanto hai inserito nella cella una
"convalida");

4) Verifica se nella cella *non* e' stato inserito alcun nome ( la gestione
principale che hai richiesto).


'=====================================================

Private Sub CommandButton2_Click()

Dim s As String
Dim sCella As String
Dim sWks As String

Dim x As String '<==== riga aggiunta

sCella = "G15" '<== da cambiare
sWks = "COLORS" '<== da cambiare

On Error GoTo XIT

x = Range(sCella).Address '<==== riga aggiunta

s = Worksheets(sWks).Range(x).Value '<==== riga modificata

Application.Run s
ActiveSheet.Unprotect
Range("V24:AD34").Select
Selection.Copy
Range("V12:AD12").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("M18:T18").Select
Application.CutCopyMode = False
Range("G14").Select
Selection.ClearContents
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True

Exit Sub

XIT:

'Inizio Gestione Errori

With Err

If (s = "") And (Not x = "") And (Not (.Number = 9)) Then

MsgBox "ERRORE N°1004." & vbNewLine & _


"Devi inserire un nome nella cella " & sCella

Else


MsgBox "ERRORE N° " & CStr(.Number) & ". " & _
vbNewLine & .Description

End If

End With

'Fine Gestione Errori


End Sub

'============================================================


Sono riuscito a gestire tutti gli eventuali "ERRORI" possibili? :-)))

Il responso ai "maestri" di questo ng: io sono ormai un allievo "fuori
corso" !!!

Ciao
Pippo


Antonio

unread,
Aug 27, 2007, 7:36:01 PM8/27/07
to

"pippo" ha scritto:

Scusa Pippo ho letto solo ora i tuoi post, ti ringrazio per le spiegazioni,
confuso lo ero già abbastanza, comunque mi pare di caire che bisogna
aggiungere delle istruzioni per ogni possibile errore che può verificarsi, mi
pare di capire inoltre, che nel mio caso interessi solo del cambio nome
foglio non cè un modo per bloccarlo dal VB per impedirlo? Per intanto ti
ringrazio.

Ciao
Antonio

pippo

unread,
Aug 28, 2007, 1:48:07 PM8/28/07
to

"Antonio" <Ant...@discussions.microsoft.com> ha scritto nel messaggio
news:A7E6D1EF-9B1B-4543...@microsoft.com...

> Scusa Pippo ho letto solo ora i tuoi post, ti ringrazio per le
> spiegazioni,
> confuso lo ero già abbastanza, comunque mi pare di caire che bisogna
> aggiungere delle istruzioni per ogni possibile errore che può verificarsi,
> mi
> pare di capire inoltre, che nel mio caso interessi solo del cambio nome
> foglio non cè un modo per bloccarlo dal VB per impedirlo? Per intanto ti
> ringrazio.

Una soluzione, senza l'uso di Vba, potrebbe essere la seguente:

io ho Excel 2003 e, per impedire di rinominare un foglio di lavoro, devo
proteggere la *cartella* di lavoro:
menu => strumenti => protezione => *proteggi cartella*.

ATTENZIONE: la protezione agisce su *tutti* i fogli della cartella di lavoro
e, pertanto,
*non* sara' possibile rinominare *tutti* i fogli della cartella di lavoro
protetta.

Per maggiori dettagli, consulta la guida di Excel relativa alla *tua*
versione(ci potrebbe essere qualche variazione rispetto alla mia versione).

Fammi sapere! ;-))


PS: il tuo codice (pur funzionando) si puo' migliorare, in particolare, sono
da evitare, quando possibile, le istruzioni "Select" e "Selection", in
quanto rallentano l'esecuzione del programma; cmq lavorando *solo* con il
registratore di macro, non puoi ottenere di meglio.

Quando avro' un po' piu' di tempo, cerchero' di apportare qualche modifica
per ottimizzare la tua macro.


Ciao
Pippo


Antonio

unread,
Aug 28, 2007, 2:56:35 PM8/28/07
to

"pippo" ha scritto:

> Una soluzione, senza l'uso di Vba, potrebbe essere la seguente:
>
> io ho Excel 2003 e, per impedire di rinominare un foglio di lavoro, devo
> proteggere la *cartella* di lavoro:
> menu => strumenti => protezione => *proteggi cartella*.
>

Grazie 1000 Pippo, le cose semplici a volte sfuggono, per codice VB mi devo
accontentare del registratore, fortunatamente il file non è nulla di
complesso per cui sicuramente non mi darà problemi di rallentamento, un
saluto e alla prossima

Ciao
Antonio

0 new messages