Discussione:
Formato celle con VBA
(troppo vecchio per rispondere)
Roberto
2009-06-14 22:15:18 UTC
Permalink
Quello che desidero fare è, posizionando il cursore in una cella,
poniamo A10, barrare il contenuto da A10 a T10.
Fin qui tutto bene, con la seguente routine:

Sub barracelle()
Dim riga As Integer
With Worksheets("Foglio1")
riga = ActiveCell.Row
.Range(.Cells(riga, 1), .Cells(riga, 20)).Font.Strikethrough = True
End With
End Sub

Non riesco, però, a trovare il modo di ottenere lo stesso risultato
selezionando più celle consecutive: ad esempio, selezionando A10:A15,
impostare su barrato il range A10:T15 (questo per evitare - ovviamente -
di ripetere5/6 o più volte la stessa operazione).
Dovrei riuscire a farlo in modo flessibile, perché non conosco a priori
l'altezza dei vari range che devo barrare nel foglio: potrebbero essere
una singola riga (già risolto nell'esempio che ho riportato), oppure
diverse righe.

Un aiutino?
Grazie!

Roberto
eliano
2009-06-15 01:27:01 UTC
Permalink
Post by Roberto
Quello che desidero fare è, posizionando il cursore in una cella,
poniamo A10, barrare il contenuto da A10 a T10.
Sub barracelle()
Dim riga As Integer
With Worksheets("Foglio1")
riga = ActiveCell.Row
..Range(.Cells(riga, 1), .Cells(riga, 20)).Font.Strikethrough = True
End With
End Sub
Non riesco, però, a trovare il modo di ottenere lo stesso risultato
selezionando più celle consecutive: ad esempio, selezionando A10:A15,
impostare su barrato il range A10:T15 (questo per evitare - ovviamente -
di ripetere5/6 o più volte la stessa operazione).
Dovrei riuscire a farlo in modo flessibile, perché non conosco a priori
l'altezza dei vari range che devo barrare nel foglio: potrebbero essere
una singola riga (già risolto nell'esempio che ho riportato), oppure
diverse righe.
Ciao Roberto.
In qualche modo dovrai pure dirglielo.:-))
Un modo:

Sub barracelle()
Dim rng As String
rng = InputBox("Inserire il Range da trattare; es. A10:T15")
Range(rng).Font.Strikethrough = True
End Sub

Eliano
Roberto
2009-06-15 10:53:13 UTC
Permalink
Post by Roberto
Quello che desidero fare è, posizionando il cursore in una cella,
poniamo A10, barrare il contenuto da A10 a T10.
Sub barracelle()
Dim riga As Integer
With Worksheets("Foglio1")
riga = ActiveCell.Row
..Range(.Cells(riga, 1), .Cells(riga, 20)).Font.Strikethrough = True
End With
End Sub
Non riesco, però, a trovare il modo di ottenere lo stesso risultato
selezionando più celle consecutive: ad esempio, selezionando A10:A15,
impostare su barrato il range A10:T15 (questo per evitare - ovviamente -
di ripetere5/6 o più volte la stessa operazione).
Dovrei riuscire a farlo in modo flessibile, perché non conosco a priori
l'altezza dei vari range che devo barrare nel foglio: potrebbero essere
una singola riga (già risolto nell'esempio che ho riportato), oppure
diverse righe.
Ciao  Roberto.
In qualche modo dovrai pure dirglielo.:-))
Sub barracelle()
Dim rng As String
rng = InputBox("Inserire il Range da trattare; es. A10:T15")
Range(rng).Font.Strikethrough = True
End Sub
Eliano- Nascondi testo citato
- Mostra testo citato -
Ciao Eliano,
Certo! così è ok, avevo pensato a una soluzione con Inputbox. Siccome
è un'operazione che nel foglio di lavoro devo compiere svariate volte,
mi chiedevo se esiste una soluzione più rapida! Sono incontentabile!
Però penso che dovrò "piegarmi" a Inputbox.
Grazie per la risposta!
Roberto
Mauro Gamberini
2009-06-15 12:47:04 UTC
Permalink
Siccome
è un'operazione che nel foglio di lavoro devo compiere svariate volte,
mi chiedevo se esiste una soluzione più rapida! Sono incontentabile!
Però penso che dovrò "piegarmi" a Inputbox.
***************************************************

Ponendo la cella A10 come cella
di partenza, quale è la cella di arrivo?
In qualche modo dobbiamo sapere
quali sono le celle...

Oppure le selezioni *prima*, poi:

With Selection.Font
.Underline = xlUnderlineStyleSingle
End With
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://blog.maurogsc.eu/
Roberto
2009-06-15 20:44:33 UTC
Permalink
Ponendo la cella A10 come cella
: di partenza, quale è la cella di arrivo?
: In qualche modo dobbiamo sapere
: quali sono le celle...
: --

l'idea sarebbe, selezionando diverse celle contigue poste nella stessa
colonna (esempio: A2:A7), avere una routine che selezioni tutto il range
A2:T7 (cosa che sono riuscito ad ottenere solo nell'esempio riportato,
ma che funziona solo su un riga). Un'altra difficoltà è che dovrei fare
questo su un foglio di un centinaio di righe, di cui circa la metà
sarebbe da barrare, ma a gruppi variabili di 1/2/3...6/7 righe.
Mi sa che continuo a fare manualmente con il vecchio CTRL + freccia giù
e CTRL + freccia destra...
Roberto
eliano
2009-06-15 23:42:01 UTC
Permalink
Post by Roberto
Ciao Eliano,
Certo! così è ok, avevo pensato a una soluzione con Inputbox. Siccome
è un'operazione che nel foglio di lavoro devo compiere svariate volte,
mi chiedevo se esiste una soluzione più rapida! Sono incontentabile!
Però penso che dovrò "piegarmi" a Inputbox.
Grazie per la risposta!
Roberto
Mah, Roberto, l'unica cosa certa (forse) sembra essere la colonna di inizio
e la colonna di fine barratura, mentre le righe sembrano variabili sia come
inizio che come fine.
Piegati, piegati che qualche flessione aiuta a restare in forma.:-))
Al massimo inserisci un Msgbox contenente il range digitato onde controllare
eventuali errori, oppure inserisci in un gruppo di celle i diversi range da
barrare, da trattare poi con una semplice iterazione.
Saluti
Eliano
Nur
2009-06-15 15:07:01 UTC
Permalink
Post by Roberto
Quello che desidero fare è, posizionando il cursore in una cella,
poniamo A10, barrare il contenuto da A10 a T10.
[...]
Post by Roberto
Non riesco, però, a trovare il modo di ottenere lo stesso risultato
selezionando più celle consecutive: ad esempio, selezionando A10:A15,
impostare su barrato il range A10:T15 (questo per evitare - ovviamente -
di ripetere5/6 o più volte la stessa operazione).
Dovrei riuscire a farlo in modo flessibile, perché non conosco a priori
l'altezza dei vari range che devo barrare nel foglio: potrebbero essere
una singola riga (già risolto nell'esempio che ho riportato), oppure
diverse righe.
--------------------------------
Buongiorno Roberto.
Se questo è quello che desideri ottenere:
Dato un range di n righe che va dalla colonna A alla T (colonna 20),
all'interno del range:
1) selezionando una qualsiasi cella, tutte le celle di quella riga saranno
barrate:
es: selezioni [B1] => [A1:T1] barrato
2) selezionando più celle adiacenti o non adiacenti, tutte le celle delle
righe corrispondenti, verranno barrate
es: selezioni [B1:B3] => [A1:T3] barrato
selezioni [A1:A3,C5,D8] => barrati: [A1:T3] [A5:T5] [A8:T8]

Puoi provare così:
'------------------------------
Public Sub barracelle()
Const MyCol As Long = 20 'inserisci il numero di massimo di colonna del
range che
' ti interessa (es.: T=20)
Dim MyRng As Excel.Range
Dim n As Long

If TypeName(Selection) = "Range" Then
If Intersect(Selection, ActiveSheet.Columns(1).Resize(, MyCol)) Is Nothing
Then
'do nothing
Else
With Selection
Set MyRng = .Areas(1)
For n = 1 To .Areas.Count
Set MyRng = Union(MyRng, .Areas(n).Offset(, -(.Areas(n).Column -
1)).Resize(, MyCol))
Next
End With
MyRng.Font.Strikethrough = True
End If
Else
End If
Set MyRng = Nothing
End Sub
'---------------------------

L'unico 'vantaggio' rispetto a Selection.Font.Strikethrough = True è che non
è necessario selezionare tutte le celle interessate (ne basta una per riga,
anche per righe non adiacenti).
Valuta tu se ne vale la pena.

Ciao, Nur
Roberto
2009-06-15 20:52:42 UTC
Permalink
: --------------------------------
: Buongiorno Roberto.
: Se questo è quello che desideri ottenere:
: Dato un range di n righe che va dalla colonna A alla T (colonna 20),
: all'interno del range:
: 1) selezionando una qualsiasi cella, tutte le celle di quella riga
saranno
: barrate:
: es: selezioni [B1] => [A1:T1] barrato
: 2) selezionando più celle adiacenti o non adiacenti, tutte le celle
delle
: righe corrispondenti, verranno barrate
: es: selezioni [B1:B3] => [A1:T3] barrato
: selezioni [A1:A3,C5,D8] => barrati: [A1:T3] [A5:T5] [A8:T8]
:
: Puoi provare così:
: '------------------------------
: Public Sub barracelle()
: Const MyCol As Long = 20 'inserisci il numero di massimo di colonna
del
: range che
: ' ti interessa (es.: T=20)
: Dim MyRng As Excel.Range
: Dim n As Long
:
: If TypeName(Selection) = "Range" Then
: If Intersect(Selection, ActiveSheet.Columns(1).Resize(, MyCol)) Is
Nothing
: Then
: 'do nothing
: Else
: With Selection
: Set MyRng = .Areas(1)
: For n = 1 To .Areas.Count
: Set MyRng = Union(MyRng,
.Areas(n).Offset(, -(.Areas(n).Column -
: 1)).Resize(, MyCol))
: Next
: End With
: MyRng.Font.Strikethrough = True
: End If
: Else
: End If
: Set MyRng = Nothing
: End Sub
: '---------------------------
:
: L'unico 'vantaggio' rispetto a Selection.Font.Strikethrough = True è
che non
: è necessario selezionare tutte le celle interessate (ne basta una per
riga,
: anche per righe non adiacenti).
: Valuta tu se ne vale la pena.
:
: Ciao, Nur

Ciao Nur, la provo (e la studio) perché è qualcosa che non sapevo fare
prima, ma a livello di praticità, come dicevo nella risposta a Mauro,
penso che sia meglioselezionare manualmente le celle e poi barrare con
qualcosa di semplice del tipo

With selection
.font. Strikethrough=true
end with

Grazie
Roberto
Nur
2009-06-16 10:10:39 UTC
Permalink
Post by Roberto
: Ciao, Nur
Ciao Nur, la provo (e la studio) perché è qualcosa che non sapevo fare
prima, ma a livello di praticità, come dicevo nella risposta a Mauro,
penso che sia meglioselezionare manualmente le celle e poi barrare con
qualcosa di semplice del tipo
With selection
.font. Strikethrough=true
end with
Grazie
Roberto
-------------------------------------------------
Buongiorno Roberto.
Se proverai quello che ho postato, otterrai questo risultato (spero):
non avrai bisogno di selezionare tutte le celle di ogni riga (il tuo CTRL+
freccia dx) ma ti basterà selezionare *una qualsiasi* cella per ogni riga
che vorrai barrare.
Non una riga alla volta, anche *tutte* quelle che vuoi in una sola volta.
Esempio: selezioni A1:A5, B7:B8;A12:A25 => esegui la macro
otterrai che le righe da 1 a 5, da 7 a 8, da 12 a 25 della
tua tabella, saranno barrate

In effetti questo l'avevo già scritto nell'altro post, qui ho solo cercato
di esprimermi in un altro modo, sperando di chiarirne meglio lo scopo.

Il fatto è che mi sfugge qualcosa.
Tu dici che a livello di praticità 'è meglio selezionare manualmente le
celle e poi usare .font. Strikethrough=true.'
Ma io non riesco a capire, una volta selezionate a mano tutte le celle,
quale sia il vantaggio di far fare a una macro quello che già di suo fa il
menù formato di excel (puoi anche mettere l'icona 'barrato' sulla barra
degli strumenti).

Ciao, Nur
Roberto
2009-06-21 22:37:29 UTC
Permalink
: Buongiorno Roberto.
: Se proverai quello che ho postato, otterrai questo risultato (spero):
: non avrai bisogno di selezionare tutte le celle di ogni riga (il tuo
CTRL+
: freccia dx) ma ti basterà selezionare *una qualsiasi* cella per ogni
riga
: che vorrai barrare.
: Non una riga alla volta, anche *tutte* quelle che vuoi in una sola
volta.
: Esempio: selezioni A1:A5, B7:B8;A12:A25 => esegui la macro
: otterrai che le righe da 1 a 5, da 7 a 8, da 12 a 25
della
: tua tabella, saranno barrate
:
: In effetti questo l'avevo già scritto nell'altro post, qui ho solo
cercato
: di esprimermi in un altro modo, sperando di chiarirne meglio lo scopo.
:
: Il fatto è che mi sfugge qualcosa.
: Tu dici che a livello di praticità 'è meglio selezionare manualmente
le
: celle e poi usare .font. Strikethrough=true.'
: Ma io non riesco a capire, una volta selezionate a mano tutte le
celle,
: quale sia il vantaggio di far fare a una macro quello che già di suo
fa il
: menù formato di excel (puoi anche mettere l'icona 'barrato' sulla
barra
: degli strumenti).
:
: Ciao, Nur

Ciao Nur, scusa se ti ringrazio solo adesso!
Roberto

Continua a leggere su narkive:
Loading...