Grazie a tutti e un saluto
Ciao
Antonio
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
ops..la riga * Application.Run s * non e' da cambiare!!
Ciao
Pippo
"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
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
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
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
"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
"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
"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
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
[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
"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
> 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
"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