Proprietà immagini



  • Proprietà immagini
    di valemarie (utente non iscritto) data: 09/08/2016 11:37:17

    Ho necessità di cambiare le dimensioni e le proprietà di moltissime immagini in un foglio excel, e anche in futuro.
    Volevo creare una macro che selezionando l'immagine si cambiassero le proprietà come indicato.
    come posso modificare il codice in modo che il cambiamento avvenga con l'immagine che seleziono?

    grazie
     
    Sub Picture_change()
    
    ActiveSheet.Shapes.Range(Array("Picture 4")).Select
        Selection.Placement = xlMoveAndSize
        Selection.ShapeRange.LockAspectRatio = msoFalse
        Selection.ShapeRange.Height = 39.6850393701
        Selection.ShapeRange.Width = 53.8582677165
        Selection.ShapeRange.LockAspectRatio = msoTrue
     
    End Sub



  • di Vecchio Frac data: 09/08/2016 12:04:34

    Il codice appartiene a un userfom?
    Come prima soluzione, comunque ti direi di togliere la prima riga, dove selezioni la "picture 4". Quindi selezioni nel foglio l'immagine, poi lanci la macro con Alt-F8 "esegui". Non associare la macro a un pulsante perchè quando lo premi, la selezione cambia.

    Si potrebbe essere più precisi e darti una soluzione più efficiente/efficace se si potesse vedere il progetto (o una sua esemplificazione). Cambiando il contesto cambiano le premesse e cambiano le soluzioni. Hai molte immagini? su un foglio o più fogli? vuoi selezionarne diverse? le immagini sono su un form? vuoi associare a un pulsante l'operazione?




  • Chiarimento
    di valemarie (utente non iscritto) data: 09/08/2016 12:09:41

    Ciao. innanzitutto grazie mille.

    Le immagini sono tutte in un solo foglio, alla colonna B.

    La cosa ideale sarebbe se si potessero selezionare tutte e applicare le caratteristiche a tutte.
    con altezza 1,4 cm, larghezza 1,9 cm blocco proporzioni e sposta e ridimensiona con le celle.

    Una volta applicata la macro a tutte le immagini, servirà solo per le immagini future, quindi effettivamente mi serve una macro solo per l'immagine che selezione in quel momento. Per non rifare tutte le immagini.

    P.S. Ma per caso si può stabilire anche che vadano al centro della cella in cui si trovano?



  • di patel data: 09/08/2016 12:55:18

    si può fare tutto, ma sarebbe meglio allegare un file di esempio





  • di alfrimpa data: 09/08/2016 12:57:44

    Ciao valemarie

    Non so se ho capito bene ma potresti provare anche con la macro che vedi sotto.

    Alfredo
     
    Sub prova()
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        shp.Placement = xlMoveAndSize
        shp.Locked = False
        shp.Height = 39.6850393701
        shp.Width = 53.8582677165
        shp.Locked = True
    Next shp
    End Sub
    






  • di Vecchio Frac data: 09/08/2016 13:09:51

    Premesso che come dicevo e come ribadisce patel sarebbe meglio vedere qualcosa di concreto, considerate le tue richieste il concetto è quello espresso da alfrimpa, anche se io sarei più restrittivo e mi limiterei ad esaminare soo la selezione delle figure effettuata dall'utente, e non un ciclo per ogni Shape del foglio (rischieresti di comprendere nel ciclo anche bottoni, combobox o altro).
    Interessante è la richiesta sul "centro della cella" che secondo me non è così sbrigativa come sembra :)




  • grazie
    di valemarie (utente non iscritto) data: 09/08/2016 13:16:29

    grazie mille..
    ha funzionato.



  • di Vecchio Frac data: 09/08/2016 13:19:59

    Sono contento che hai risolto e che funzioni, volevo solo completare il discorso per la centratura in cella.
    Io farei una cosa così, giocando con le proprietà Left e Width sia dell'oggetto immagine che della cella di riferimento:
    activesheet.shapes("immagine 7").left=range("e1").left+range("e1").Width2-activesheet.shapes("immagine 7").width2


    Nel mio esempio l'immagine si chiama "immagine 7", ha dimensione 24x24 pixel e viene centrata all'interno della cella E1. Si può adattare per tener conto che la cella abbia dimensioni superiori all'immagine, o viceversa.





  • di alfrimpa data: 09/08/2016 13:46:14

    @VF

    Scusa Francesco ma per "restringere" non si può mettere nel ciclo un If che discrimini le shapes "forme" da quelle di altro tipo?

    Non c'è una proprietà delle shape che fa questo?

    Alfredo

    @ valemarie

    Con quale macro hai risolto?





  • di Vecchio Frac data: 09/08/2016 13:47:57

    Si alfri ma io pensavo a una cosa più semplice, visto che valemarie dice di preselezionare le immagini che interessano:
    For Each shp In Selection







  • Risoluzione
    di Valentina (utente non iscritto) data: 09/08/2016 13:48:58

    con quella generale per tutte...
    e per le future con la mia facendo ALT+F8 come consigliato sull'immagine che seleziono.



  • di Vecchio Frac data: 09/08/2016 13:50:27

    E per centrare l'immagine nella cella? :)





  • di patel data: 09/08/2016 14:32:26

    un esempio di codice per posizionare e centrare immagini nella colonna A
     
    Sub centra()
    Dim shp As Shape
    r = 1: c = 1
    For Each shp In ActiveSheet.Shapes
      If Left(shp.Name, 3) = "Pic" Then
        shp.Locked = False
        shp.Height = 20
        shp.Width = 30
        shp.Locked = True
        With Cells(r, c)
          shp.Left = .Left + .Width  2 - shp.Width  2
          shp.Top = .Top + .Height  2 - shp.Height  2
        End With
        r = r + 1
      End If
    Next shp
    End Sub





  • casino
    di valemarie (utente non iscritto) data: 09/08/2016 14:46:27

    ciao. così mi ha incasinato tutto.
    Come si fa quello che hai fatto ma nella colonna B?
    e sopratutto le immagini non corrispondono più alla riga.

    Praticamente nella colonna A ci sono dei numeri
    nella colonna B ci sono le immagini
    non tutte le righe hanno un'immagine.
    la riga è alta 46
    e le immagini sono 1,4 cm x 1,9 cm non più piccole.

    grazie se puoi spiegarmi il codice con delle righe di commento e come e dove modificarlo.
    grazie



  • di Vecchio Frac data: 09/08/2016 14:59:31

    Quello di patel era chiaramente un esempio, il codice va prima capito e poi provato su un file di test per evitare problemi. Il codice proposto passa in rassegna gli oggetti del foglio attivo. Se il nome di detti oggetti inizia per "Pic" ne imposta altezza e larghezza, quindi li posiziona al centro della colonna A, in righe successive a partire dalla riga 1.
    La variabile "c" identifica la colonna 1 cioè la A. Vedi tu come modificare per adeguarlo :)
    Certo che se le tue immagini sono più alte delle righe potresti avere problemi di sovrapposizione (non hai specificato bene che "casino" è successo). Ecco perchè vi si chiede sempre un file di esempio :)





  • di patel data: 09/08/2016 16:19:31

    per associare immagini a celle o righe ci sono vari modi, per esempio:
    1) rinominare le immagini col numero della riga o o col nome della cella
    2) in una colonna nascosta inserire i nomi delle immagini
    tutto dipende da cosa si vuol fare.




  • risoluzione
    di Valentina (utente non iscritto) data: 10/08/2016 13:19:07

    Allora... per fortuna non avevo salvato dopo la macro.

    Il casino è che le immagini sono nella colonna B e non A. e quindi non so come correggerlo.
    E l'altro problema e che non tutti i valori della colonna A hanno un'immagine...
    quindi vorrei solo le impostazioni per centrare l'immagine nella cella della colonna B.
    grazie mille



  • di Vecchio Frac data: 10/08/2016 13:33:34

    cit. "per fortuna non avevo salvato dopo la macro"
    --_> Bene e adesso che sai che può succedere, meglio lavorare su copie e farsi anche copie di backup

    Comunque io ti avevo già dato una dritta:
    cit. VF " La variabile "c" identifica la colonna 1 cioè la A. Vedi tu come modificare per adeguarlo :) "

    Il fatto che non ci sia un'immagine in ogni riga è irrilevante, il codice proposto da patel prende in considerazione le immagini del foglio indipendentemente da dove si trovino, purchè il loro nome cominci per "Pic".





  • risoluzione
    di Valentina (utente non iscritto) data: 10/08/2016 13:41:24

    ok.per la colonna.
    ho messo C=2
    ma il problema dell'immagine è che si mettono a casa. non si centrano nella cella in cui già sono. come si fa a vincolare un'immagine ad una determinata cella senza necessariamente inserirla in commento cella.
    si può?



  • di patel data: 10/08/2016 13:56:13

    sembra proprio che tu non legga i consigli e le spiegazioni, così perdi tempo e basta




  • risoluzione
    di Valentina (utente non iscritto) data: 10/08/2016 13:58:34

    ok. grazie.

    il file non lo posso allegare o mettere online.
    dovrei creare un fax simile e ora non riesco.
    fa niente



  • di Vecchio Frac data: 10/08/2016 14:00:35

    Come, "si mettono a caso" ?
    Semmai, col codice di patel, si allineano in righe successive invece di stare ognuna nella riga di appartenenza, ma fondamentalmente funziona.

    Togli
    shp.Top = .Top + .Height  2 - shp.Height  2 
    (e in fondo così torniamo al mio codice postato all'inizio della discussione) così le immagini si collocano al centro della cella dove si trovano ora.

    Il mio test è consistito nel posizionare alcune immagini in righe diverse, ho tolto la riga di cui sopra, e ho lanciato la macro. Mi sembra che tutto funzioni. Se a te non accade vuol dire che il tuo scenario è diverso e quindi dovrai allegare un file di esempio per capirci meglio.





  • di Vecchio Frac data: 10/08/2016 14:03:02

    cit. "dovrei creare un fax simile e ora non riesco. "
    ---> Allora il "fac simile" (è latino!) lo allego io. vedi se rispecchia la tua situazione. Per provarlo basta che sposti le immagini in righe diverse e lanci la macro (di patel, lievemente modificata).

    Allegato: "esempio VF.xlsm"




  • risoluzione
    di Valentina (utente non iscritto) data: 10/08/2016 14:06:47

    PERFETTO.

    Togliendo TOP è perfetto.
    GRAZIEEEEEEEEEEEEEEEEEEEEEEEE


  • risoluzione
    di Valentina (utente non iscritto) data: 10/08/2016 14:09:31

    .... grazie. ho fatto.


    e capita di sbagliare.
    eccoti il tuo latino : "ERRARE HUMANUM EST!"

    lo sapevi?



  • di Vecchio Frac data: 10/08/2016 15:02:32







  • di Vecchio Frac data: 10/08/2016 15:39:27

    @Valentina
    Se hai risolto e non ci sono altri problemi (per i quali eventualmente puoi aprire nuova discussione) ti invito a segnare come "Risolta" la discussione, grazie.
    E scusa se ti sei sentita offesa, non era mia intenzione certamente. Però "fax simile" è divertente ^_^




  • risolto
    di Valentina (utente non iscritto) data: 11/08/2016 09:27:07

    grazie. RISOLTO.

    X e C sono uno accanto all'altro nella tastiera...