Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[VBA] RICHIAMARE ROUTINE

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

[VBA] RICHIAMARE ROUTINE

Postdi yield.pm » 21/11/10 20:00

Ciao a tutti,
scrivo per un piccolo aiuto.

In una routine devo richiame un'altra routine che però cambia per ogni file.... ora se io memorizzo il nome della routine sul foglio con l'etichetta "SceltaNome" poi nel codice vba scrivo:

NomeRoutine=Range("sceltanome").value

richiamando la routine con NomeRoutine ottengo errore.... come posso risolvere?

grazie, un saluto
yield.pm
Utente Junior
 
Post: 45
Iscritto il: 21/11/10 19:55

Sponsor
 

Re: [VBA] RICHIAMARE ROUTINE

Postdi ricky53 » 21/11/10 20:19

Ciao,
benvenuto nel forum.

Perchè non richiami sempre la stessa routine passandogli il nome del file sul quale deve operare e poi nella routine richiamata gestisci le operazioni sui vari file?

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [VBA] RICHIAMARE ROUTINE

Postdi yield.pm » 21/11/10 21:22

ricky53 ha scritto:Ciao,
benvenuto nel forum.

Perchè non richiami sempre la stessa routine passandogli il nome del file sul quale deve operare e poi nella routine richiamata gestisci le operazioni sui vari file?

Ciao da Ricky53

Cioa Rick53, grazie!
In sincerità non ho capito il tuo suggerimento.... i file sono tanti, le possibili routine da richiamare sono decisamente meno, io voglio solo poter memorizzare il nome della routine da richiamare dal foglio.
yield.pm
Utente Junior
 
Post: 45
Iscritto il: 21/11/10 19:55

Re: [VBA] RICHIAMARE ROUTINE

Postdi maxmula » 21/11/10 23:27

Ciao Yeld, Benvenuto nel forum,
Non vorrei sbagliarmi, ma non mi risulta che in VBA sia possibile fare chiamate "calcolate", cioè usare l'istruzione Call passandole il nome della routine da chiamare.

Se ho capito bene il problema:
    - Hai un foglio che contiene una routine principale
    - Hai tanti fogli secondari, ognuno dei quali contiene altre macro
    - Dal foglio principale, carichi un foglio secondario e vuoi eseguire una delle macro che contiene
    - Il nome della macro chiamata varia da foglio a foglio.

Una soluzione potrebbe essere questa:
Codice: Seleziona tutto
nomefoglio = ActiveWorkbook.Name
Select Case NomeFoglio
    Case "nome1"
        Call routine1
   
    Case "nome2"
        Call routine2
       
    Case "nome3"
        Call routine3
       
    Case "nome4"
        Call routine4
       
    Case Else
        MsgBox ("Foglio sconosciuto... Non so cosa chiamare!")
       
End Select


Così facendo hai però il problema di dover sapere a priori quale sia il giusto abbinamento nomeFoglio/routine.
Certo, la cosa più pratica sarebbe poter uniformare i nomi delle routine e dei file che vengono aperti...

Un altro modo potrebbe essere quello di usare, al posto del nome del foglio, una stringa scritta in una cella del medesimo, ed indirizzare, quindi, la selezione in base a questa stringa.
Anche qui, però, dovresti avere la certezza che le routine che vai a chiamare siano tutte incluse nalla lista dei "Case" della Select, altrimenti.... ciccia.

Volendo/dovendo fare una cosa più complessa, puoi provare a leggere questo topic:
http://www.pc-facile.com/forum/viewtopic.php?f=26&t=87094&p=495646&hilit=auto%2A#p495193

Forse non è proprio in tema con quanto chiedi, però contiene dei link interessanti (un grazie ad Anthony47 !) che forse possono aiutarti.
Tieni presente, però, che in questo caso non si tratta di argomenti per neofiti, ma come spesso dico, se non ci si prova mai... :)
In ogni caso, per quanto possibile, siamo sempre qui!

Ciao,
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Re: [VBA] RICHIAMARE ROUTINE

Postdi Anthony47 » 22/11/10 01:55

Benvenuto nel forum anche da parte mia.
Si puo' usare, oltre al metodo suggerito da max:
Codice: Seleziona tutto
Application.Run Range("scelta").Value


Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [VBA] RICHIAMARE ROUTINE

Postdi maxmula » 22/11/10 10:19

E' inutile... Anthony47 ne sa sempre una più del diavolo! :P

Ciao!
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Re: [VBA] RICHIAMARE ROUTINE

Postdi yield.pm » 22/11/10 10:58

Si credo abbiate ragione, Anthony ne sa una più del diavolo.... però in questo caso non funziona perchè la routine da richiamare non è semplice....

Supponendo che la routine da richiamare sia questa:

Sub Pippo( ix As Long )
...
....
end sub

io la richiamo cosi:
Pippo ix

non la richiamo con call insomma e quindi il suggerimento di Anthony non è valido (perdonate se non ho ben specificato nel primo post).

Grazie.

p.s. ho abilitato l'invio di una mail ogni qual volta ricevo una risposta ma finora nessun mail, nonostante le risposte... qualcuno sa il perchè?
yield.pm
Utente Junior
 
Post: 45
Iscritto il: 21/11/10 19:55

Re: [VBA] RICHIAMARE ROUTINE

Postdi yield.pm » 22/11/10 11:07

Maxmula, io il problema lo posso risolvere facilmente abbinando un numero ad ogni possibile routine da richiamare e mettere direttamente nel codice delle condizioni IF. Mi piacerebbe però sapere se è possibile quello che ho chiesto, tutto qua. Grazie :-)
yield.pm
Utente Junior
 
Post: 45
Iscritto il: 21/11/10 19:55

Re: [VBA] RICHIAMARE ROUTINE

Postdi maxmula » 22/11/10 14:19

yield.pm ha scritto:ho abilitato l'invio di una mail ogni qual volta ricevo una risposta ma finora nessun mail, nonostante le risposte...


Strano, di solito arrivano regolarmente.
Prova a cliccare su "sottoscrivi topic" nella cornice inferiore della pagina, a volte capita anche a me di annullare involontariamente.
Se sei sicuro di esserti già associato (che brutto "sottoscritto", fa tanto simil-anglofono), allora prova a verificare che l'email inserita nel tuo profilo personale corrisponda effettivamente all'indirizzo che usi regolarmente...

Tornando alla tua domanda, mi sembra di capire dall'andamento del topic in generale che quanto richiesto sia possibile, magari non proprio nella maniera che intendi tu ma comunque possibile.
Tra l'altro, se vai a cercare qualche informazione in più sul metodo Application.Run suggerito da Anthony, vedi che supporta anche un buon numero di argomenti, per cui non vedo il problema: scrivi il nome della routine in una cella, gli argomenti nelle celle vicine e poi usi una Application.Run prendendo le informazioni dal posto giusto...

http://msdn.microsoft.com/en-us/library/bb213784%28office.12%29.aspx
(la pagina qui sopra è dedicata a Excel 2007, ma vale anche per la versione 2003)

Ciao!
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Re: [VBA] RICHIAMARE ROUTINE

Postdi yield.pm » 22/11/10 15:07

maxmula ha scritto:
yield.pm ha scritto:ho abilitato l'invio di una mail ogni qual volta ricevo una risposta ma finora nessun mail, nonostante le risposte...


Strano, di solito arrivano regolarmente.
Prova a cliccare su "sottoscrivi topic" nella cornice inferiore della pagina, a volte capita anche a me di annullare involontariamente.
Se sei sicuro di esserti già associato (che brutto "sottoscritto", fa tanto simil-anglofono), allora prova a verificare che l'email inserita nel tuo profilo personale corrisponda effettivamente all'indirizzo che usi regolarmente...

Tornando alla tua domanda, mi sembra di capire dall'andamento del topic in generale che quanto richiesto sia possibile, magari non proprio nella maniera che intendi tu ma comunque possibile.
Tra l'altro, se vai a cercare qualche informazione in più sul metodo Application.Run suggerito da Anthony, vedi che supporta anche un buon numero di argomenti, per cui non vedo il problema: scrivi il nome della routine in una cella, gli argomenti nelle celle vicine e poi usi una Application.Run prendendo le informazioni dal posto giusto...

http://msdn.microsoft.com/en-us/library/bb213784%28office.12%29.aspx
(la pagina qui sopra è dedicata a Excel 2007, ma vale anche per la versione 2003)

Ciao!
MAx

Ciao Max,
per il problema "notifca" direi che si è risolto da solo, stavolta è arrivat la mail :-)
Per il resto se metto il nome della routine in una cella (come voglio fare) non riesco a richiamarla, nemmeno con application.run come suggerito dal buon Anthony.
Ciao
yield.pm
Utente Junior
 
Post: 45
Iscritto il: 21/11/10 19:55

Re: [VBA] RICHIAMARE ROUTINE

Postdi ricky53 » 22/11/10 17:09

Ciao,
ho provato ed a me non ha dato problemi.

Ho provato così
ho aperto un file XLS nuovo e
nel "Foglio1" cella "A1" ho scritto "Saluti" --->> è il nome della macro da eseguire.

Codice: Seleziona tutto
Sub Esegui_da_Cella()
    Application.Run Foglio1.Range("A1").Value
End Sub

Sub Saluti()
    MsgBox "Ciao"
End Sub


Adesso tu prova nello stesso modo e ...

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [VBA] RICHIAMARE ROUTINE

Postdi yield.pm » 22/11/10 17:55

Allora io di vba ne capisco poco però.....

Se la routine da richiamare è di questo tipo:
Sub Pippo
...
....
end sub
allora il vostro suggerimento (application.run etc) funziona....

se invece la routine da richiamare è di questo tipo:
Sub Pippo( ix As Long )
...
....
end sub
allora non funziona.
yield.pm
Utente Junior
 
Post: 45
Iscritto il: 21/11/10 19:55

Re: [VBA] RICHIAMARE ROUTINE

Postdi ricky53 » 22/11/10 18:15

Caio,
prova in questo modo

sempre con [A1] = "Saluti" del "Foglio1"

Codice: Seleziona tutto
Sub Esegui_da_Cella()
    Parametro = "Dati Passati"
    Esito = Application.Run(Foglio1.Range("A1").Value, Parametro)
End Sub

Sub Saluti(Dati)
    MsgBox "Ciao - " & Dati
End Sub



Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [VBA] RICHIAMARE ROUTINE

Postdi yield.pm » 23/11/10 19:20

ricky53 ha scritto:Caio,
prova in questo modo

sempre con [A1] = "Saluti" del "Foglio1"

Codice: Seleziona tutto
Sub Esegui_da_Cella()
    Parametro = "Dati Passati"
    Esito = Application.Run(Foglio1.Range("A1").Value, Parametro)
End Sub

Sub Saluti(Dati)
    MsgBox "Ciao - " & Dati
End Sub



Ciao da Ricky53

Perdonami Ricky53 ma questa non l'ho capita.... la tua routine funziona ma non trova applicazione al mio problema... mi sa che l'unica è risolvere con una associazione routine-numero sul foglio.
Ciao
yield.pm
Utente Junior
 
Post: 45
Iscritto il: 21/11/10 19:55

Re: [VBA] RICHIAMARE ROUTINE

Postdi ricky53 » 23/11/10 20:27

Ciao,
o il tuo problema è diverso da come l'hai esposto ...
oppure non hai provato come ti ho indicato ma hai solo cercato di capire come applicarlo alla tua esigenza
o ...
altro che non sappiamo.

Puoi chiarire e ne usciamo.

Consiglio: con un file di esempio (senza dati sensibili) con una spiegazione più dettagliata si capirà meglio e si arriverà al risultato evitando di interpretare quello che vuoi avere come risultato.

L'interpretazione è quasi una certezza dello sbagliare.

Forza che ne usciamo.

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [VBA] RICHIAMARE ROUTINE

Postdi yield.pm » 23/11/10 21:21

Al volo, in questo file:
http://rapidshare.com/files/432711609/Cartel1.rar
ci sta un piccolissimo codice che dovrebbe rendere l'idea di ciò che mi serve... grazie, buona serata.
Ciao
yield.pm
Utente Junior
 
Post: 45
Iscritto il: 21/11/10 19:55

Re: [VBA] RICHIAMARE ROUTINE

Postdi Anthony47 » 23/11/10 22:58

Non so che prove hai fatto, ma con l' esempio che hai pubblicato devi usare
Codice: Seleziona tutto
Application.Run Sheets("Foglio1").Range("D1").Value, ix

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [VBA] RICHIAMARE ROUTINE

Postdi ricky53 » 24/11/10 00:41

Ciao,
ho scaricato il tuo file e ti propongo un adattamento di quanto ti avevo proposto in un mio precedente intervento:
Codice: Seleziona tutto
Option Explicit

Dim Rprova As Range
Dim Ix As Long, Esito As Long

Sub Prima()
    Set Rprova = Range("Prova")
    For Ix = 1 To 40
        If Ix = 15 Then
            Esito = Application.Run(Foglio1.Range("D1").Value, Ix)
            MsgBox Esito
        End If
    Next Ix
End Sub

Function Seconda(Ix As Long)
    Seconda = Rprova(Ix) * 2
End Function


La "Function" di nome "Seconda" il cui nome è contenuto in "D1" restituisce il valore alla sub chiamante nella varibile "Esito".

Potrai sostituire alla cella fissa "D1" una cella variabile mediante un ciclo for/next per richiamare "N" Function il cui nome è contenuto nella cella variabile "Cells(I, Colonna).

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [VBA] RICHIAMARE ROUTINE

Postdi yield.pm » 24/11/10 15:40

Anthony, Ricky vi chiedo umilmente scusa, le soluzione da voi proposte funzionavano fin da subito... purtroppo non mi sono accorto che a differenza del codice originale bisognava aggiungere una virgola e per questo ottenevo errore. Scusatemi ma l'età avanza e la vista a volte fa brutti scherzi :) .
Problema risolto grazie a voi, un saluto.
yield.pm
Utente Junior
 
Post: 45
Iscritto il: 21/11/10 19:55

Re: [VBA] RICHIAMARE ROUTINE

Postdi ricky53 » 24/11/10 17:12

Ciao,
bene per aver risolto.

Se posso (visto che anch'io in fatto di età non sto male) non potevi dire quale erroee prendevi piuttosto che dire
.... la tua routine funziona ma non trova applicazione al mio problema ...
o altro

Commento da tenere presente la prossima volta che ti troveremo qui.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia


Torna a Applicazioni Office Windows


Topic correlati a "[VBA] RICHIAMARE ROUTINE":


Chi c’è in linea

Visitano il forum: alfrimpa e 16 ospiti