Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Excell - Macro per immagini

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

Excell - Macro per immagini

Postdi pinolo75 » 04/04/11 20:56

Salve a tutti,

Ho un problema con un macro che non vuol funzionare.

Ho realizzato un foglio excell nel quale da un menu a tendina selezionando un opzione si attiva una macro che deve visualizzare l’immagine corrispondente all’opzione scelta, prendendola da un altra pagina dello stesso file, in base ad un riferimento collegato alla selezione del menu a tendina.. Prima di incollare l’immagine nuova la macro cancella l’immagine vecchia.

La macro prima funzionava correttamente, ma adesso, dopo aver modificato il file (ma non le macro) non gira più. (Nel frattempo sono passato a Office 2010 ...)

Problemi riscontrati:

1) La macro non viene attivata dalla selezione del menu a tendina (non da segni di vita).
2) Facendo giare la macro con Run, la prima volta funziona correttamente, ma dopo non funziona più (non cancella le vecchie eimmagini e da errore).
3) Dopo aver fatto girare manualmente con Run la macro per una volta, se seleziono un nuova opzione dal menu a tendinala macro torna ad attivarsi, ma da lo stesso messaggio di eroore del punto sopra.

Per attivare le macro con la selezione del menu a tendina ho usato i seguenti comandi:

Application.ScreenUpdating = False
If Range("AJ18") <> "" Then ‘AJ18 contiene il riferimento per selezionare l’immagine
Application.EnableEvents = False
Call Imm1
Application.EnableEvents = True

Imm1 richiama la sub ImmXBody che cancella ed incolla le nuove immagini e definisce 4 variabili
PageOut è il foglio dove inserire le immagini;
CellImm è la cella dove si vuole copiare l’immagine – e cancellare la vecchia-;
PageTab è il foglio che contiene le immagini di riferimento;
CellRif è la cella che contiene i riferimenti per selezionare la nuova immagine.

La Sub che gestisce le immagini è la seguente:

Sub ImmXBody()

Application.EnableEvents = False ‘Cancella la vecchia immagine
Sheets(PageOut).Activate
OldImm = Range(CellImm).Value
If OldImm <> "" Then ActiveSheet.Shapes(OldImm).Delete
riganum = Range(CellRif).Value '<<Cerca l’immagine
Sheets(PageTab).Activate
CurPos = Range("B" & riganum).Address
For Each Pict In ActiveSheet.Shapes
If Pict.TopLeftCell.Address = CurPos Then
NomeImm = Pict.Name: Exit For
End If
Next Pict
Sheets(PageOut).Activate '<< copia l’immagine
If NomeImm = "" Then
MsgBox ("NO Immage Available") '<< message error
GoTo Uscita
End If
Sheets(PageTab).Shapes(NomeImm).Copy
Range(CellImm).Select '<< Inserisce la nuova immagine
ActiveSheet.Paste
Range(CellImm).Value = Selection.Name
Uscita:
Application.EnableEvents = True
End Sub

Il messaggio di errore che ottengo facendo girare la macro da Run è:

Run-Time error '.2147024809 (80070057)':
the item with the specified name was not found.

E cliccando su Debug mi evidenzia il comando ActiveSheet.Shapes(OldImm).Delete (evidenziato sopra in grassetto.

Mi potete aiutare?
Come posso fare?

Grazie.
pinolo75
Newbie
 
Post: 3
Iscritto il: 04/04/11 20:50

Sponsor
 

Re: Excell - Macro per immagini

Postdi Avatar3 » 04/04/11 21:58

Prova a mettere prima della riga "incriminata"
On error resume next
...
e dopo la riga
On error goto 0

ciao
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Excell - Macro per immagini

Postdi Anthony47 » 04/04/11 23:49

Ciao pinolo75, benvenuto nel forum.
Hai un ambiente abbastanza complesso, non di facile replica; quindi me la cavo con qualche domanda e qualche vago spunto:
-quando parli di "menu' a tendina" a quale oggetto alludi in particolare? E quale meccanismo avrebbe dovuto scatenare la macro?
-il messaggio dice che l' immagine che vorresti cancellare non esiste; hai gia' verificato quale e' il valore attuale di OldImm e se una immagine "esattamente" con quel nome esiste nel foglio corrente? E il foglio corrente e' giusto?
-la lingua dell' excel2010 e' la stessa che la versione precedente?
-in quale/quali "modulo/i" sono installate le macro? (lo leggi nell' intestazione della finestra dell' editor delle macro)

Guarda anche la proposta di Avatar sopra, che pero' io suggerirei di usare solo dopo che hai capito l' origine del problema, perche' potrebbe lasciarti le vecchie immagini al loro posto anche se nascoste dalle nuove.

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: Excell - Macro per immagini

Postdi pinolo75 » 06/04/11 07:24

Ho provato la modifica di Avatar, ed effettivamente sovrascrive le immagini quindi non la posso applicare.

Rispondo ad Anthony47:
- Per menu a tendina intendo quello realizzabile con Data Validation. In pratica il file che ho realizzato è composto da diverse pagine. Il risultato finale è un docuemnto stampabile compostoi da più pagine, all’interno di ogni pagina ci sono dei campi a selezione obbligata (realizzata con Data Validation) la cui selezione attiva le macro.
- Le immagini sono contenute in una pagina a parte dello stesso file, credevo anche io che fosse un problema di nome ed ho rinominato le immagini dando dei numeri progressivi (da 1 a x)
- La lingua è inglese per entrambe le versioni excell
- La macro che richiama la sub è sotto Microsoft Excel Object  Sheet 4 (cioè la pagina che contiene i campi con la selzione obbligata o menu a tendina);
- la Sub che gestisce le immagini è sotto Modules  Module4

grazie dell’aiuto.
pinolo75
Newbie
 
Post: 3
Iscritto il: 04/04/11 20:50

Re: Excell - Macro per immagini

Postdi Anthony47 » 06/04/11 14:32

Quindi la macro scatenante e' una di Worksheet_Change, giusto? La Worksheet_Change e' l' unica che hai inserito sul modulo di Sheet4, e le altre sono inserite in Module4, giusto?

Dici che hai nominato le immagini "da 1 a X"; ma cosi' rischi di confondere "l' index" con il "name" delle immagini. Questo da solo potrebbe spiegare il problema che hai segnalato; comunque dovresti recuperare questo rischio usando OldImm = Range(CellImm).Text (invece che OldImm = Range(CellImm).Value), ma sarebbe meglio usare nomi alfa-numerici invece che numerici solo.
Un' altra considerazione: nelle macro di evento i riferimenti ai fogli sono di dafault forzati sul foglio di cui si sta' gestendo un evento; quindi ad esempio in una sequenza del tipo
Sheets("pippo").Select
Xx= Range("A1").value
YY=activesheet.range("B1").value
In realta' XX e YY saranno compilati con i valori del foglio su cui si e' verificato l' evento, non del foglio "pippo"; non so se su 2010 la situazione si e' vieppiu' confusa.

Sono sempre considerazioni generali; se con questi spunti non fai passi avanti devi debuggare le macro, inserendo break nei punti cruciali e poi eseguendo passo-passo; io metterei il break sulla prima istruzione della Worksheet_Change e da li in avanti farei tutto passo-passo.

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: Excell - Macro per immagini

Postdi ricky53 » 07/04/11 14:10

Ciao,
il 2010 si comporta esattamente come hai descritto tu sul 2003.
Le celle cui fa riferimento il VBA sono quelle del foglio del quale si sta utilizzando l'evento e non quello della "select".
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: Excell - Macro per immagini

Postdi Anthony47 » 07/04/11 14:22

Ma infatti la mia idea e' che usando "numeri" come nomi per le immagini la macro punta all' immagine tramite l' indice non tramite il nome.

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: Excell - Macro per immagini

Postdi pinolo75 » 11/04/11 09:31

Aggiornamento:
ho rinominato le immagini in immage-X.
ho inserito un po di watch dog e ho notato che l'errore sembra generato dalla macro che richiam le sub (quella inserita in Microsoft Ecell Object)
in pratica nello stesso foglio excell posso fare 4 selezioni per visuallizzare 4 immagini distinte, richiamate da 4 sub (imm1, Imm2, Immb1, Immb2) dove sono definite le celle di riferimento e dove viene richiamata la sub ImmXbody già postata.
posto la macro incrimianta che si attiva con la selezione obbligata:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("M18:AD51")) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
If Range("AJ18") <> "" Then
Application.EnableEvents = False
Call Imm1
Application.EnableEvents = True
End If
If Range("AJ40") <> "" Then
Application.EnableEvents = False
Call Imm2
Application.EnableEvents = True
End If
If Range("AJ25") <> "" Then
Application.EnableEvents = False
Call ImmB1
Application.EnableEvents = True
End If
If Range("AJ47") <> "" Then
Application.EnableEvents = False
Call ImmB2
Application.EnableEvents = True
End If
Application.ScreenUpdating = True
End Sub


le celle indicate AJxx contengono i riferimenti alla tabella che contiene le immagini.

Sapete datmi qualche suggerimento ?

grazie ancora.
A.
pinolo75
Newbie
 
Post: 3
Iscritto il: 04/04/11 20:50

Re: Excell - Macro per immagini

Postdi Anthony47 » 11/04/11 15:04

Pero' dovresti dire se hai valutato il discorso della possibile confusione che potrebbe derivare dall' uso di "nomi" per le immagini di tipo "numero"; altro mio sospetto e' che quando la macro va in errore ti lasci gli eventi disabilitati, pregiudicando lo start di ulteriori macro Worksheet_Change. Apri la finestra "Immediata" del vba (contr g) e digita "Application.EnableEvents = True" + Enter (senza Apici) e controlla se gli eventi si ...rianimano.
Sono situazioni che puoi debuggare solo tu.

Avevo anche fatto un paio di domande, anche queste rimaste senza esito.

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


Torna a Applicazioni Office Windows


Topic correlati a "Excell - Macro per immagini":


Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti