È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

vedere le foto su excel

Ultimo Aggiornamento: 24/09/2016 16:09
Post: 65
Registrato il: 25/03/2014
Città: AGEROLA
Età: 31
Utente Junior
2013
OFFLINE
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?

Post: 2.257
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Veteran
Excel 365
OFFLINE
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
Post: 739
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
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
Post: 65
Registrato il: 25/03/2014
Città: AGEROLA
Età: 31
Utente Junior
2013
OFFLINE
23/09/2016 10:23

Post: 66
Registrato il: 25/03/2014
Città: AGEROLA
Età: 31
Utente Junior
2013
OFFLINE
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....
Post: 67
Registrato il: 25/03/2014
Città: AGEROLA
Età: 31
Utente Junior
2013
OFFLINE
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]
Post: 740
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
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
Post: 68
Registrato il: 25/03/2014
Città: AGEROLA
Età: 31
Utente Junior
2013
OFFLINE
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...

Post: 741
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
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
Post: 742
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
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
Post: 69
Registrato il: 25/03/2014
Città: AGEROLA
Età: 31
Utente Junior
2013
OFFLINE
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?
Post: 744
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
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
Post: 70
Registrato il: 25/03/2014
Città: AGEROLA
Età: 31
Utente Junior
2013
OFFLINE
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..
Post: 745
Registrato il: 06/04/2013
Utente Senior
2010
OFFLINE
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
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 06:02. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com