Sostieni Excel VBA con una donazione! Con la tua donazione potrai contribuire al mantenimento del servizio.
Le donazioni sono eseguite con PayPal, il modo più facile, comodo e sicuro per pagare online.
Paypal accetta anche carta di credito o carte prepagate.

Altezza di Range di celle unite

  • FILE ALLEGATI:
  • Altezza di Range di celle unite (excel 2010) di pregiudicato_83 (Utente non iscritto) data: 02/12/2016 19:33:05 



    Carissimi buona sera,
    sto sbattendo la testa da una mezza (giornata) e non trovo la soluzione in rete...
    Ho un foglio con due celle unite (B8 e B9) alle quali ho assegnato un nome: "TIPO" in modo da potermici riferire da vba anche se le sposto.
    poi ho un bel "RETTANGOLO_BLU" che voglio mettere bello bello sopra le mie due celle in modo tale che le copra perfettamente e si sposti con loro.

    Tutto bene finchè lo faccio su una cella singola, il problema è che sulle due celle unite, il codice che uso mi restituisce l'altezza della prima (B8) cella e non l'altezza dell'intero range ("TIPO").
    se non si capisce ditemelo che ci riprovo
    Grazie
     
    Function BLOCCA_FORMA(NOME_FORMA, CELLA)
    'in NOME_FORMA arriva "RETTANGOLO_BLU"
    'in CELLA arriva "TIPO" che è il nome del range B8:B9
    
    ActiveSheet.Shapes(NOME_FORMA).Height = Range(CELLA).RowsHeight
    
    ActiveSheet.Shapes(NOME_FORMA).Top = Range(CELLA).Top
    ActiveSheet.Shapes(NOME_FORMA).Left = Range(CELLA).Left
    ActiveSheet.Shapes(NOME_FORMA).Height = Range(CELLA).Height
    ActiveSheet.Shapes(NOME_FORMA).Width = Range(CELLA).Width
    
    End Function
  • di patel (Utente esperto) data: 02/12/2016 20:06:28 



    evitare le celle unite quando si usa il vba

    edit: a meno che tu non ti chiami scossa
  • di pregiudicato_83 (Utente non iscritto) data: 02/12/2016 20:13:33 



    Grazie, ma purtroppo non è la soluzione, in questo caso sono necessarie,
    devo solo capire come gestirle.
  • di patel (Utente esperto) data: 02/12/2016 20:34:51 



    allega un file di esempio
  • di pregiudicato_83 (Utente non iscritto) data: 02/12/2016 21:17:53 



    ho allegato un file di esempio, grazie
  • di patel (Utente esperto) data: 03/12/2016 09:46:35 



    complimenti per l'esempio, non potevi fare di meglio.
    Come già detto vba gestisce male le celle unite quindi ti conviene assegnare il Nome TIPO1 alla cella B9
    e modificare così:

     
     
    Function BLOCCA_FORMA(NOME_FORMA, CELLA,CELLA1)
    
        ActiveSheet.Shapes(NOME_FORMA).Top = Range(CELLA).Top
        ActiveSheet.Shapes(NOME_FORMA).Left = Range(CELLA).Left
        ActiveSheet.Shapes(NOME_FORMA).Height = Range(CELLA).Height + Range(CELLA1).Height
        ActiveSheet.Shapes(NOME_FORMA).Width = Range(CELLA).Width
    
    End Function
    
    Private Sub CommandButton1_Click()
    Call BLOCCA_FORMA("RETTANGOLO_BLU", "TIPO","TIPO1")
    End Sub
    
  • di pregiudicato_83 (Utente non iscritto) data: 03/12/2016 11:07:52 



    ci deve essere un modo per sapere l'altezza di un range di celle unite no? basta trovarlo, se sta sera non l'ho trovato risolvo con qualcosa tipo quello che hai proposto. ciao
  • di scossa (Utente esperto) data: 03/12/2016 18:40:24 



    cit.: "ci deve essere un modo per sapere l'altezza di un range di celle unite no?"

    Senza entrare nel merito del codice (il modo in cui utilizzi il nome per me è piuttosto discutibile ...), puoi semplicemente utilizzare la proprietà .MergeArea.Height (vedi istruzione sotto).



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)

     
        ActiveSheet.Shapes(NOME_FORMA).Height = Range(CELLA).MergeArea.Height
    
  • di patel (Utente esperto) data: 03/12/2016 19:13:37 



    ho modificato la mia prima risposta
  • di scossa (Utente esperto) data: 03/12/2016 19:23:19 



    cit. patel: "ho modificato la mia prima risposta"



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)
  • di pregiudicato_83 (Utente non iscritto) data: 03/12/2016 19:40:58 



    Grazie,
    funziona alla perfezione, mi piacerebbe approfondire la tua osservazione sul nome, ma è meglio se apro un'altra discussione?
    lo scopo del nome è quello di spostare le celle che uso nel foglio e che si interfacciano col vba senza preoccuparmi di perdere i riferimenti.
    lo uso spesso come metodo e mi trovo molto bene.
    Ma mi è capitato 1.000.000 di volte di trovarmi bene con qualcosa e poi scoprire che ce n'è un'altra con cui mi trovo ancora meglio.
    per cui sono aperto a metodi diversi che oggi non conosco.
    in ogni caso grazie a tutti per l'aiuto.

    ciao
  • di pregiudicato_83 (Utente non iscritto) data: 03/12/2016 19:44:15 



    per completezza posto il codice della funzione completo
     
    Function BLOCCA_FORMA(NOME_FORMA, CELLA)
    
        ActiveSheet.Shapes(NOME_FORMA).Top = Range(CELLA).MergeArea.Top + 3
        ActiveSheet.Shapes(NOME_FORMA).Left = Range(CELLA).MergeArea.Left + 3
        ActiveSheet.Shapes(NOME_FORMA).Height = Range(CELLA).MergeArea.Height - 6
        ActiveSheet.Shapes(NOME_FORMA).Width = Range(CELLA).MergeArea.Width - 6
    
    End Function
  • di scossa (Utente esperto) data: 03/12/2016 22:11:14 



    cit.: "mi piacerebbe approfondire la tua osservazione sul nome ..."

    Quello che intendo dire è che non sfrutti appieno la potenzialità dei "nomi" e degli oggetti cui si riferiscono.
    Ti posto sotto come riscriverei il tuo codice.

    P.S.: non ho capito perché hai usato una Function anziché una Sub ...



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)

     
    'nel modulo di classe del Foglio1
    Private Sub CommandButton1_Click()
      Call BLOCCA_FORMA(Me.Shapes("RETTANGOLO_BLU"), [TIPO])
    End Sub
    
    
    'nel modulo standard
    Sub BLOCCA_FORMA(ByRef NOME_FORMA As Shape, ByRef CELLA As Range)
    
      With NOME_FORMA
        .Top = CELLA.Top
        .Left = CELLA.Left
        .Height = CELLA.MergeArea.Height
        .Width = CELLA.Width
      End With
    
    End Sub
  • di pregiudicato_83 (Utente non iscritto) data: 28/12/2016 22:33:57 



    grazie Scossa ad oggi ho mantenuta la mia esecuzione postata tranne per il fatto che l'ho modificata in una sub.
    Prima della tua domanda sulle function, le usavo un po a casaccio, invece adesso ho capito che una function si usa quando voglio restituire un valore ed inoltre posso anche utilizzarla direttamente dal foglio excel.

    cit.: "Quello che intendo dire è che non sfrutti appieno la potenzialità dei "nomi" e degli oggetti cui si riferiscono. "

    questa frase non l'ho capita perchè mi sembra che il tuo codice sia simile al mio nella sostanza tranne che passi direttamente uno shape e non una stringa.

    Grazie comunque Saluti
  • di pregiudicato_83 (Utente non iscritto) data: 28/12/2016 23:46:00 



    metto risolto
  • torna su

Sostieni Excel VBA con una donazione! Con la tua donazione potrai contribuire al mantenimento del servizio.
Le donazioni sono eseguite con PayPal, il modo più facile, comodo e sicuro per pagare online.
Paypal accetta anche carta di credito o carte prepagate.