Condividi:        

[EXCEL] INSERIMENTO AUTOMATICO 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

Re: [EXCEL] INSERIMENTO AUTOMATICO IMMAGINI

Postdi commerciale » 24/11/11 15:36

Ciao Anthony,
Sono finalmente riuscito a mettere mano al file (scaricabile qui):
https://rapidshare.com/files/2871938229 ... ne_5.2.xls
Ti chiedo aiuto sui seguenti punti:
1. Columns(Jolly + 1).ColumnWidth = (Largo) / 5.7  Comando che dovrebbe adeguare la larghezza della colonna con immagine alla grandezza dell’immagine.
Funziona perfettamente se i nomi immagini sono nella colonna A , mentre nel caso i nomi sono nelle colonna B o C ecc.. mi da errore, mi servirebbe uno “stratagemma” per sostituire il +1; Inoltre ho messo /5.7 perché visivamente mi sembrava un buon compromesso visivo, esiste una regola da utilizzare?

2. Rows.RowHeight = (Alto) + 4  Comando che adegua l’altezza della riga alla grandezza dell’immagine.
Come faccio a far effettuare questo comando solo sulle righe con immagini e non su tutto il foglio?

3. Sub removeAllCode() e Sub ESPORTA()
Riscontro alcuni errori in esportazione del file, in parte dipendono dal tipo di computer utilizzato ed in parte dalla versione excel utilizzata. Sai consigliarmi qualche miglioria per renderlo più "universale"?

4. Immagine “Non disponibile”: Anziché selezionare esternamente l’immagine non disponibile (DefPic) vorrei inserire di nascosto tale immagine nel file excel chiamandola ad esempio “NODISPO” (l’immagine l’ho già inserita nel foglio parametri nella cella C4).
Credo basti cambiare: ActiveSheet.Pictures.Insert(DefPic).Select … ma in che modo??

5. Attualmente funziona solamente se ListaF sono celle continue (esempio A2:A10)
Se volessi che la macro funzionasse ad intervalli (esempio A2:A10;C2:C10) che modifiche sarebbero da fare? o è solo una questione di errate istruzioni?

Grazie per l’aiuto che sarete in grado di darmi

Saluti
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Sponsor
 

Re: [EXCEL] INSERIMENTO AUTOMATICO IMMAGINI

Postdi Anthony47 » 24/11/11 23:09

Ho guardato il file.
Per i punti 1 e 2 dovrebbero andare le seguenti modifiche nela macro Worksheet_Change (le modifiche sono dopo il marker *** e fino al marker ^^^
Codice: Seleziona tutto
Largo = Sheets("Parametri").Range("B8").Value 'Larghezza immagine e colonna
'***
Range(ListaF).Range("A1").Offset(0, Jolly).ColumnWidth = (Largo) / 5.7 '* Da rivedere...
Range(ListaF).RowHeight = (Alto) + 4
'^^^
For Each CELLA In Target

Per la larghezza, essa e' impostabile in "caratteri standard" e non in pixel, quindi dovrai accontentarti dell' approssimazione del "/5.7". Potresti fare una impostazione precisa ricorrendo a un loop che incrementa il ColumnWidth di un valore frazionale e leggendo poi il relativo Width (sara' letto in pixel); il problema e' che tu esegui quel codice ad ogni variazione, quindi ti ritroveresti in continuazione la colonna che viene ristretta e poi allargata in modo incrementale, con probabili effetti di tempi di esecuzione. Ma io avrei inserito qul codice non nella sezione Worksheet_Change, quindi eseguita continuamente, ma in una sezione di preparazione del foglio.

Per il punto 3 non sapendo quale e' l' obiettivo non so cosa suggerire; ovviamente la tecnica di modificare il contenuto del vba da macro richiede una buona padronanza del vba e del suo ambiente per evitare risultati indesiderati e poter gestire eventuali problemi che emergano.
Inoltre affinche' questo funzioni su un pc, le sue impostazioni di sicurezza (del pc) devono essere impostate in una situzione che non e' quella di default, e nemmeno quella raccomandabile come standard (deve essere dichiarato attendibile l' accesso al vba project).

Vorrei suggerire un approccio forse piu' semplice:
-copia i fogli in un nuovo workbook (usa i comandi Menu /Modifica /Sposta o copia foglio; spunti Crea una copia e come destinazione usa Nuova cartella, e registra una macro)
-avrai cosi' un nuovo file che contiene solo la macro di Worksheet_Change al suo interno
-puoi azzerare quel codice, lavorando su un pc con l' accesso attendibile al vba, seguendo le istruzioni di questo vecchio messaggio: viewtopic.php?p=461276#p461363 (solo le tre righe marcate "clear vecchio codice")
-salva il nuovo file, che sara' quindi senza macro.

Per il punto 4 la modifica sarebbe questa:
Codice: Seleziona tutto
            'ActiveSheet.Pictures.Insert(DefPic).Select    'Eliminare
                Sheets("Parametri").Shapes("NODISPO").Copy  'AGGIUNGI
                ActiveSheet.Paste                'AGGIUNGI


Per la 5, invece di dichiarare gli indirizzi, crea un intervallo con celle non contigue e dichiara quel nome in Parametri!B2.

Suggerisco infine di aggiungere una If Application.Intersect in testa alla macro, come fatto qui:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range) 'By Lanfre + PcFAcile
ListaF = Sheets("Parametri").Range("B2").Value   '<<< Le celle con nome immagine
'**
If Application.Intersect(Target, Range(ListaF)) Is Nothing Then Exit Sub  '***  AGGIUNTA
'^^

Questo fa terminare la worksheet_change se non ci sono celle da processare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] INSERIMENTO AUTOMATICO IMMAGINI

Postdi commerciale » 26/11/11 11:13

Grazie Anthony,
sei stato di grandissimo aiuto.
Per il punto 3 quello che suggerisci è la stessa cosa che ho già fatto ma in modo leggermente diverso, quindi per il momento lo tengo così. Per essere chiaro la macro fa questo: Apre il "salva con nome" (nb.apre solamente ma non salva!!), memorizza il percorso e il nome file che inserisco, copia il foglio "immagini" in una nuova cartella excel, la salva con nome e percorso memorizzato prima, elimina le macro...
A me funziona, su alcuni pc no invece... :-?
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: [EXCEL] INSERIMENTO AUTOMATICO IMMAGINI

Postdi Anthony47 » 27/11/11 00:38

Se hai fatto in quel modo allora potrai ripulire le macro presenti nel foglio con queste tre righe:
Codice: Seleziona tutto
'clear vecchio codice:
For I = ActiveWorkbook.VBProject.VBComponents("immagini").CodeModule.CountOfLines To 1 Step -1
ActiveWorkbook.VBProject.VBComponents("immagini").CodeModule.DeleteLines I
Next I

Vanno eseguite mentre e' attivo il file contenente la copia del foglio Immagini; poi salvi il file col nome gia' acquisito.
Ovviamente su un pc che ha dichiarato attendibile l' accesso al vba project, cosa che sospetto non sia vero su tutti i pc su cui lavori (e mi sembra una precauzione giusta).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] INSERIMENTO AUTOMATICO IMMAGINI

Postdi Novellino_01 » 08/02/22 11:42

Buongiorno Antthony47,
ho letto attentamente il tuo post e lo ho trovato molto interessante anche perché fa esattamente a caso mio.
Posto la macro modifica, funziona tutto tranne la seguente stringa
Codice: Seleziona tutto
ActiveSheet.Pictures.Insert("/Users/stefano/Documents/Foto/NF.png").Select '<2



qui di seguito allego macro completa
PS ho un MAC
Grazie per chi ha competenze per aiutarmi

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
'
ListaF = "B2:B7"   '<<< Le celle con nome immagine
For Each Cella In Target
If Not Application.Intersect(Cella, Range(ListaF)) Is Nothing Then
    On Error Resume Next
        ActiveSheet.Shapes("FOTO_DA_" & Cella.Address(0, 0)).Delete
    On Error GoTo 0
    Cella.Select
    If Dir("/Users/stefano/Documents/Foto/" & Cella.Text & ".png") = "" Then    '<1
    ActiveSheet.Pictures.Insert("/Users/stefano/Documents/Foto/NF.png").Select '<2
    Else
    ActiveSheet.Pictures.Insert("/Users/stefano/Documents/Foto/" & Cella.Text & ".png").Select '<1
    End If
    Selection.Name = "FOTO_DA_" & Cella.Address(0, 0)
    Selection.ShapeRange.Height = 79
    If Selection.ShapeRange.Width > 150 Then
    Selection.ShapeRange.Width = 150
    End If
   
    'PER POSIZIONARE L'IMMAGINE
    Selection.ShapeRange.Left = Cella.Offset(0, -1).Left
    Cella.Select
End If
Next Cella
End Sub



Anthony47 ha scritto:Ho guardato il file Commerciale.rar e il suo ImportaImmaginiDaElenco.xls.

Il file intendeva realizzare la seguente prestazione:
-quando si modifica una o piu' celle nel range E1:E41 (l' intervallo col nome "ELENCO_ARTICOLI")...
-si legge il valore di ogni cella a partire dalla prima modificata verso il basso
-si cerca nella directory C:\Temp la presenza di una immagine jpg avente nome pari al contenuto della cella
-se esiste si inserisce quell' immagine, la si ridimensiona e la si posiziona in col J
-se non esiste si inserisce una foto di default (immagine ImmStandard.jpg, sempre dalla stessa directory)

Le immagini devono essere presenti in una directory definita nel codice macro, puo' essere diversa per le immagini vere e per quella di default.

Purtroppo ci sono un paio di errori che falsano la realizzazione di questo obiettivo:
-Nella macro Sub Worksheet_Change l' istruzione Selection.Name = "FOTO_DA_" & Target.Offset(0, 0).Address(0, 0) e' malauguratamente "commentata", per cui non viene eseguita, col risultato che piu' immagini (uguali o diverse) vengono inserite in col J.
-In ogni caso il meccanismo di rename delle immagini e' falsato, perche' tutte le immagini manipolate in un ciclo vengono rinominate con lo steso nome; strano ma vero, excel non si offende ad avere 1, 10 o 100 immagini tutte con lo stesso nome. Salvo che poi ne cancella una sola. Col risultato che.... piu' immagini (uguali o diverse) vengono inserite in col J.

Il mio suggerimento e' di sostituire integralmente la macro Worksheet_Change contenuta nel file e sostituirla con questa versione:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
'
ListaF = "E1:E41"   '<<< Le celle con nome immagine
For Each Cella In Target
If Not Application.Intersect(Cella, Range(ListaF)) Is Nothing Then
    On Error Resume Next
        ActiveSheet.Shapes("FOTO_DA_" & Cella.Address(0, 0)).Delete
    On Error GoTo 0
    Cella.Select
    If Dir("C:\TempPIPPO\" & Cella.Text & ".jpg") = "" Then    '<1
    ActiveSheet.Pictures.Insert("C:\TempPIPPO\ImmStandard.jpg").Select  '<2
    Else
    ActiveSheet.Pictures.Insert("C:\TempPIPPO\" & Cella.Text & ".jpg").Select '<1
    End If
    Selection.Name = "FOTO_DA_" & Cella.Address(0, 0)
    Selection.ShapeRange.Height = 79
    If Selection.ShapeRange.Width > 150 Then
    Selection.ShapeRange.Width = 150
    End If
   
    'PER POSIZIONARE L'IMMAGINE
    Selection.ShapeRange.Left = Cella.Offset(0, 5).Left
    Cella.Select
End If
Next Cella
End Sub

Nelle righe marcate <1 dovete inserire la directory dove sono reperibili le foto da inserire
Nella riga marcata <2 va la directory + il nome dell' immagine di default.
Nella riga marcata <<< inserite l' indirizzo delle celle che dovrebbero contenere il nome di una immagine da inserire.

Se avete elaborato un file di produzione (con dati veri) e non avete piu' il file originale allora
1) la prossima volta fate le vostre prove sempre su una copia dei dati
2) procedete con questo ripristino, DOPO AVER FATTO DUE COPIE DI BACK-UP DEL FILE CORRENTE:

2a) Per eliminare le immagini al momento presenti in col J potete usare questa macro, da usare una sola volta:
Codice: Seleziona tutto
Sub Delall()
'cancella tutte le immagini di colonna J (colonna 10)
For Each pict In ActiveSheet.Shapes
If pict.TopLeftCell.Column = 10 Then pict.Delete
Next pict
End Sub

RIPETO: elimina tutte le immagini e le forme che hanno l' angolo alto a sx in col J

2b) Per creare in col J tutte le immagini come da contenuto della colonna E potete invece usare questa macro:
Codice: Seleziona tutto
Sub PutAll()
'Crea le immagini come da lista presente nel range ListaF
ListaF = "E1:E41"   '<<< Le celle con nome immagine
For Each Cella In Range(ListaF)
    OldV = Cella.Value
    Cella.ClearContents: Cella = OldV
Next Cella
End Sub

PutAll presuppone che la macro di Worksheet_Change sia gia' stata modificata come suggerito prima.

Questa seconda macro, PutAll, puo' anche risolvere la domanda fatta da joe.cnt, che pero' dovra' adattare la macro Worksheet_Change come segue
a) Adattare questa riga ai propri dati:
Codice: Seleziona tutto
ListaF = "E1:E41"   '<<< Le celle con nome immagine

b) Modificare questa riga per impostare col B
Codice: Seleziona tutto
    'PER POSIZIONARE L'IMMAGINE     '<<< esistente
    Selection.ShapeRange.Left = Cella.Offset(0, 1).Left    'Modificata

In questo modo, cioe', sara' possibile sia eseguire in blocco l' inserimento delle immagini sia modificare una singola immagine, modificando la relativa cella di col A

Buon test a tutti.
Novellino_01
Newbie
 
Post: 1
Iscritto il: 08/02/22 11:25

Re: [EXCEL] INSERIMENTO AUTOMATICO IMMAGINI

Postdi Anthony47 » 08/02/22 12:46

Intanto "Benvenuto nel forum"
Quindi la macro inserisce correttamente le foto, eccetto quando dovrebbe inserire la NF.png?
E che succede su quella riga che non va? Un messaggio di errore? Semplicemente "Nulla"?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] INSERIMENTO AUTOMATICO IMMAGINI

Postdi Marius44 » 08/02/22 17:04

Salve a tutti

Da profano suggerirei di "guardare attentamente" il nome dell'immagine: è esattamente NF.png?
In secondo luogo noto che quasi alla fine hai detto che usi un MAC. Non è che col MAC ci sia qualche problema?
In merito a quest'ultimo punto mi rispondo da solo: e perchè solo in quella riga?

Aspetto con ansia la risposta di Anthony (un caro saluto).
Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: [EXCEL] INSERIMENTO AUTOMATICO IMMAGINI

Postdi Anthony47 » 08/02/22 19:52

Eh, Mario, io non faccio l'indovino quindi prima di rispondere ho voluto fare delle domande per inquadrare i sintomi.
Poiche' l'utente ha modificato il path devo pensare che lo ha inserito correttamente, e quindi "probabilmente" le altre immagini vengono gestite correttamente; ma l'utente ha anche sostituito "C:\TempPIPPO\ImmStandard.jpg" con "un'altroPercorso/Foto/NF.png", quindi dovrebbe aver capito a cosa serve quel file e quindi aver adattato correttamente: insomma dovrebbe aver riportato correttamente l'immagine da usare in caso di mancanza dell'immagine specifica, e ho sospettato che NF possa significare "Nessuna Foto" che poi e' la situazione in cui va usata.

Quindi sì e' probabile che abbia inserito in nome file (NF.png) inesistente, ma e' anche possibile qualche combinazione piu' intrigata.

Insomma aspettiamo cosa dice Novellino e poi tiriamo le conclusioni

Un salutone anche a te.
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] INSERIMENTO AUTOMATICO IMMAGINI":


Chi c’è in linea

Visitano il forum: Marius44, raimea e 64 ospiti