Altezza di Range di celle unite
Hai un problema con Excel? 
Altezza di Range di celle unite
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 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 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 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 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 data: 03/12/2016 19:13:37
ho modificato la mia prima risposta
di scossa 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 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
Vuoi Approfondire?