I figli d'arte sono all'altezza dei genitori? Vieni a parlarne su Award & Oscar.
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Macro per inserimento immagini semiautomatico

Ultimo Aggiornamento: 01/12/2016 08:12
Post: 89
Registrato il: 24/03/2013
Città: BUSSOLENGO
Età: 32
Utente Junior
Microsoft Excel Starter 2012
OFFLINE
24/11/2016 11:40

Oggi vorrei provare ad automatizzare un processo che ahimè ripeto spesso manualmente [SM=x423054]

vorrei creare una macro che inserisca un immagine con dimensioni preimpostate nel foglio excel nella cella che seleziono.

esempio:

-seleziono la cella A1
-attivo la macro che dovrebbe aprire la finestra di dialogo per permettermi di selezionare l'immagine desiderata (quindi io scelgo l'immagine di volta in volta)
-una volta scelta l'immagine viene inserita nella cella già selezionata in precedenza (A1) con dimensioni predefinite

dopodichè il processo continua

seleziono la cella A30
-attivo la macro che dovrebbe aprire la finestra di dialogo per permettermi di selezionare l'immagine desiderata (quindi io scelgo l'immagine di volta in volta)
-una volta scelta l'immagine viene inserita nella cella già selezionata in precedenza (A30) con dimensioni predefinite

ho cercato qualcosa di già fatto ma al momento ho trovato un file che non sono riuscito a comprenderne il funzionamento certo sono riuscito a farlo funzionare ma non saprei come modificarlo e comunque si allontana molto da quello che dovrebbe fare e non esegue l'inserimento in base alla cella selezionata che continua a cambiare


spero che possiate darmi una mano o suggerirmi parti di codici:

-che almeno mi permettano di aprire la finestra per selezionare le immagini
-impostare delle dimensioni alle immagini che vengono importate

NOTA con vba mi arrangio come posso solitamente copiando e incollando parti di codici
Post: 3.471
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
24/11/2016 13:10

Sub InserisciImmagineInSelezione()
Dim shp As ShapeRange
fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.bmp), *.jpgs;*.gif;*.bmp", , _
            "Select the picture")
If fName = "False" Then Exit Sub
With Selection
  Set imgIcon = ActiveSheet.Shapes.AddPicture(Filename:=fName, LinkToFile:=False, SaveWithDocument:=True, Left:=.Left, Top:=.Top, Width:=30, Height:=30)
End With
End Sub

l'immagine assume le dimensioni della cella

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 89
Registrato il: 24/03/2013
Città: BUSSOLENGO
Età: 32
Utente Junior
Microsoft Excel Starter 2012
OFFLINE
24/11/2016 16:47

Re:
patel45, 24/11/2016 13.10:

Sub InserisciImmagineInSelezione()
Dim shp As ShapeRange
fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.bmp), *.jpgs;*.gif;*.bmp", , _
            "Select the picture")
If fName = "False" Then Exit Sub
With Selection
  Set imgIcon = ActiveSheet.Shapes.AddPicture(Filename:=fName, LinkToFile:=False, SaveWithDocument:=True, Left:=.Left, Top:=.Top, Width:=30, Height:=30)
End With
End Sub

l'immagine assume le dimensioni della cella




grazie mille funziona sono pure riuscito a modificare le dimensioni a mio piacimento come mi serviva. [SM=x423028] esiste anche un comando per ruotare le foto sempre con la macro?
[Modificato da otit 24/11/2016 16:59]
Post: 3.472
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
24/11/2016 17:00

non lo conosco, ma prova a registrare una macro

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 1.011
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
24/11/2016 18:28

Ciao

IncrementRotation xx
membro di shaperange, nel tuo caso:

....
End With
imgicon.Select
Selection.ShapeRange.IncrementRotation 90#
End Sub



saluti
[Modificato da dodo47 24/11/2016 18:53]
Domenico
Win 10 - Excel 2016
Post: 90
Registrato il: 24/03/2013
Città: BUSSOLENGO
Età: 32
Utente Junior
Microsoft Excel Starter 2012
OFFLINE
25/11/2016 07:58

Re:
patel45, 24/11/2016 17.00:

non lo conosco, ma prova a registrare una macro

ho provato a registrarne una ma non mi ha registrato nulla [SM=g27833]


Post: 91
Registrato il: 24/03/2013
Città: BUSSOLENGO
Età: 32
Utente Junior
Microsoft Excel Starter 2012
OFFLINE
25/11/2016 08:08

Re:
dodo47, 24/11/2016 18.28:

Ciao

IncrementRotation xx
membro di shaperange, nel tuo caso:

....
End With
imgicon.Select
Selection.ShapeRange.IncrementRotation 90#
End Sub



saluti



cosi funziona ma dovrei fare in modo di ruotare prima l'immagine e poi ridimensionarla ho provato a scrivere:

Sub InserisciImmagine()
Dim shp As ShapeRange
fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.PNG;*.bmp;*.bmp), *.jpgs;*.gif;*.PNG;*.bmp", , _
"Select the picture")
If fName = "False" Then Exit Sub
With Selection
imgicon.Select
Selection.ShapeRange.IncrementRotation -90#
End With
Set imgicon = ActiveSheet.Shapes.AddPicture(Filename:=fName, LinkToFile:=False, SaveWithDocument:=True, Left:=.Left, Top:=.Top, Width:=400, Height:=500)
End Sub

ma non funziona ottengo un messaggio di errore riferimento non valido [SM=x423023]

cosa vuol dire membro di shaperange?

Post: 1.013
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
25/11/2016 09:37

Ciao
a parte il tuo codice errato, per fare quel che chiedi non puoi usare AddPicture in quanto il metodo vuole obbligatoriamente, tra l'altro, il relativo dimensionamente (top-left-height-width); se ti fossi preso la briga di leggere l'help della funzione lo avresti notato.

Pertanto:
Sub InserisciImmagineInSelezione()
Dim MyPic As Picture
mRng = ActiveCell.Address
fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.bmp), *.jpgs;*.gif;*.bmp", , _
            "Select the picture")
If fName = "False" Then Exit Sub
Set MyPic = ActiveSheet.Pictures.Insert(fName)
With MyPic
.ShapeRange.IncrementRotation 90#
.Top = Range(mRng).Top
.Left = Range(mRng).Left
.Height = 500
.Width = 400
End With
End Sub


Per quanto riguarda: "
cosa vuol dire membro di shaperange? " vuol dire questo:
ogni classe ha i suoi membri, un esempio per tutti:
la classe Workbooks ha come membri: Add - close - open - ecc ecc, cioè quando scrivi
Workbooks.Open.......
l'"Open" fa parte di Workbooks.

Nel Vba premi F2 e.....

saluti
Domenico
Win 10 - Excel 2016
Post: 92
Registrato il: 24/03/2013
Città: BUSSOLENGO
Età: 32
Utente Junior
Microsoft Excel Starter 2012
OFFLINE
25/11/2016 10:30

Re:
dodo47, 25/11/2016 09.37:

Ciao
a parte il tuo codice errato, per fare quel che chiedi non puoi usare AddPicture in quanto il metodo vuole obbligatoriamente, tra l'altro, il relativo dimensionamente (top-left-height-width); se ti fossi preso la briga di leggere l'help della funzione lo avresti notato.

Pertanto:
Sub InserisciImmagineInSelezione()
Dim MyPic As Picture
mRng = ActiveCell.Address
fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.bmp), *.jpgs;*.gif;*.bmp", , _
            "Select the picture")
If fName = "False" Then Exit Sub
Set MyPic = ActiveSheet.Pictures.Insert(fName)
With MyPic
.ShapeRange.IncrementRotation 90#
.Top = Range(mRng).Top
.Left = Range(mRng).Left
.Height = 500
.Width = 400
End With
End Sub


Per quanto riguarda: "
cosa vuol dire membro di shaperange? " vuol dire questo:
ogni classe ha i suoi membri, un esempio per tutti:
la classe Workbooks ha come membri: Add - close - open - ecc ecc, cioè quando scrivi
Workbooks.Open.......
l'"Open" fa parte di Workbooks.

Nel Vba premi F2 e.....

saluti



scusami ma sono un neofita [SM=x423024] spesso registro pezzi di macro e li metto insieme [SM=g27819]

quindi non so quali sono le differenze tra shaperange e workbooks ma esiste una guida di vba?con comandi esempi ecc? magari premendo f12 o simili.

La macro l'ho provata ruota e poi adatta le dimensioni ma non viene inserita nella cella selezionata prima di lanciare la macro puoi aiutarmi?

ho provato ad aggiungere la selezione della cella della macro ma non funziona e le celle di inserimento continuano a cambiare


Post: 1.014
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
25/11/2016 17:13

Ciao
discorso complesso ma intuibile: le tue foto non sono quadrate.
Se hai un quadrato e lo ruoti sul suo centro, i lati corrispondono alla zona delineata, mentre se lo fai con un rettangolo capisci bene che ruotando sul proprio centro, i lati non corrisponderanno alle posizioni iniziali.

Ciò premesso, un tentativo potrebbe essere il seguente: sbloccare il dimensionamento automatico dell'immagine (per intenderci evitare che quando la ridimensioni aumenti (o diminuisca) sia verticalmente che orizzontalmente) - renderla perfettamente quadrata - allinearla - e ridimensionarla spostandola ulteriormente)...Non è facile da scrivere...

Ciò premesso prova:
Sub InserisciImmagineInSelezione()
Dim MyPic As Picture
mRng = ActiveCell.Address
fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.bmp), *.jpgs;*.gif;*.bmp", , _
            "Select the picture")
If fName = "False" Then Exit Sub
Set MyPic = ActiveSheet.Pictures.Insert(fName)
With MyPic
.ShapeRange.LockAspectRatio = False
.Height = 100
.Width = 100
.ShapeRange.IncrementRotation 90#
.Left = Range(mRng).Left
.Top = Range(mRng).Top
.ShapeRange.LockAspectRatio = True
.Height = 500
.Width = 400
.Left = Range(mRng).Left ' questa istruzione è ripetuta volontariamente
End With
End Sub


Per quanto riguarda:
"....ma esiste una guida di vba?con comandi esempi ecc? magari premendo f12 o simili...."
'mbè si e purtroppo non viene usato da molti, ma ti assicuro che c'è tutto...basta saper leggere.

Nella finestra dl vba ti posizioni con il mouse su una "parola" della macro (es:heigt o quel che vuoi) premi F1.

saluti
Domenico
Win 10 - Excel 2016
Post: 93
Registrato il: 24/03/2013
Città: BUSSOLENGO
Età: 32
Utente Junior
Microsoft Excel Starter 2012
OFFLINE
28/11/2016 08:14

Re:
dodo47, 25/11/2016 17.13:

Ciao
discorso complesso ma intuibile: le tue foto non sono quadrate.
Se hai un quadrato e lo ruoti sul suo centro, i lati corrispondono alla zona delineata, mentre se lo fai con un rettangolo capisci bene che ruotando sul proprio centro, i lati non corrisponderanno alle posizioni iniziali.

Ciò premesso, un tentativo potrebbe essere il seguente: sbloccare il dimensionamento automatico dell'immagine (per intenderci evitare che quando la ridimensioni aumenti (o diminuisca) sia verticalmente che orizzontalmente) - renderla perfettamente quadrata - allinearla - e ridimensionarla spostandola ulteriormente)...Non è facile da scrivere...

Ciò premesso prova:
Sub InserisciImmagineInSelezione()
Dim MyPic As Picture
mRng = ActiveCell.Address
fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.bmp), *.jpgs;*.gif;*.bmp", , _
            "Select the picture")
If fName = "False" Then Exit Sub
Set MyPic = ActiveSheet.Pictures.Insert(fName)
With MyPic
.ShapeRange.LockAspectRatio = False
.Height = 100
.Width = 100
.ShapeRange.IncrementRotation 90#
.Left = Range(mRng).Left
.Top = Range(mRng).Top
.ShapeRange.LockAspectRatio = True
.Height = 500
.Width = 400
.Left = Range(mRng).Left ' questa istruzione è ripetuta volontariamente
End With
End Sub


Per quanto riguarda:
"....ma esiste una guida di vba?con comandi esempi ecc? magari premendo f12 o simili...."
'mbè si e purtroppo non viene usato da molti, ma ti assicuro che c'è tutto...basta saper leggere.

Nella finestra dl vba ti posizioni con il mouse su una "parola" della macro (es:heigt o quel che vuoi) premi F1.

saluti



grazie per l'aiuto che mi stai dando questo finesettimana sono stato molto occupato..hai capito esattamente il problema della rotazione [SM=x423028] ho fatto qualche prova ma non funziona come deve anche perchè le mie foto come dici tu non sono quadrate ma devono essere dimensionate rettangolari inoltre la foto deve essere ruotata a sinistra di 90° ho provato a modificare la tua macro inserendo un - prima del 90 e sembra funzionare ma devo aggiustare un po di cose adesso provo poi semmai chiedo un altro aiutino
Post: 94
Registrato il: 24/03/2013
Città: BUSSOLENGO
Età: 32
Utente Junior
Microsoft Excel Starter 2012
OFFLINE
30/11/2016 07:57

Re: Re:
otit, 28/11/2016 08.14:



grazie per l'aiuto che mi stai dando questo finesettimana sono stato molto occupato..hai capito esattamente il problema della rotazione [SM=x423028] ho fatto qualche prova ma non funziona come deve anche perchè le mie foto come dici tu non sono quadrate ma devono essere dimensionate rettangolari inoltre la foto deve essere ruotata a sinistra di 90° ho provato a modificare la tua macro inserendo un - prima del 90 e sembra funzionare ma devo aggiustare un po di cose adesso provo poi semmai chiedo un altro aiutino


riuscite a darmi qualche altro aiuto? non ci sono riuscito [SM=x423023] [SM=x423061]

Post: 1.018
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
30/11/2016 08:50

Ciao
invia il tuo file e 2/3 foto, altrimenti non se ne esce

saluti
Domenico
Win 10 - Excel 2016
Post: 95
Registrato il: 24/03/2013
Città: BUSSOLENGO
Età: 32
Utente Junior
Microsoft Excel Starter 2012
OFFLINE
30/11/2016 09:25

Re:
dodo47, 30/11/2016 08.50:

Ciao
invia il tuo file e 2/3 foto, altrimenti non se ne esce

saluti



al momento non ho un vero e proprio file perchè continua a cambiare ogni volta in base a dove devo inserire le foto.

se viene utilizzato un foglio excel nuovo:

-Selezionando una cella qualsiasi del foglio (per l'esempio prendiamo in considerazione la cella A1)
-Inseriamo un immagine (vanno bene anche quelle campione di windows)
-La foto viene inserita con dimensioni scelte da excel
-L'immagine deve essere ruotata a sinistra di 90°
-Dopodichè l'immagine deve essere adattata con una dimensione da A1 a I35 (anche queste dimensioni possono cambiare)

se la cella di partenza cambia es A36 l'immagine a fine processo dovrebbe essere di dimensioni da A36 a I70


Post: 1.019
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
30/11/2016 11:50

Ciao
la routine fa quello che hai chiesto in tutti i post (a parte il -90#).

Ora è uscito fuori che le foto devono occupare 9 colonne per 35 righe che comunque con le dimensioni standard di excel è un rettangolo verticale.

Francamente non ho molta voglia di continuare...

saluti
Domenico
Win 10 - Excel 2016
Post: 96
Registrato il: 24/03/2013
Città: BUSSOLENGO
Età: 32
Utente Junior
Microsoft Excel Starter 2012
OFFLINE
30/11/2016 15:06

Re:
dodo47, 30/11/2016 11.50:

Ciao
la routine fa quello che hai chiesto in tutti i post (a parte il -90#).

Ora è uscito fuori che le foto devono occupare 9 colonne per 35 righe che comunque con le dimensioni standard di excel è un rettangolo verticale.

Francamente non ho molta voglia di continuare...

saluti




non esattamente la foto ruota e si posiziona ma non nel punto corretto le dimensioni continuano a cambiare per esempio 100 foto con una dimensione 100 in un altra 100 non ruotate ecc...cmq grazie per l'aiuto farò con quello che ho [SM=x423028]

nel dettaglio questa macro
prova
Dim MyPic As Picture
mRng = ActiveCell.Address
fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.PNG;*.bmp), *.jpgs;*.gif;*.PNG;*.bmp", , _
            "Select the picture")
If fName = "False" Then Exit Sub
Set MyPic = ActiveSheet.Pictures.Insert(fName)
With MyPic
.ShapeRange.LockAspectRatio = False
.Height = 100
.Width = 100
.ShapeRange.IncrementRotation -90#
.Left = Range(mRng).Left
.Top = Range(mRng).Top
.ShapeRange.LockAspectRatio = True
.Height = 150
.Width = 542
.Left = Range(mRng).Left ' questa istruzione è ripetuta volontariamente
End With
End Sub
Sub prova()

non funziona perchè se inserisco dei parametri per le dimensioni (vedi parametro height = 150) l'altezza non varia mai anche se inserisco un valore alto per esempio 1000

inoltre se ruoto la foto a 90 a destra si inserisce correttamente ma non con le dimensioni se invece provo a modificare il tutto con -90 la foto viene inserita ma traslata in alto di alcune celle.

ho provato a escludere una riga alla volta per capire come ragiona alla macro se escludo dalla riga che esegue la rotazione la foto non viene inserita nella cella che ho selezionato ma viene inserita in un altra cella del foglio dopodichè ruotando si inserisce nella cella selezionata (QUALE STREGONERIA é MAI QUESTA??? [SM=x423023] )

[Modificato da otit 30/11/2016 15:35]
Post: 1.020
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
30/11/2016 16:37

Ciao
se cambi la rotazione da 90 a -90 devi variare il riposizionamento finale NON DEL LEFT MA DEL TOP, eppure mi sembrava di aver spiegato il problema del rotare immagini:
Sub InserisciImmagineInSelezione()
Dim MyPic As Picture
mRng = ActiveCell.Address
fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.bmp), *.jpgs;*.gif;*.bmp", , _
            "Select the picture")
If fName = "False" Then Exit Sub
Set MyPic = ActiveSheet.Pictures.Insert(fName)
With MyPic
.ShapeRange.LockAspectRatio = False
.Height = 100
.Width = 100
.ShapeRange.IncrementRotation -90#
.Left = Range(mRng).Left
.Top = Range(mRng).Top
.ShapeRange.LockAspectRatio = True
.Height = 500
.Width = 400
.Top = Range(mRng).Top '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
End With
End Sub


SALUTI
Domenico
Win 10 - Excel 2016
Post: 97
Registrato il: 24/03/2013
Città: BUSSOLENGO
Età: 32
Utente Junior
Microsoft Excel Starter 2012
OFFLINE
01/12/2016 08:12

Re:
dodo47, 30/11/2016 16.37:

Ciao
se cambi la rotazione da 90 a -90 devi variare il riposizionamento finale NON DEL LEFT MA DEL TOP, eppure mi sembrava di aver spiegato il problema del rotare immagini:
Sub InserisciImmagineInSelezione()
Dim MyPic As Picture
mRng = ActiveCell.Address
fName = Application.GetOpenFilename("Picture files (*.jpg;*.gif;*.bmp), *.jpgs;*.gif;*.bmp", , _
            "Select the picture")
If fName = "False" Then Exit Sub
Set MyPic = ActiveSheet.Pictures.Insert(fName)
With MyPic
.ShapeRange.LockAspectRatio = False
.Height = 100
.Width = 100
.ShapeRange.IncrementRotation -90#
.Left = Range(mRng).Left
.Top = Range(mRng).Top
.ShapeRange.LockAspectRatio = True
.Height = 500
.Width = 400
.Top = Range(mRng).Top '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
End With
End Sub


SALUTI



scusa ma non mi sembrava molto chiaro per me... che come ho gia detto

NOTA con vba mi arrangio come posso solitamente copiando e incollando parti di codici



ergo alcune parti non so nemmeno a cosa servono non ci sarei mai arrivato da solo praticamente..

comunque ora l'immagine ruota correttamente ma le dimensioni non so possono correggere a piacimento.
Se si cambia il parametro height=500 l'immagine non cambia la sua altezza.
l'immagine cambia solo con il parametro .Width = 400 e sembra ragionare in diagonale ( varia altezza e larghezza) di conseguenza se cambia l'area di inserimento non è possibile impostare delle dimensioni corrette

vorrei aggiungere che mi sono iscritto qui per imparare anche qualcosa [SM=x423017]

[Modificato da otit 01/12/2016 08:13]
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
macro inserimento riga (6 messaggi, agg.: 25/04/2018 21:36)
INSERIMENTO MACRO (7 messaggi, agg.: 16/11/2021 11:20)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 04:04. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com