| | 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 | |
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 |
|
|