Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

inserimento immagini in fogli diversi

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

inserimento immagini in fogli diversi

Postdi Gianca532011 » 23/05/16 13:24

Ciao, ho una cartella con 5 fogli e in ciascuno di questi devo inserire una immagine accanto al proprio numero, una per riga.
Ho trovato una macro di Anthony che funziona benissimo se applicata al foglio singolo, ma io dovrei estenderla a tutti i fogli restanti. Ho provato a copiarla in This worbook ma non funziona, come devo fare ?
Allego la macro.

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim UR As Long, R As Long, I As Long, mPath As String, mFoto As String
    Dim oOgg As Shape, SH As Sheets
    If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then
        MsgBox "Operare solo su una cella"
        Exit Sub
    End If
    If Target <> "" Then
        UR = Range("E" & Rows.Count).End(xlUp).Row ' Ultima riga con dati
        If Not Intersect(Target, Range("E3:E" & UR)) Is Nothing Then
            mPath = "C:\Users\gianca\Documents\Storico uscite\immagini" ' <<===== QUI scrivi il percorso ove hai le tue foto
            mFoto = Target
            If Dir(mPath & "\" & mFoto & ".jpg") <> "" Then ' Si controlla se la foto esiste
                Application.ScreenUpdating = False
                For Each oOgg In ActiveSheet.Shapes
                    If oOgg.Top - 4.5 = Target.Top Then
                        oOgg.Delete ' Si cancella l'immagine esistente
                        Exit For
                    End If
                Next oOgg
                With ActiveSheet.Pictures.Insert(mPath & "\" & mFoto & ".jpg")
                    .Top = Target.Offset(0, 1).Top + 5
                    .Left = Target.Offset(0, 1).Left + 5
                    .Height = Target.Offset(0, 1).Height - 10
                    .Width = Target.Offset(0, 1).Width - 10
                End With
                Application.ScreenUpdating = True
            Else
                MsgBox "Immagine non trovata" ' <<====== QUI scrivi il messaggio che vuoi sia inviato
            End If
        Else
            MsgBox "Scrivere un nome in una cella della colonna  'A'"
        End If
    Else
        For Each oOgg In ActiveSheet.Shapes
            If oOgg.Top - 4.5 = Target.Top Then
                oOgg.Delete ' Si cancella l'immagine esistente
                Exit For
            End If
        Next oOgg
    End If
End Sub
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Sponsor
 

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 23/05/16 14:19

Ovviamente copiando la macro in ciascuno dei fogli tutto funziona, ma mi chiedevo se non esista qualche scorciatoia più elegante .
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 23/05/16 15:37

Giusto per complicarmi la vita : se volessi aggiungere DUE foto ovvero in F20 ho il numero della foto 1 e in P20 ho quello della foto 2 che devono essere immesse rispettivamente in B21 e in I21, come devo modificare la macro di Anthony ? Ho provato a raddoppiare le righe con un else intermedio ma non funzia ....si accettano suggerimenti, grazie .
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Anthony47 » 23/05/16 22:37

Ma tu devi inserire l'immagine in modo "dinamico", cioe' appena cambi il contenuto di colonna E devi inserire l'immagine, o ti basta una modalita' statica, cioe' compili gli elenchi, poi avvii una macro che inserisce una dopo l'altra tutte le immagini?

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: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 24/05/16 14:46

Ciao Anthony,
Le immagini da inserire sono in modalità statico in un foglio predisposto con 2 riquadri ad hoc abbinati al numero delle foto , vedi due post sopra per le coordinate, la macro che ho inserito più sopra funziona benissimo, ridimensiona l'immagine ma la inserisce in orizzontale.
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 24/05/16 17:38

Anthony, rileggendo i miei vari messaggi ho il dubbio di essere stato poco chiaro, ti allego quindi l'immagine della scheda con le coordinate di dove mettero il riferimento delle foto e sotto dove andranno messe le foto. Queste saranno immesse in sola cartella denominata "Immagini". Ciao e grazie

http://s33.postimg.org/dyapugvy7/Foglio_esempio.jpg
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Anthony47 » 24/05/16 20:06

Gli ultimi messaggi e l'immagine mi hanno "sconfuso" le idee...
Ma tu in ogni foglio hai "un elenco" (cioe' una moltitudine) di immagini da inserire o ne hai solo 1-2? Perche' l'elenco e' bene affrontarlo in un modo, ma un paio (per di piu' in locazioni fisse) si affrontano in altro modo.
E tutti i fogli hanno una struttura e una logica analoga o sono "diversificati"? Questo per capire quanto e' fattibile la macro a livello di ThisWorkbook piuttosto che di singolo Foglio.
Dovresti anche spiegare meglio cosa intendi con "la macro [. . .] funziona benissimo, ridimensiona l'immagine ma la inserisce in orizzontale" (il dubbio e' sulla parte in bold).
Infine sarebbe utile sapere se questi file devono essere scambiati con altri utenti su altri Pc, e se Si quale versione di Office utilizzate.

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: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 24/05/16 20:30

Effettivamente hai ben ragione di essere "sconfuso" , sono partito con una richiesta per arrivare a un'altra differente. Quindi, in primis non tenere conto dei post 1 e 2, ho risolto il tutto con la macro postata in 1 che funziona bene ma in " laterale " nel senso che il n. di foto è a sx e il posizionamento immagine alla sua immediata destra, stessa riga.
NB Non ha nulla a che fare con il Foglio esempio allegato successivamente.
Altro caso invece e quello del post 3 e seguenti nel quale il foglio è uno solo ma posso inserire due immagini, come da fac simile allegato. in questo caso la macro sopra citata non va più bene perchè è richiesto l'inserimento delle foto sotto, ciò oltre al fatto che le immagini "possono " essere due oppure una, quindi le locazioni sia del numero della foto F20 e P20 che delle rispettive collocazioni ( B21 e I21) sono sempre fisse.
Non devono essere scambiati ma operano su un solo PC con excel 2013.
La scheda, una volta completata in ogni sua componente, viene trasformata in pdf e inviata come tale.
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Anthony47 » 25/05/16 12:07

Allora potrebbe aiutare una macro come questa, da inserire nel modulo vba del foglio di lavoro:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim varTA As String
'
If Target.Count > 1 Then Exit Sub
If Target.Address = "$F$20" Or Target.Address = "$P$20" Then
    mPath = "C:\Users\gianca\Documents\Storico uscite\immagini" ' <<===== QUI scrivi il percorso ove hai le tue foto
    If Target.Address = "$F$20" Then varTA = "B21" Else varTA = "I21"
    On Error Resume Next
    ActiveSheet.Shapes("FOTO_" & varTA).Delete
    On Error GoTo 0
    Target.Select
    If Target <> "" Then
        If Dir(mPath & "\" & Target & ".jpg") <> "" Then ' Si controlla se la foto esiste
            With ActiveSheet.Pictures.Insert(mPath & "\" & Target & ".jpg")
                .Top = Range(varTA).MergeArea.Top + 5
                .Left = Range(varTA).MergeArea.Left + 5
                .Height = Range(varTA).MergeArea.Height - 10
                If .Width > Range(varTA).MergeArea.Width Then .Width = Range(varTA).MergeArea.Width - 10
                .Name = "FOTO_" & varTA
            End With
            Application.ScreenUpdating = True
        Else
            MsgBox "Immagine non trovata" ' <<====== QUI scrivi il messaggio che vuoi sia inviato
        End If
    End If
End If
End Sub


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: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 25/05/16 13:26

Perfetta !!! ma non avevo alcun dubbio sul risultato .

Grazie Anthony, solo un'altra domanda : se volessi allungare verso il basso l'immagine, accettando l'inevitabile distorsione comunque contenuta e tollerabile, quale istruzione dovrei aggiungere / parametro modificare ?
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Anthony47 » 25/05/16 23:05

Nel codice precedente veniva volutamente evitata la distorsione dell'immagine; se invece vuoi privilegiare il riempimento dell'area allocata, cambia il gruppo centrale di istruzini (With /End With) come segue:
Codice: Seleziona tutto
            With ActiveSheet.Pictures.Insert(mPath & "\" & Target & ".jpg")
                .Top = Range(varTA).MergeArea.Top + 5
                .Left = Range(varTA).MergeArea.Left + 5
                .ShapeRange.LockAspectRatio = msoFalse
                .Height = Range(varTA).MergeArea.Height - 10
'                If .Width > Range(varTA).MergeArea.Width Then .Width = Range(varTA).MergeArea.Width - 10
                .Width = Range(varTA).MergeArea.Width - 10
                .Name = "FOTO_" & varTA
            End With

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: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 26/05/16 12:50

Grazie.
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 18/07/16 20:20

Ulteriore problema : devo nascondere alcune righe contenenti le immagini caricate con la macro precedente , con il comando "nascondi " mi succede che la riga scompare ma l'immagine resta e "salta" alla riga successiva, devo quindi cancellarla manualmente, ma , in questo caso, quando "scopro" nuovamente la riga non trovo più l'immagine.

donde sta l'inghippo ? p.f scioglietemi l'enigma altrimenti stanotte non dormo :oops:
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Anthony47 » 19/07/16 01:18

Oltre che nascondere la riga devi nascondere anche l'immagine.

Nelle mie macro io tendo ad assegnare un nome univoco alle foto, quindi basterebbe fare
Codice: Seleziona tutto
ActiveSheet.Pictures("NomeImmagine").Visible = False

Ma la tua prima macro non lo faceva, tant'e' che eri costretto a un ciclo For Each oOgg In ActiveSheet.Shapes / Next oOgg per individuare la foto da cancellare; per cui analogament saresti costretto ad un altro ciclo analogo per individuare la foto da nascondere:
Codice: Seleziona tutto
                For Each oOgg In ActiveSheet.Shapes
                    If oOgg.Top - 4.5 = Target.Top Then    '***
                        oOgg.Visible=False
                        Exit For
                    End If
                Next oOgg

Nell'istruzione marcata *** ovviamente invece di "Target" devi far riferimento alla riga che vorresti cancellare.

Userai .Visible=True per ripristinare la visibilita' dell'immagine

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: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 19/07/16 05:41

Ok,però tieni conto che :
1) il nome dell'immagine cambia di volta in volta e non è mai uguale,
2) anche le righe( disposte su fogli diversi) hanno riferimenti variabili, in pratica con "nascondi" le vorrei togliere dalla stampa, ma a fine anno - per es . le "scopro" ottenendo il resoconto totale dell'intero anno.

Forse è possibile agganciare la macro a due ulteriori colonne presenti nel foglio nella quali l'operatore inserisce una X di riferimento, rispettivamente nelle colonne K ed M , queste colonne sono univoche, pur cambiando il riferimento di riga ( e di foglio).
In pratica quando inserisco la X nella colonna K ( e solo in questa) è come se autorizzassi la scomparsa della riga. Cosa ne dici , è di aiuto oppure complica la cosa ? Ovviamente con Scopri devo rivedere il tutto.
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 19/07/16 10:44

Ps . la macro principale che utilizzo è la seguente:

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim UR As Long, R As Long, I As Long, mPath As String, mFoto As String
    Dim oOgg As Shape, SH As Sheets
    If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then
        MsgBox "Operare solo su una cella"
        Exit Sub
    End If
    If Target <> "" Then
        UR = Range("E" & Rows.Count).End(xlUp).Row ' Ultima riga con dati
        If Not Intersect(Target, Range("E3:E" & UR)) Is Nothing Then
            mPath = "C:\Users\gianca\Documents\Storico uscite\immagini" ' <<===== QUI scrivi il percorso ove hai le tue foto
            mFoto = Target
            If Dir(mPath & "\" & mFoto & ".jpg") <> "" Then ' Si controlla se la foto esiste
                Application.ScreenUpdating = False
                For Each oOgg In ActiveSheet.Shapes
                    If oOgg.Top - 4.5 = Target.Top Then
                        oOgg.Delete ' Si cancella l'immagine esistente
                        Exit For
                    End If
                Next oOgg
                With ActiveSheet.Pictures.Insert(mPath & "\" & mFoto & ".jpg")
                    .Top = Target.Offset(0, 1).Top + 5
                    .Left = Target.Offset(0, 1).Left + 5
                    .Height = Target.Offset(0, 1).Height - 10
                    .Width = Target.Offset(0, 1).Width - 10
                End With
                Application.ScreenUpdating = True
            Else
                MsgBox "Immagine non trovata" ' <<====== QUI scrivi il messaggio che vuoi sia inviato
            End If
        Else
            MsgBox "Scrivere un numero di foto nella cella della colonna  'E'"
        End If
    Else
        For Each oOgg In ActiveSheet.Shapes
            If oOgg.Top - 4.5 = Target.Top Then
                oOgg.Delete ' Si cancella l'immagine esistente
                Exit For
            End If
        Next oOgg
    End If
End Sub
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Anthony47 » 20/07/16 23:28

Se non vuoi assegnare un nome noto alle immagini che inserisci allora userai il loop per nasconderle, come detto nel mio messaggio precedente (io continuero' a suggerire di assegnare un nome).
Per nascondere le righe, penso che vada bene l'idea di mettere un flag in una colonna che normalmente dovrebbe essere vuota, e poi con un loop dove trovi il flag sai che devi:
-nascondere la riga
-nascondere l'immagine che ha il top pari al top di cella + 4.5

Per scoprire righe e immagini rifarai il loop, e dove trovi il flag sai che devi:
-scoprire la riga
-scoprire l'immagine che ha il top pari al top di cella + 4.5
-cancellare il flag della riga

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: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 21/07/16 12:53

Ok il ragionamento che hai fatto è chiaro, però il flag è posizionato sulla stessa riga che devo nascondere, quindi una volta nascosto ... che faccio ? Normalmente vedo se c'è un "buco " nella numerazione delle righe e quindi applico "scopri riga" , ma con VBA? forse mi sto inutilmente complicando le cose.
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Gianca532011 » 21/07/16 17:53

Risolto, semplicemente quando carico le immagini nella mia cartella ne modifico le Proprietà (tasto dx) a:
- selezionare "Proprietà",
- quindi Sposta e ridimensiona con le celle

Cosi facendo "nascondi e scopri" funzionano perfettamente sia con la riga che, soprattutto, con l'immagine.
Non è automatica ma va bene cosi.
Giancarlo
win 7 pro- Office 2013 Ita
Gianca532011
Utente Senior
 
Post: 130
Iscritto il: 27/05/11 10:18

Re: inserimento immagini in fogli diversi

Postdi Anthony47 » 21/07/16 22:24

Sposta e ridimensiona con le celle!
E' decisamente piu' semplice che Nascondere anche le immagini.

Puoi impostare questa proprieta' al caricamento dell'immagine aggiungendo al tuo codice questa riga in questa posizione:
Codice: Seleziona tutto
                    .Width = Target.Offset(0, 1).Width - 10
                    .Placement = xlMoveAndSize      '<<< AGGIUNGERE
                End With

Quanto al discorso del flag, tieni presente che in un loop normale leggi sia il contenuto delle celle visibili che di quelle nascoste; ma usando "Sposta e ridimensiona con le celle" non hai piu' bisogno di controllare le singole righe per espandere le righe, e puoi ripiegare su qualcosa come
Codice: Seleziona tutto
    Rows("1:1000").Hidden = False
    Range("K:K").ClearContents
(ho immaginato che il flag sia in colonna K)

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: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "inserimento immagini in fogli diversi":

Immagini
Autore: aleyandro
Forum: Sistemi Operativi Windows
Risposte: 5
Immagini cancellate
Autore: endryu77
Forum: Software Windows
Risposte: 7

Chi c’è in linea

Visitano il forum: Marius44 e 5 ospiti