Condividi:        

FILE PER INSERIMENTO AUTOMATICO DI 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

FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi commerciale » 28/02/14 10:17

Buongiorno a tutti,
Tempo fa ho creato (sempre con l’aiuto di pc-facile) un file excel per la creazione di offerte fotografiche; Siccome volevo che fosse molto “elastico” l’ho suddiviso in 2 parti: Nella prima parte si inseriscono i parametri (dove trova i nomi delle immagini (NB. IL FORMATO IMPOSTATO E’ .JPG), il percorso da cui pesca le foto, dove posizionare le foto, altezza e larghezza, esportazione del file) ecc . La seconda parte è una normale pagina di excel dove la VBA deve inserire le foto.

Avrei la necessità di fare alcune modifiche, ringrazio anticipatamente chi mi darà una mano:

1. Comportamenti diversi con l’uso del file con excel ’97 e excel ’10:
Comportamento con excel ’97: Incolla le foto al file excel con un notevole aumento della dimensione del file
Comportamento con excel ’10: Incolla un collegamento delle foto al file excel con lo svantaggio che, nel caso si utilizza su diversi computer o si allega ad una mail, le foto sono visibili solo sul computer originario.
Non Posso dirvi come funziona su excel ’13 in quanto non testato.

LA MIA ESIGENZA E’ CHE ALLEGHI FISICAMENTE LE FOTO CON QUALSIASI VERSIONE DI EXCEL SI USI.

2. Dimensioni del file “spropositata”.
In alcuni casi utilizzo il file importando centinaia di foto di medie dimensioni (250 kb cadauna circa).
Come potete ben immaginare che 100 foto rendono il file pesante, in particolare per l’invio tramite e-mail. Trasformare il file in pdf è una possibilità ma la soluzione che mi serve!

LA MIA ESIGENZA E’ DI AGGIUNGERE UNA FUNZIONE CHE “RIDIMENSIONI” LE IMMAGINI, preferirei che questa opzione sia su richiesta e non a prescindere...

3. Funzione esporta:
A volte va in errore e in loop, potete dare un’occhiata se ha dei problemi e di che tipo?

Grazie ancora

File (70 KB totali)
INSERIMENTO IMMAGINE DA FILE EXCEL versione 5.5.xls

Link di download
http://we.tl/HCSOC8pCSN
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Sponsor
 

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi ricky53 » 28/02/14 13:13

Ciao,
ho provato con il 2003 e le foto vengono inserite fisicamente nel file
Invece con il 2013 vengono inserite ma con un parametro che corrisponde a "Inserisci e collega" (è una opzione presente nel 2010 e 2013 , forse anche nel 2007 che si può modificare inserendo manualmente le immagini) al momento non ho trovato come si possa, da codice VBA, modificare tale parametro ... cerco qualcosa in rete.


In merito al "punto 3" perchè gestisti l'errore 1004 in quel modo?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi commerciale » 28/02/14 13:51

In merito al "punto 3" perchè gestisti l'errore 1004 in quel modo?


E' una bella domanda... il file l'avevo fatto nel 2011 (vedi topic: viewtopic.php?f=26&t=93054&start=20), all'epoca non mi sembra che mi erano state fatte riserve in merito...
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi ricky53 » 04/03/14 11:36

Ciao,
ho fatto varie ricerche ma non ho trovato come impostare, da VBA, il parametro che consente l'inserimento "FISICO" delle immagini nel file excel.
Certo rimane comunque il problema di "rendere piccole" (in termini di spazio occupato) le immagini cosa che da VBA non so fare ma ... non penso sia possibile farlo.

Non vedo altro modo (scontato) di ridimensionare le immagini prima di inserirle nel file excel ma sempre con il limite del punto precedente.


Mi spiace per non averti potuto aiutare ad arrivare ad una soluzione.


Spero che qualche altro utente mi smentisca e ti fornisca una soluzione, tramite VBA, a tutte e due le questioni.

Alla prossima
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi commerciale » 05/03/14 09:01

Grazie mille per averci provato!
Vediamo se qualche altro utente sa dare un'aiuto o una soluzione alternativa.

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

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi Anthony47 » 06/03/14 01:02

Del fatto che in XL2010 le immagini non vengono integrate ma linkate ne parlano sui forum Microsoft, dove si dice "e' cambiato il modello degli oggetti" ma senza mai un link a un articolo Microsoft che descrivesse queste modifiche e le conseguenze.
Comunque la soluzione sembra essere usare ad esempio
Codice: Seleziona tutto
ActiveSheet.Shapes.AddPicture "C:\Users\UTENTE \Documents\MyPics\CanonPS\IMG_6313.JPG", False, True, 100, 50, 400, 300

False indica che l' immagine non e' linkata al sorgente; True indica che l' immagine sara' salvata nel documento, 100 indica la posizione left (in pixel, rispetto alla finestra del foglio), 50 indica la posizione top, 400 indica la larghezza, 300 l' altezza.

Volendo mantenere il rapporto delle dimensioni dell' immagine e il comportamento dell' istruzione "ActiveSheet.Pictures.Insert" suggerirei questa sequenza:
Codice: Seleziona tutto
'Istruzioni per 2003
Range("L3").Select
ActiveSheet.Pictures.Insert("C:\Users\UTENTE\Documents\MyPics\CanonPS\IMG_6313.JPG").Select
'Aggiunte per compatibilita' 2010:
myW = Selection.ShapeRange.Width * 0.5    'calcola larghezza (0.5 e' arbitrario)
myH = Selection.ShapeRange.Height * 0.5   'calcola l' altezza (idem)
Selection.ShapeRange.Delete         'cancella la prima immagine
xPos = Range("L3").Left             'calcola la posizione left
yPos = Range("R3").Top              'calcola la posizione top
'inserisce per compatibilita' 2010:   
ActiveSheet.Shapes.AddPicture("C:\Users\UTENTE\Documents\MyPics\CanonPS\IMG_6313.JPG", False, True, xPos, yPos, myW, myH).Select

Funziona sia su XL2003 che XL2010
Questa sequenza (e' un esempio da usare come spunto) consente di posizionare l' immagine nella posizione voluta, consente di ridimensionarla (nell' esempio ho usato un fattore fisso; ma con qualche istruzione in piu' si puo' fissare direttamente altezza o larghezza, mantenendo il rapporto alt-largh; oppure impostare sia l' altezza che larghezza se il rapporto non e' un problema), lasciando l' immagine selezionata (ad esempio se le va assegnato un nome).

Una ulteriore differenza l' ho notata sul problema della dimensione:
-XL2003 salva l' immagine sempre nelle dimensione originale, anche se sul foglio essa e' rimpicciolita; bisogna poi fare Tasto dx su una immagine, Formato forma, tab Immagine, premere Comprimi, scegliere una risoluzione, scegliere (o meno) l' opzione "Applica a tutte le immagini del documento", premere Ok. A questo punto l' immagine e' memorizzata in modo compresso e occupera' meno spazio.
-XL2010 salva l' immagine gia' nella dimensione con cui essa e' inserita nel foglio; quindi se ho usato un fattore di riduzione 0.5*0.5 (come nell' esempio sopra) l' immagine occupera' il 25% della dimensione originale. La sequenza di compressione (disponibile in Menu /Strumenti immagine, Formato, Regole, Comprimi immagine) e' comunque utilizzabile se si vuole scegliere una risoluzione diversa da quella di default.

Spero che trovi sufficienti spunti.

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

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi commerciale » 12/03/14 12:28

Lo spunto direi che è fantastico ma mi sono arenato..

Riepilogando: Utilizzando Excel2010 io parto da questo Vba che inserisce le immagini con un link ma non integra l'immagine:
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
StdDir = Sheets("Parametri").Range("B3").Value: If Right(StdDir, 1) <> "\" Then StdDir = StdDir & "\"
'DefPic = Sheets("Parametri").Range("B4").Value 'Se si decide di usare foto esterna 'Dir e filename da usare in mancanza di foto
Jolly = Sheets("Parametri").Range("B5").Value   'Per decidere a quante colonne a destra
Alto = Sheets("Parametri").Range("B7").Value 'Altezza immagine e colonna
Largo = Sheets("Parametri").Range("B8").Value 'Larghezza immagine e colonna
'Columns(Jolly + 1).ColumnWidth = (Largo) / 5.7 '* Da rivedere...
'Rows.RowHeight = (Alto) + 4
Range(ListaF).Offset(0, Jolly).ColumnWidth = (Largo) / 5.7  'Qui autosistema la grandezza colonna
'Range(ListaF).Range("A1").Offset(0, Jolly).ColumnWidth = (Largo) / 5.7 'Originale suggerito da pc facile
Range(ListaF).RowHeight = (Alto) + 4                                    'Qui autosistema la larghezza riga
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 (CELLA.Text <> "") Then
        If Dir(StdDir & CELLA.Text & ".jpg") = "" Then
            'ActiveSheet.Pictures.Insert(DefPic).Select 'Se si decide di usare foto esterna
            Sheets("Parametri").Shapes("NODISPO").Copy  'AGGIUNGI
            ActiveSheet.Paste                'AGGIUNGI
        Else
            ActiveSheet.Pictures.Insert(StdDir & CELLA.Text & ".jpg").Select
        End If
        Selection.Name = "FOTO_DA_" & CELLA.Address(0, 0)
        Selection.ShapeRange.Height = (Alto)
        If Selection.ShapeRange.Width > (Largo) Then
            Selection.ShapeRange.Width = (Largo)
        End If
   
        'PER POSIZIONARE L'IMMAGINE AL CENTRO DELLA CELLA CHE HO DECISO:
        Selection.ShapeRange.Left = CELLA.Offset(0, (Jolly)).Left - Selection.ShapeRange.Width / 2 + CELLA.Offset(0, (Jolly)).Width / 2
        Selection.ShapeRange.Top = CELLA.Offset(0, 0).Top - Selection.ShapeRange.Height / 2 + CELLA.Offset(0, (Jolly)).Height / 2
    End If
    CELLA.Select
  End If
Next CELLA
End Sub


Ho fatto le seguenti modifiche (metto solo la parte che ho modificato):
Codice: Seleziona tutto
 Else
            'Istruzioni per EXCEL2003
            ActiveSheet.Pictures.Insert(StdDir & CELLA.Text & ".jpg").Select
            'Aggiunte per compatibilita EXCEL2010:
            myW = Selection.ShapeRange.Width * 1    'calcola larghezza (0.5 e' arbitrario)
            myH = Selection.ShapeRange.Height * 1   'calcola l' altezza (idem)
            Selection.ShapeRange.Delete         'cancella la prima immagine
            xPos = 0             'calcola la posizione left
            yPos = 0              'calcola la posizione top
            'inserisce per compatibilita EXCEL2010:
            ActiveSheet.Shapes.AddPicture(StdDir & CELLA.Text & ".jpg", False, True, xPos, yPos, myW, myH).Select
           


Sicuramente ho sbagliato molte cose... Infatti non mi mantiene più il rapporto altezza/larghezza...
Segnalo inoltre, salvo che non sia causato da un mio errore, che non riscontro il ridimensionamento della dimensione dell’immagine se metto un fattore di riduzione come nel vostro esempio 0.5*0.5.
Grazie anticipato per l'aiuto che mi darete
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi Anthony47 » 12/03/14 12:59

Per prova inseruisci questa istruzione in questa posizione:
Codice: Seleziona tutto
            myW = Selection.ShapeRange.Width * 1    'calcola larghezza (0.5 e' arbitrario)
            myH = Selection.ShapeRange.Height * 1   'calcola l' altezza (idem)
Msgbox(myW & " -- " & myH)            '<<<  AGGIUNGERE PER TEST
            Selection.ShapeRange.Delete         'cancella la prima immagine

Poi fai in modo da inserire una immagine e fai uno screenshot (vedi viewtopic.php?f=26&t=80395#p466013) in cui si vede il testo dell' immagine e il messaggio; dopo l' Ok al messaggio rifai lo screenshot in cui si vede l' immagine finale inserita e con il rapporto altezza/larghezza deformato. Pubblica poi i due screenshot.

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

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi commerciale » 12/03/14 14:22

Ecco.... ho messo una moneta... non ci posson esser dubbi di come è fatta...


Immagine

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

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi Anthony47 » 12/03/14 15:25

Il problema e' nel ridimensionamento successivo all' inserimento; invece di
Selection.ShapeRange.Height = (Alto)
If Selection.ShapeRange.Width > (Largo) Then
Selection.ShapeRange.Width = (Largo)
End If

Usa
Codice: Seleziona tutto
        Selection.ShapeRange.ScaleHeight (Alto / myH), msoFalse, msoScaleFromTopLeft
        If Selection.ShapeRange.Width > (Largo) Then
            Selection.ShapeRange.ScaleHeight (Largo / myW), msoFalse, msoScaleFromTopLeft
        End If

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

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi commerciale » 12/03/14 15:38

Ciao,
Ho provato e riprovato ma la moneta viene ancora più allungata....
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi Anthony47 » 12/03/14 15:59

E' l' euro che si e' allargato troppo...

In effetti ambedue quei msoFalse dovevano essere msoTrue; comunque aggiungi anche quest' altra che rinforza il concetto:
Codice: Seleziona tutto
        Selection.ShapeRange.LockAspectRatio = msoTrue      '<< ULTERIORE AGGIUNTA
        Selection.ShapeRange.ScaleHeight (Alto / myH), msoTrue, msoScaleFromTopLeft
        If Selection.ShapeRange.Width > (Largo) Then
            Selection.ShapeRange.ScaleHeight (Largo / myW), msoTrue, msoScaleFromTopLeft
        End If

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

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi commerciale » 12/03/14 16:55

Ciao,
Ora la proporzione viene mantenuta ma ci sono ancora un pochino di cose da sistemare (alcune immagini sbordano dalla cella, ridimensionamento delle immagini per "pesare meno", ecc)
Mi faccio sentire appena ho il tempo di fare le dovute prove.

Grazie mille per il momento!!
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi commerciale » 26/03/14 17:40

Buongiorno!
Eccomi ancora qui perché... non so proprio che pesci pigliare...
Con le ultime modifiche ho parecchi problemi che non so come sistemare:
- Non tutte le immagini vengono ridimensionate correttamente
- L'immagine "non disponibile" non esce più al posto giusto
- Non riesco a risolvere il problema di pesantezza...

Allego il file precedente (versione 5.5) e quello modificato (versione 6.0) + le foto che nella versione 5.5 linka ma non inserisce. Ho evidenziato nel 6.0 i tipi di errori riscontrati (spero non ce ne siano altri...).

Grazie anticipato a chi saprà aiutarmi!!

File (4 MB totali)
ABB00010A.jpg
ACC02818A.jpg
ATT02900A.jpg
ATT03184A.jpg
INSERIMENTO IMMAGINE DA FILE EXCEL versione 5.5 PROVA FOTO.xls
INSERIMENTO IMMAGINE DA FILE EXCEL versione 6.0.xls
Link di download
http://we.tl/ob2Clo2XfU
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi Anthony47 » 27/03/14 16:05

Humm...
Effettivamente l' istruzione ActiveSheet.Pictures.Insert quando inserisce la picture non la inserisce nel formato originale ma apparentemente la ridimensiona; questo fa a pungni con il successivo ridimensionamento, che e' calcolato rispetto alla falsa dimensione originale ma applicato alla vera dimensione originale. Inoltre ambedue le istruzioni di ridimensionamento erano applicati all' altezza (ScaleHeight). Infine il ridimensionamento non era da applicare all' immagine "Non disponibile".
Vista la difficolta' di governare il modo in cui "ridimensiona" l' immagine allora il calcolo lo facciamo prima cosi' l' inserimento successivo lo possiamo fare gia' con le dimensioni effettive.
Le modifiche riguardano la sezione If (CELLA.Text <> "") Then /End If, che ora ha questo aspetto:
Codice: Seleziona tutto
    If (CELLA.Text <> "") Then
        If Dir(StdDir & CELLA.Text & ".jpg") = "" Then
            'ActiveSheet.Pictures.Insert(DefPic).Select 'Se si decide di usare foto esterna
            Sheets("Parametri").Shapes("NODISPO").Copy  'AGGIUNGI
            ActiveSheet.Paste                'AGGIUNGI
        Else
            'Istruzioni per EXCEL2003
            ActiveSheet.Pictures.Insert(StdDir & CELLA.Text & ".jpg").Select
            'Aggiunte per compatibilita EXCEL2010:
            myW = Selection.ShapeRange.Width * 1    'calcola larghezza (0.5 e' arbitrario)
            myH = Selection.ShapeRange.Height * 1   'calcola l' altezza (idem)
'MsgBox (myW & " -- " & myH)           '<<<  AGGIUNGERE PER TEST
            Selection.ShapeRange.Delete         'cancella la prima immagine
            xPos = 0             'calcola la posizione left
            yPos = 0              'calcola la posizione top
            'inserisce per compatibilita EXCEL2010:
            'Calcolo prima le dimensioni di inserimento
            www = largo
            hhh = alto
            If (myH / alto) > (myW / largo) Then www = myW * hhh / myH
            If (myW / largo) > (myH / alto) Then hhh = myH * www / myW
            ActiveSheet.Shapes.AddPicture(StdDir & CELLA.Text & ".jpg", False, True, xPos, yPos, www, hhh).Select
        End If
        Selection.Name = "FOTO_DA_" & CELLA.Address(0, 0)
        'eliminate qui le istruzioni per ridimensionare
       
        'PER POSIZIONARE L'IMMAGINE AL CENTRO DELLA CELLA CHE HO DECISO:
        Selection.ShapeRange.Left = CELLA.Offset(0, (Jolly)).Left - Selection.ShapeRange.Width / 2 + CELLA.Offset(0, (Jolly)).Width / 2
        Selection.ShapeRange.Top = CELLA.Offset(0, 0).Top - Selection.ShapeRange.Height / 2 + CELLA.Offset(0, (Jolly)).Height / 2
    End If

Questo per quanto riguarda la dimensione sul foglio.

Per il peso delle immagini la situazione e' invece confusa:
-ho creato tramite Microsoft Picture Manager una immagine ridotta della ABB00010A: originale occupa 624 KB per 926*217; ridotto occupa 553KB per 148*35 (dove e' finita la riduzione? Eppure in visualizzazione si vede che e' in bassissima risoluzione)
-idem con l' immagine ATT02900A: originale occupa 1043 KB per 3610*856; ridotto occupa 648KB per 1805*428 (questo quadra di piu')

Test A
Se cancello tutte le immagini dal foglio IMMAGINI, ilfile rimane da 36,8KB
Se inserisco la ATT02900A-small il file diventa (dopo il salvataggio) di 44,9KB
Se a mano allargo la dimensione dell' immagine (in modo che occupi le 4 celle B4:C5) il file diventa da 115KB, a momentanea dimostrazione della mia tesi che il file viene salvato coerentemente con la dimensione sul video)

Se inserisco la ATT0290A-originale, il file diventa di 1,05 MB (a immediata smentita del teorema del salvataggio file coerente con la dimensione a video; ma anche senza nessuna spiegazione del perche' il comportamento e' drasticamente diverso dal test precedente.
Se a mano ridimensiono l' immagine c' e' una modesta variazione della dimensione del file (che arriva a 1,06MB)
L' uso di Menu /Strumenti Immagine /Formato, Comprimi immagine non produce nessun effetto
Se torno alla ATT02900A-small, il file ritorna a 44,9 KB
Dimensione aggiungendo tutti gli altri disegni eccetto la ABB00010A, 134 KB
Dimensione aggiungendo la ABB00010A-small, 690 KB
Dimensione aggiungendo la ABB00010A-originale, 724 KB

Test B
AVEVO CREATO UNA COPIA del file iniziale, scegliendo (al momento del File /Salva con nome) in Strumenti l' opzione "Comprimi immagini..." con la spunta su Usa risoluzione documento (che in Menu /File /Opzioni /Impostazioni avanzate, sezione Dimensione e qualita' dell' immagine e impostato su 220 dpi) e ho ripetuto le prove:
Dimensione senza immagini 38,3 KB
Dimensione con ATT0290A-originale, 1,05 MB
Dimensione con ATT0290A-small, 46,5 KB
Dimensione aggiungendo tutti gli altri disegni eccetto la ABB00010A, 136 KB
Dimensione aggiungendo la ABB00010A-small, 692 KB
Dimensione aggiungendo la ABB00010A-originale, 726 KB

Da questi test sembrerebbe che ci sono delle immagini che sono "inclini" a farsi comprimere, altre che sono refrattarie.

Allora ho inserito in una nuova cartella alcune foto provenienti da un cellulare (risoluzione 3200*1800, circa 1,5 MB l' una), e ho ripetuto l' inserimento delle immagini.
Risultato: avendo inserito 5 foto a dimensioni (come da Parametri) di 50 *100 il file occupa 166 KB
Ripetendo l' inserimento a 100*200 il file occupa 442 KB
Riportando la dimensione a 50*100 il file ritorna a 166 KB

Queste prove sono state fatte sul file originale, e sembrerebbe dimostrare che alcune immagini sono disponibili a essere compresse, altre no; non sono un conoscitore dei formati immagine, quindi anche io mi chiedo perche' succedono queste cose, ma la risposta e' vecchia: Nescio, sed fieri sentio et excrucior
Prova con altre immagini...

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

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi commerciale » 29/03/14 10:55

Buongiorno e grazie mille!
Il ridimensionamento e posizionamento è ok, unica cosa è l'immagine "non disponibile" che non viene ridimensionata... E' possibile farci qualcosa?

Per il peso dell'immagine ho fatto svariate prove anche io e non ho riscontrato nessun risultato interessante... Però la prova "Se a mano allargo la dimensione dell' immagine (in modo che occupi le 4 celle B4:C5) il file diventa da 115KB, a momentanea dimostrazione della mia tesi che il file viene salvato coerentemente con la dimensione sul video)" io non la riscontro, rimane sempre uguale la dimensione del file...
Ho provato anche a lavorare qui:
myW = Selection.ShapeRange.Width * 1 'calcola larghezza (0.5 e' arbitrario)
myH = Selection.ShapeRange.Height * 1
Sostituendo 1 con 0.1 eccettera ma con risultati minimi non degni di nota...

A questo punto penso che l'unica soluzione sia lavorare alla fonte, cioè comprimere le immagini prima che siano "prelevate" dalla vba excel.

Qualcuno ha un programma gratuito da suggerire (devo aprire un altro post??)? ho trovato su internet Caesium ma non posso scaricarlo al momento, qualcuno lo conosce?
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi Anthony47 » 30/03/14 00:29

Quanto al peso delle immagini, l' opinione che mi sono fatta e' che le immagini per essere compresse devono rispettare un qualche standard (che io non conosco); le immagini che hai pubblicate in gran parte non rispettano questo standard.
Provando con immagini fresche di macchina, il comportamento e' stato come atteso (riduzione del peso a seguito di ridimensionamento; come da ultimo test nel mio post precedente).

Quindi prima di cercare la soluzione in uno strumento che non hai, prova anche tu con altre immagini prelevate direttamente da una macchina fotografica.

Quanto all' immagine standard che non si ridimensiona, succede perche' essa e' fuori dal ciclo di ridimensionamento.
Il mio suggerimento e' che rimetti l' immagine sul disco, insieme alle altre e utilizzi lo stesso criterio che ti era stato suggerito tempo fa (vedi viewtopic.php?f=26&t=93054):
Codice: Seleziona tutto
    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

Mappato nella macro corrente diventa:
Codice: Seleziona tutto
    If (CELLA.Text <> "") Then
        If Dir(StdDir & CELLA.Text & ".jpg") = "" Then
            ActiveSheet.Pictures.Insert(StdDir & "DEfaultPicture.jpg").Select  'L' IMMAGINE STANDARD
        Else
            ActiveSheet.Pictures.Insert(StdDir & CELLA.Text & ".jpg").Select
        End If
        myW = Selection.ShapeRange.Width * 1    'calcola larghezza (0.5 e' arbitrario)
        myH = Selection.ShapeRange.Height * 1   'calcola l' altezza (idem)
'MsgBox (myW & " -- " & myH)           '<<<  AGGIUNGERE PER TEST
        Selection.ShapeRange.Delete         'cancella la prima immagine
        xPos = 0             'calcola la posizione left
        yPos = 0              'calcola la posizione top
        'inserisce per compatibilita EXCEL2010:
        'Calcolo prima le dimensioni di inserimento
        www = largo
        hhh = alto
        If (myH / alto) > (myW / largo) Then www = myW * hhh / myH
        If (myW / largo) > (myH / alto) Then hhh = myH * www / myW
        If Dir(StdDir & CELLA.Text & ".jpg") = "" Then
            ActiveSheet.Shapes.AddPicture(StdDir & "DEfaultPicture.jpg", False, True, xPos, yPos, www, hhh).Select
        Else
            ActiveSheet.Shapes.AddPicture(StdDir & CELLA.Text & ".jpg", False, True, xPos, yPos, www, hhh).Select
        End If
    End If
Questo codice sostituisce tutta la la parte If (CELLA.Text <> "") /End If

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

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi commerciale » 31/03/14 11:05

Ho provato con immagini "normali" ed in effetti il ridimensionamento viene fatto in modo più significativo.
Però le foto che utilizzo sono quelle "non standard" e quindi per ridimensionarle devo fare in altro modo prima dell'acquisizione nel file excel.

Per quanto riguarda l'immagine standard non è possibile tenere l'immagine già presente nell'excel??
Ci ho provato pensando fosse semplice andando a sostituire
ActiveSheet.Shapes.AddPicture(StdDir & "DEfaultPicture.jpg", False, True, xPos, yPos, www, hhh).Select
con
ActiveSheet.Shapes.AddPicture(Sheets("Parametri").Shapes("NODISPO"), False, True, xPos, yPos, www, hhh).Select
...ma assolutamente non funziona (ps. ho anche modificato la parte iniziale della macro anche se qui non l'ho scritto) ...
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi Anthony47 » 01/04/14 19:04

Per l' immagine di "non disponibile", inserendola come le altre la gestirai come le altre, usando la stessa logica gia' (oramai) collaudata; non ha senso risolvere due volte lo stesso problema.

Per le immagini che non si comprimono correttamente, prova con qualche immagine ad aprirla con Paint e a risalvarla senza modifiche; poi le inserisci sul file e vedi se la dimensione del file e' coerente con la piccola dimensione dell' immagine.
Le immagini piu' anomale che avevo trovato erano la ATT02900A e la ABB00010A, se funziona con loro potresti essere a cavallo.

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

Re: FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI

Postdi commerciale » 02/04/14 15:57

Per l'immagine "non disponibile", siccome le immagini possono essere prelevate da cartelle diverse (selezionabile a discrezione dell'utente), non è detto che in quella cartella selezionata ci sia sempre tale immagine e quindi si rischia che vada in errore. Da qui deriva la mia richiesta... sempre che sia possibile ovviamente.

Il trucco di aprire con Paint e risalvarla funziona egregiamente sia durante l'inserimento della foto (già pesano molto meno) sia con il "comprimi immagini" di excel, però ho oltre 4000 foto "papabili" ed è impossibile passarle manualmente tutte. Per questo valuterò l'utilizzo di un programma automatico esterno.
Le foto che utilizzo sono state create tramite computer mac con programmi di grafica, forse per questo sono "anomale" per un pc normale.
commerciale
Utente Junior
 
Post: 92
Iscritto il: 16/07/11 09:14

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "FILE PER INSERIMENTO AUTOMATICO DI IMMAGINI":


Chi c’è in linea

Visitano il forum: Ricky0185 e 41 ospiti