Excel Forum Per condividere esperienze su Microsoft Excel

vedere le foto su excel

  • Messaggi
  • OFFLINE
    Danilo1993
    Post: 65
    Registrato il: 25/03/2014
    Città: AGEROLA
    Età: 31
    Utente Junior
    2013
    00 23/09/2016 09:58
    Buongiorno,
    Sul desktop ho una cartella di 42585 fotografie, rinominate in base ad un numero di matricola presente all'interno di un file Excel.

    La riga che contiene questo numero di matricola ha anche altri dati , suddivise in varie colonne, che a me interessano.

    Perciò sto provvedendo di creare una maschera, su Excel e no un form di vba, dove vengono sistemati le varie informazioni sul file e vorrei che quando sto prendendo in considerazione quel numero di matricola tramite una qualsiasi cosa mi cerchi la fotografia giusta presente in quelle 42585 che ho sul desktop.

    Per ogni matricola posso avere da un minimo di 1 fino a 4 fotografie.

    la mia idea era quella di inserire 4 picture.box ma penso che fin quando ho la fotografia lui me la trova ma se non dovessi averla mi creerà un errore. Come devo fare?

  • ONLINE
    alfrimpa
    Post: 2.257
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Veteran
    Excel 365
    00 23/09/2016 10:05
    Beh potresti creare un file immagine (.bmp, jpg etc.) con la didascalia "Immagine non trovata" da caricare nel controllo immagine qualora la foto non venga trovata.

    Alfredo
  • OFFLINE
    dodo47
    Post: 739
    Registrato il: 06/04/2013
    Utente Senior
    2010
    00 23/09/2016 10:18
    Ciao
    fossi in te eviterei l'utilizzo delle picture.box.

    Piuttosto, anche se non so quale sia il tuo schema che credo occupi più di una riga per matricola, potresti fare una cosa tipo allegato.

    Dove, nel momento che inserisci la matricola ti vai a cercare nella tua cartella foto le relative immagini che "credo" siano nominate in modo standard per tutti, cioè: matricola_1 - matricola_2 - matricola_3 - matricola_4

    La ricerca la fai strutturando nella macro un loop di ricerca con variabile matricola_n che, se trovata la inserisce adattandola al primo dei 4 riquadri a disposizione che altro non sono che celle unite

    Qualcosa del tipo:

    ....
    If Dir(mPath & mFoto & ".jpg") <> "" Then
       With ActiveSheet.Pictures.Insert(mPath & mFoto & ".jpg")
    ....
    ....


    saluti
    [Modificato da dodo47 23/09/2016 10:25]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Danilo1993
    Post: 65
    Registrato il: 25/03/2014
    Città: AGEROLA
    Età: 31
    Utente Junior
    2013
    00 23/09/2016 10:23
  • OFFLINE
    Danilo1993
    Post: 66
    Registrato il: 25/03/2014
    Città: AGEROLA
    Età: 31
    Utente Junior
    2013
    00 23/09/2016 10:28
    i file sono un formato standard: matricola_f1 ( se è foto1, f2 se è foto 2, f3 se è foto 3, f4 se è foto 4) ed il formato è .jpg.

    Se come mi consiglia dodo di usare la funzione loop gli dovrei mettere una macro giusto?

    una delle pecche è anche che per ogni matricola non è detto che ho l'ordine foto 1 e foto2 oppure foto 1, foto2 e foto tre o ancora foto1, foto2, foto 3 e foto 4 ma posso avere anche ordini tipo: foto 1 e foto 4, foto 2 e foto 4 ecc, foto 1 e foto 3 ecc....
  • OFFLINE
    Danilo1993
    Post: 67
    Registrato il: 25/03/2014
    Città: AGEROLA
    Età: 31
    Utente Junior
    2013
    00 23/09/2016 10:35
    Re:

    Qualcosa del tipo:

    ....
    If Dir(mPath & mFoto & ".jpg") <> "" Then
       With ActiveSheet.Pictures.Insert(mPath & mFoto & ".jpg")
    ....
    ....


    saluti



    Nel codice che mi hai inviato dovrei dichiarare delle variabili dove path è l'indirizzo dove è presnte la fotografia, mfoto la cella dove è presente il numero di matricola del contatore, dovrei aggiungere n foto per il numero della foto... giusto?ù

    e quando non trova la foto mi darà errore? ho letto su internet anche la funzione go error


    Sorry mi sono perso, come faccio ad inserire quella macro nella cella??

    [Modificato da Danilo1993 23/09/2016 10:37]
  • OFFLINE
    dodo47
    Post: 740
    Registrato il: 06/04/2013
    Utente Senior
    2010
    00 23/09/2016 12:18
    Ciao

    Prima di fornirti un esempio, ho bisogno di sapere le seguenti cose:

    1) se ha solo 2 foto si chiamano: matr_f1 - matr_f2 ??

    2) nel tuo foglio gestisci una matricola per volta o hai diversi range 1 x matricola ? Mi fornisci lo schema per favore?

    Nel caso tu abbia più matricole nel foglio, quando ne esamini una, quella precedentemente esaminata deve riportare le foto?
    (Attenzione che se è così si potrebbe riempire il foglio di immagini che pesano abbastanza.

    Per venire alle tue richieste:

    La macro potresti inserirla nell'evento change del foglio, cioè appena scrivi la matricola nella cella e dai invio, vengono caricate le foto.

    Oppure con un pulsante a parte: dimmelo tu.

    Non va in errore in quanto c'è un IF che dice: se la foto c'è la carichi, altrimenti no.

    Ovviamente sono da alimentare delle variabili

    saluti
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Danilo1993
    Post: 68
    Registrato il: 25/03/2014
    Città: AGEROLA
    Età: 31
    Utente Junior
    2013
    00 23/09/2016 13:42
    se ha solo due foto può essere una qualsiasi delle quattro:, dove f sta a foto e il numero il numero della foto:
    f1-f2
    f3-f4
    f1-f4
    f1-f3
    f2-f3
    f2-f4

    gestisco una matricola per volta... se nel campo matricola ( che ora ti allego il file di esempio) ha la matricola 10 lui mi dovrà trovare la fotografia con matricola 10...

    la funzione loop è simile alla funzione for?
    Non riesco a farla funzionare per questo chiedevo...

  • OFFLINE
    dodo47
    Post: 741
    Registrato il: 06/04/2013
    Utente Senior
    2010
    00 23/09/2016 16:54
    Ciao
    ultime cose

    -Nel tuo schema devi fare in modo che le colonne che occupano lo spazio delle foto, siano sempre dello stesso numero, cioè ogni foto occupa 3 colonne per esempio, altrimenti hai un problema. Ho adattato l'allegato inserendo una colonna.
    Inoltre nelle tue macro di cambio matricola ho inserito la routine.

    -le foto devono andare nello spazio indicato?
    Mi spiego meglio: se ho solo foto1 e foto3 devono andare nello spazio 1 e 3 (preferibile) oppure nello spazio 1 e 2 ?

    Comunque ti allego uno zip.
    estrai il contenuto (miofile.xlsm e cartella foto) e lo copi in una cartella chiamata c:\MiaCartella

    Apri MioFile.....

    saluti
    [Modificato da dodo47 23/09/2016 17:41]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    dodo47
    Post: 742
    Registrato il: 06/04/2013
    Utente Senior
    2010
    00 23/09/2016 17:40
    Ciao
    non riesco a sostituire il download precedente.

    usa questo

    saluti
    [Modificato da dodo47 23/09/2016 17:41]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Danilo1993
    Post: 69
    Registrato il: 25/03/2014
    Città: AGEROLA
    Età: 31
    Utente Junior
    2013
    00 23/09/2016 19:13
    Dodo è perfetto!!!!! il codice è troppo complesso per me, ho provveduto a sostituire solo il percorso dove deve andare a prendere le foto... se volessi cliccarci sopra ed ingrandirla è possibile?
  • OFFLINE
    dodo47
    Post: 744
    Registrato il: 06/04/2013
    Utente Senior
    2010
    00 23/09/2016 20:19
    Ciao
    se ti interessa me lo dici che te lo spiego in dettaglio il codice.

    per l'ingrandimento: a mano, cioè ci clicchi e trascini il bordo (inferiore destro nel tuo caso)

    se le vuoi più grandi per default devi decidere quante righe e quante colonne devono occupare le foto. Ora occupano 3 colonne per 7 righe ed intervenire sia sul foglio che sulla macro....

    MA, senza fare quanto sopra, prova questo:

    - se aumenti l'altezza della riga 35, e ricarichi la matricola, tutte le foto si ingrandiscono in altezza

    - se aumenti la larghezza delle colonne C - F - I - L, e ricarichi la matricola, tutte le foto si ingrandiscono in larghezza.

    Se inserisci colonne/righe c'è da rimettere le mani alla macro

    Spero sia chiaro

    saluti
    [Modificato da dodo47 24/09/2016 10:24]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Danilo1993
    Post: 70
    Registrato il: 25/03/2014
    Città: AGEROLA
    Età: 31
    Utente Junior
    2013
    00 24/09/2016 11:20
    Se puoi spiegarmelo il codice perché è spettacolare, ci stavo da tempo a cercarlo di capire ma nulla..io avevo pensato di registrare una macro mentre il allargavo l'immagine però dopo non sapevo dove inserirla perché non c'è srritto inseririsci l'immagine da qui a qui ecc..
  • OFFLINE
    dodo47
    Post: 745
    Registrato il: 06/04/2013
    Utente Senior
    2010
    00 24/09/2016 16:09
    Ciao
    ti scrivo la macro commentata. Se la incolli al posto di quella che già hai, vedrai i commenti istruzione x istruzione (o quasi) in quanto assumono un colore diverso dalle istruzioni vere e proprie.

    Comunque un sano debug ti aiuterebbe a capire meglio!!

    Sub MostraFoto()
    Dim Pic As Object, mPath As String, mFoto As String
    Dim mFoto1 As String, i As Integer, k As Integer, c As Integer
    Application.ScreenUpdating = False
    'se non c'è una matricola in D11 esce
    If Range("D11") = "" Then Exit Sub
    
    '--->valorizza in mPath il percorso delle foto e in mFoto la matricola
    mPath = "C:\MiaCartella\Foto"
    mFoto = Range("D11")
    '<----
    
    '--->con questo ciclo alimento un contatore (k) se esiste almeno una foto
    k = 0
    mFoto1 = mFoto
    For i = 1 To 4
        mFoto1 = mFoto & "_f" & i ' ad ogni loop mFoto1 è uguale _
                                    a mFoto, cioè matricola, + f + i, quindi matricola_f1 _
                                    matricola_f2 ecc ecc
        
        If Dir(mPath & "\" & mFoto1 & ".jpg") <> "" Then '
            k = k + 1
        End If
        mFoto1 = mFoto
    Next i
    '<---
    
    '--->se alla fine k=0 non ci sono foto per quella matricola: esce
    If k = 0 Then
        MsgBox "Nessuna Foto"
        Exit Sub
    End If
    '<---
    
    '---> ripeto il ciclo
    c = 1 'colonna inizio inserimento foto
    mFoto1 = mFoto
    For i = 1 To 4
        mFoto1 = mFoto & "_f" & i
        If Dir(mPath & "\" & mFoto1 & ".jpg") <> "" Then ' se la foto esiste
            Cells(29, c).Select ' seleziono cella dove inserire la 1^ foto
            With ActiveSheet.Pictures.Insert(mPath & "\" & mFoto1 & ".jpg") ' inserisco foto
                .ShapeRange.LockAspectRatio = msoFalse ' impedisco che la foto _
                                                         si dimensioni proporzionalmente
                'in queste variabili metto i valori di dimensionamento delle foto
                mTop = ActiveCell.Top ' inizia da (riga 29)
                mLeft = ActiveCell.Left 'a sinistra si allinea con la cella selezionata _
                                         cioè: riga 29, colonna C
                                         
                'altezza: pari al range (cella attiva:cella attiva + 6 righe) _
                 per esempio: (A29:A35)
                mHeight = Range(ActiveCell.Address & ":" & ActiveCell.Offset(6).Address).Height
                
                'largezza: pari al range (cella attiva:cella attiva + 2 colonne) _
                 per esempio: (A29:C29)
                mWidth = Range(ActiveCell.Address & ":" & ActiveCell.Offset(, 2).Address).Width
                
                'assegno tali valori alla foto inserita
                .Top = mTop ' inizia da
                .Left = mLeft ' a sinistra
                .Width = mWidth ' altezza
                .Height = mHeight ' larghezza
            End With
        End If
        mFoto1 = mFoto 'in mFoto1 ci rimetto la matricola in quanto _
                        mFoto1 può contenere: matricola_f1 - matricola_f2 ecc ecc
        
        c = c + 3 ' passo alla successiva colonna
    Next i
    '<---
    
    Application.ScreenUpdating = True
    Cancel = True
    End Sub


    saluti
    [Modificato da dodo47 24/09/2016 16:10]
    Domenico
    Win 10 - Excel 2016