Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Macro pre ingrandire miniature di foto

513 views
Skip to first unread message

Alberto G.

unread,
May 13, 2008, 11:06:32 AM5/13/08
to
Ciao a tutti

ho un file di excel che contiene il riassunto di una situazione dei reclami.
Esso contiene una serie di righe, in cui ogni riga rappresenta un reclamo,
ed una serie di colonne con tutti i dati.

Un collega ha aggiunto una colonna, andando ad incollare una serie di foto
(una per riga), per meglio descrivere le cose.
Le foto sono state ridotte di molto (12%) dell'originale per non stravolgere
troppo l'aspetto della tabella.

A quel punto ho aggiunto di fianco ad ogni foto, sul foglio di excel, una
serie di Option button collegati e pensavo di fare aprire una userform con
dentro una copia in grandezza naturale della foto ed un tasto chiudi per
uscire.
Mentre cliccando da un option button all'altro pensavo di poter cambiare al
volo la foto ingrandita, visto che posso associare il codice di ciascun
option button alla relativa foto (nomi foto: Immagine n)

Primo problema
ogni volta che faccio una copia la nuova foto ingrandita prende un
progressivo nuovo e sempre crescente e quindi non ho mai lo stesso nome

Secondo problema
come incollo la copia della foto così generata ed opportunamente ingrandita
dentro la user form?


Grazie per i consigli.
Saluti

Alberto G.


picodata

unread,
May 13, 2008, 2:31:45 PM5/13/08
to

"Alberto G." <alberto_g...@NOSPAMalice.it> ha scritto nel messaggio
news:e9Q9urQt...@TK2MSFTNGP05.phx.gbl...
-----------------------

Ciao Alberto G., prova :

1 - Poniamo che:
NomeFoto = Immagine 5
Altezza = 1,5
Larghezza=2,5

2 - Inserisci uno SpinButton1
Pulsante ds mouse su questo pulsante per Visualizzare codice

a) LinkedCell = Foglio1!C44 <<< cambiare a piacere
b) Nel riquadro codice incolla :

Private Sub SpinButton1_Change()
Dim mFattore as Integer
mFattore = [c44].Value <<< cambiare come sopra
ActiveSheet.Shapes("Immagine 5").Select
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 44 * mFattore
Selection.ShapeRange.Width = 88 * (mFattore / 1.3)
[a1].Select
End Sub

E così via per tutte le altre.

Ha funzionato nel passato ma adesso non l'ho provata,
fai sapere se può andare.

Ciao

Pippo Coco


Norman Jones

unread,
May 13, 2008, 5:59:41 PM5/13/08
to
Ciao Alberto,

=============

=============

Oltre all'ottimo suggerimento dal
grande Poeta, prova:

- Nel foglio inserisci dei controlli Image,
dagli strumenti di controllo
(non preoccuparti con le suedimensioni)

- Fai click dx per aprire finistrina delle proprieta' |
Proprieta': Picture | Seleziona un imagine

In un modulo standard (vedi di sotto),
alla testa del modulo, e prima di qualsiasi
altro codice, incolla la seguente routine per
aggiornare le proprieta' dei tuoi controlli
Image:

'===========>>
Option Explicit
Const sAltezza As Double = 100 '<<=== da CAMBIARE
Const slarghezza As Double = 100 '<<=== da CAMBIARE

'-------------->>
Public Sub Tester()
Dim WB As Workbook
Dim SH As Worksheet
Dim oleObj As OLEObject

Set WB = Workbooks("Pippo.xls") ' <<=== da CAMBIARE
Set SH = WB.Sheets("Foglio2") ' <<=== da CAMBIARE

For Each oleObj In SH.OLEObjects
With oleObj
If .progID = "Forms.Image.1" Then
.Height = sAltezza / 3
.Width = slarghezza / 3
.Object.PictureSizeMode = _
fmPictureSizeModeStretch
End If
End With
Next oleObj

End Sub
'<<===========

Per utilizzare questa routine:

Alt-F11 per aprire l'Editor di VBA
Menu | Inserisci | Modulo
Incolla il suddetto codice
Alt-F11 per tornare in Excel
Alt-F8
Seleziona "Tester"
Esegui


Nel modulo del foglio (vedi di sotto),
incolla le seguente routine:

'===========>>
Option Explicit

'-------------->>
Private Sub Image1_Click()
Call ResizePic(Image1)
End Sub

'-------------->>
Private Sub Image2_Click()
Call ResizePic(Image2)
End Sub

'-------------->>
Private Sub Image3_Click()
Call ResizePic(Image3)
End Sub

'-------------->>
Private Sub Image4_Click()
Call ResizePic(Image4)
End Sub

'-------------->>
Private Sub Image5_Click()
Call ResizePic(Image5)
End Sub

'-------------->>
Private Sub ResizePic(myPic As Image)
Dim oleObj As OLEObject

For Each oleObj In Me.OLEObjects
With oleObj
If .progID = "Forms.Image.1" Then
If Not .Name = myPic.Name Then
.Height = sAltezza / 3
.Width = slarghezza / 3
End If
End If
End With
Next oleObj

With myPic
If Abs(.Height - sAltezza) < 10 Then
.Height = sAltezza / 3
.Width = slarghezza / 3
Else
.Height = sAltezza
.Width = slarghezza
End If
End With
End Sub
'<<===========

Con il tasto destro del mouse fai click
sulla linguetta del foglio, scegli
"Visualizza codice" e nella finestra del
codice incolla la routine.Alt-F11 per
tornare in Excel

Salva il file.

Ora, tutti le imagini sono di dimensioni
ridotti. In risposta ad un click, l'immagine
sarà ingrandetta; cliccando poi su un'altra
immagine, l'immagine precedente sarà
ridotta e la nuova immagine sarà
ingrandetta.

---
Regards.
Norman

Alberto G.

unread,
May 14, 2008, 6:06:05 AM5/14/08
to

"Norman Jones" <norma...@wherforartthou.com> ha scritto nel messaggio
news:3570C4E8-A1CC-43C3...@microsoft.com...


Ciao Norman,

ho seguito attentamente le tue istruzioni, mi da un messaggio di errore con
scritto:
Errore di compilazione: variabile non definita.
Il VBA si apre sul foglio1, con l'istruzione
Private Sub ResizePic(myPic As Image) colorata in giallo (passo in cui si è
fermato)
e con il nome sAltezza evidenziato in blu (quindi la variabile a cui si
riferisce)
Ma non era dichiarata come Const?
Perchè la vede come Variabile?

Saluti e grazie

Alberto G.


Alberto G.

unread,
May 14, 2008, 6:13:49 AM5/14/08
to

"Alberto G." <alberto_g...@NOSPAMalice.it> ha scritto nel messaggio
news:%23rLQhoa...@TK2MSFTNGP04.phx.gbl...

Norman, sono stato precipitoso nel messaggiare

Se clicco sulla foto, l'errore è quello detto prima, se faccio Alt-F8,
esegui, le ingrandisce immediatamente entrambe

Alberto G.


Norman Jones

unread,
May 14, 2008, 6:55:49 AM5/14/08
to
Ciao Alberto,

=============


ho seguito attentamente le tue istruzioni, mi da un messaggio di errore con
scritto:
Errore di compilazione: variabile non definita.
Il VBA si apre sul foglio1, con l'istruzione
Private Sub ResizePic(myPic As Image) colorata in giallo (passo in cui si è
fermato)
e con il nome sAltezza evidenziato in blu (quindi la variabile a cui si
riferisce)
Ma non era dichiarata come Const?
Perchè la vede come Variabile?

- - - - - -

Norman, sono stato precipitoso nel messaggiare

Se clicco sulla foto, l'errore è quello detto prima, se faccio Alt-F8,
esegui, le ingrandisce immediatamente entrambe

=============

Nel mio workbook di prova, avevo
dichiarito le variabile sAltezza e
sLarghezza alla testa del modulo del
foglio; al momento in cui postò la mia
risposta, avevo deciso di spostare le
dicichiarazioni in un modulo standard.

Quindi, anziche':

> Option Explicit
> Const sAltezza As Double = 100 '<<=== da CAMBIARE
> Const slarghezza As Double = 100 '<<=== da CAMBIARE

avrei dovuto suggerire:

Public Const sAltezza As Double = 100 '<<=== da CAMBIARE
Public Const sLarghezza As Double = 100 '<<=== da CAMBIARE


Se dovessi avere ancora un problema,
potrei mandarti il mio file di prova.

---
Regards.
Norman

Alberto G.

unread,
May 14, 2008, 8:14:38 AM5/14/08
to

"Norman Jones" <norma...@wherforartthou.com> ha scritto nel messaggio
news:uSaAVEbt...@TK2MSFTNGP06.phx.gbl...


Norman,

immaginavo qualcosa del genere. Adesso tutto a posto. Lo sto adattando alle
mie esigenze.
Se arriverò ad un vicolo cieco tornerò a postare sul NG.
Per intanto grazie ancora.

Alberto G.


0 new messages