macro risaltare riga e colonna
Hai un problema con Excel? 
macro risaltare riga e colonna
di jack&john (utente non iscritto) data: 17/12/2015 10:10:44
ho creato una macro per risaltare riga e colonna dove si è posizionati con il mouse (utile nelle taelle con abbastanza dati). ll problema è che mi colora tutto il fglio di nero. Allego file di esempio.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
'Step 1: Declare Variables
Dim strRange As String
'Step 2:Build the range string
strRange = Target.Cells.Address & ", " & _
Target.Cells.EntireColumn.Address & ", " & _
Target.Cells.EntireRow.Address
'Step 3: Pass the range string
Range(strRange).Select
End Sub
|
di jack&john (utente non iscritto) data: 17/12/2015 10:13:58
avrei anche un'altra proposta pero quest'ultima mi cambia il colore delle altre celle comprese le intestazioni della tabella...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Cells.Interior.ColorIndex = 0
Target.EntireRow.Interior.ColorIndex = 42
End Sub |
di Mister_x (utente non iscritto) data: 17/12/2015 11:16:19
ciao
altra possibilita'
ciao
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlNone
ActiveCell.EntireRow.Interior.ColorIndex = 6
ActiveCell.EntireColumn.Interior.ColorIndex = 6
End Sub
|
di Mister_x (utente non iscritto) data: 17/12/2015 11:33:45
ciao
altra soluzione trovata nelle mie scartoffie
mette un righello sotto alla cella selezionata ma non modifica nessun valore delle celle, colore e altro
ciao
Sub Worksheet_SelectionChange(ByVal Target As Range)
NewTarget = Target.Address
If OldTarget = NewTarget Then Exit Sub
Dim altezza As Long ''Altezza cella o Riga
On Error Resume Next
ActiveSheet.Shapes.Range(Array("Righello")).Select
Selection.Delete
altezza = Selection.RowHeight ''Rilevamento Altezza cella o Riga
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 5, 0, 1000, 0).Select '850
Selection.ShapeRange.Name = "Righello"
Selection.Name = "Righello"
Selection.Cut
Riga = Target.Row
ActiveSheet.Paste
With Selection.ShapeRange.Line
.Visible = msoTrue
.Weight = 5 ''Spessore linea
.ForeColor.SchemeColor = 10 ''colore linea
'''.PrintObject = False
End With
Selection.ShapeRange.IncrementLeft -5000
Selection.ShapeRange.IncrementTop altezza + 5 ''Incremento dello spostameto linea angolo top cella
Target.Select
OldTarget = NewTarget
End Sub
|
di jack&john (utente non iscritto) data: 17/12/2015 11:54:25
grazie mille mr x pero mi piacerebbe di piu poter rislatare solamente la riga (senza colonna) e senza che mi cambi il colore per lo meno delle intestazioni delle varie colone. si puo fare?
di Mister_x (utente non iscritto) data: 17/12/2015 12:04:09
ciao
prova la seconda soluzione
ciao
di jack&john (utente non iscritto) data: 17/12/2015 12:48:05
grazie mr x pero preferirei mantenere una delle mie proposte ovviando ai problemini che mi danno.
non c'è modo di limitarlo e di saltare solamente la prima riga (dove ho le intestazioni colorate della tabella)?
di Mister_x (utente non iscritto) data: 17/12/2015 13:04:55
ciao
definire con Range()
ciao
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("A2:Z1000").Interior.ColorIndex = xlNone
Range(Cells(Target.Row, "A"), Cells(Target.Row, "Z")).Interior.ColorIndex = 6
Range(Cells(2, Target.Column), Cells(1000, Target.Column)).Interior.ColorIndex = 6
End Sub
|
di jack&john (utente non iscritto) data: 17/12/2015 13:24:35
mr x finalmente ho deciso.
vorrei usare la macro che riporto qui sotto. attualmente funziona col doppio click. non c'è modo di farla funzionare semplicemente selezionando una cella qualsiasi?
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Step 1: Declare Variables
Dim strRange As String
'Step 2:Build the range string
strRange = Target.Cells.Address & ", " & _
Target.Cells.EntireColumn.Address & ", " & _
Target.Cells.EntireRow.Address
'Step 3: Pass the range string
Range(strRange).Select
End Sub |
di jack&john (utente non iscritto) data: 17/12/2015 13:27:19
allego file "esempio2"
di BS (utente non iscritto) data: 17/12/2015 15:22:14
ciao
prova ad inserire questo
dovrebbe essere quello che cerchi
l'ho trovata facendo una ricerca per un'altra mia applicazione
ciao
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim A1, R1, C1
If Target.Count > 1 Then
ActiveCell.Select
Exit Sub
End If
A1 = Target.Address(0, 0)
R1 = Target.Row
C1 = Replace(A1, R1, "")
Application.EnableEvents = False
Range(R1 & ":" & R1 & "," & C1 & ":" & C1).Select
Range(Intersect(Range(R1 & ":" & R1), Range(C1 & ":" & C1)).Address).Activate
Application.EnableEvents = True
End Sub
|
di Albatros54 data: 17/12/2015 16:03:39
Prova il codice sotto
Ciao
albatros54
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim wi As Window
Set wi = ActiveWindow
Cells.Interior.ColorIndex = xlNone
Target.Interior.ColorIndex = 8
For i = wi.VisibleRange.Rows(1).Row To Target.Row - 1
Cells(i, Target.Column).Interior.ColorIndex = 36
Next i
For i = wi.VisibleRange.Columns(1).Column To Target.Column - 1
Cells(Target.Row, i).Interior.ColorIndex = 36
Next i
End Sub
|
di Mister_x (utente non iscritto) data: 17/12/2015 16:10:41
ciao
METODO DA SPARARSI UN COLPO
mi rivolgo anche a BS
non avete provato le conseguenze ad adottare questo metodo
Prova semplice
attivate questa sub() e dopo andate su quel bel tastino che si chiama ( canc o del ) e con il vostro ditino provate a confermare
a voi le conseguenze e ai posteri l'ardua sentenza
ciao
di Mister_x (utente non iscritto) data: 17/12/2015 16:20:52
riciao
PS nella mia avevo dimenticato il controllo alla riga 1 inserito
riciao
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row = 1 Then Exit Sub
Range("A2:Z1000").Interior.ColorIndex = xlNone
Range(Cells(Target.Row, "A"), Cells(Target.Row, "Z")).Interior.ColorIndex = 6
Range(Cells(2, Target.Column), Cells(1000, Target.Column)).Interior.ColorIndex = 6
End Sub
|
di Marius44 data: 17/12/2015 16:43:06
Non mi ricordo più se ho trovato in rete ovvero se l'ho fatto io (comunque, se è di qualcuno si faccia avanti).
Prova questa macro e dimmi come ti pare.
Ciao a tutti,
Mario
Private Sub Worksheet_SelectionChange(ByVal Obiettivo As Range)
Dim Indirizzo, Riga, Colonna
If Obiettivo.Count > 1 Then Exit Sub
Indirizzo = Obiettivo.Address(0, 0)
Riga = Obiettivo.Row
Colonna = Replace(Indirizzo, Riga, "")
'Application.EnableEvents = False
Range(Riga & ":" & Riga & "," & Colonna & ":" & Colonna).Select
Range(Intersect(Range(Riga & ":" & Riga), Range(Colonna & ":" & Colonna)).Address).Activate
'Application.EnableEvents = True
End Sub |
di jack&john (utente non iscritto) data: 17/12/2015 17:13:36
marius la tua soluzione è quella che fa per me.
nel caso in cui volessi evidenziare solamente la riga e non piu la colonna, come si dovrebbe modificare la macro?
di Mister_x (utente non iscritto) data: 17/12/2015 17:34:29
ciao
ciao anche a te Mario
ripeto sempre quello che ho scritto prima
se attivate la riga e la colonna
( purtroppo su qualsiasi tastiera ESISTE quel piccolissimo tasto in altro a destra denominato
CANC o DEL ) a meno che prendete un piccolo cacciavite e lo eliminate??????????
ripeto e mi ripeto se fossi io ad usare quel file e mi capita una cosa cosi , le maledizioni che manderei a chi a programmato , non vi dico quali sono ma lascio a voi intenderle
PS per il nostro amico , io adotterei il sistema dello Shapes in quanto dici nel tuo ultimo di non attivare la colonna, e se ho anche celle colorate questi non ha nessuna influenza essendo una forma
ciao ciao
di Marius44 data: 17/12/2015 20:44:37
@mister_X
Ciao,
ovviamente mi astengo dal provare viste ... le paventate conseguenze.
Mi chiedo, però, oltre a metterci sul chi va là non potresti dirci a quale disastro andremmo incontro, magari per sommi capi ma tanto per farci capire.
Mi astengo, altresì, dal suggerire all'utente come fare circa la sua ultima domanda.
Aspetto tue nuove.
Ciao,
Mario
di Mister_x (utente non iscritto) data: 17/12/2015 23:42:25
ciao Mario
sono appena rientrato e ho visto il tuo intervento
la cosa e' molto semplice da provare
prendi un foglio e riempi un po di celle con dei varlori
fai partire la sub() posizionandoti in mezzo a questi valori
adesso prova a sciacciare il tasto Canc o del e vedi cosa succede
immagina questo su un file di primanota o altro, dove ai moltissimi record cosa ti potrebbe succedere a questo punto
quanti dati andranno persi?????
ciao
di Raffaele_53 data: 18/12/2015 04:32:13
Che Marius44, abbia selezionato riga e colonna. OK come per il tasto CANC
Il quesito rimane,l'utente cosa vuole fare?
Cancellare riga/colonna? Colorarle? Oppure solo cancellare/colorare la cella prescelta?
Mancherebbe solo un IF per fare il tutto.
di Marius44 data: 18/12/2015 07:58:17
In effetti Mister_X ha ragione: in un foglio di primanota ....
Ho ripensato il tutto e, limitando l'area da colorare (non l'intera riga e colonna) anche se si preme Canc ancella solo il dato in quella cella.
Ciao a tutti,
Mario
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rowNumberValue As Integer, columnNumberValue As Integer, i As Integer, j As Integer
If Not Intersect(Target, Range("$A$7:$AI$46")) Is Nothing Then
Cells.Interior.ColorIndex = 0
rowNumberValue = ActiveCell.Row
columnNumberValue = ActiveCell.Column
For i = 7 To rowNumberValue
Cells(i, columnNumberValue).Interior.ColorIndex = 37
Next i
For j = 1 To columnNumberValue
Cells(rowNumberValue, j).Interior.ColorIndex = 37
Next j
End If
End Sub |
di BS (utente non iscritto) data: 18/12/2015 09:41:52
mister_x hai ragione, in effetti non avevo testato le conseguenze
ho fatto delle ricerche ed ho inserito un artefizio (premetto che non è farina del mio sacco ma ho fatto ricerca con una logica)
prova a dare un'occhio al file che ho aggiunto
e dimmi se potrebbe essere funzionale
grazie mille
quando posso seguo sempre il vs forum e ... non ho parole .... miticooooo
buona giornata
di Mister_x (utente non iscritto) data: 18/12/2015 14:58:00
ciao Mario ciao BS
mario provata la tua nuova sub() ma, a parte i i vari cicli for, rimane sempre un refuso di colore nelle varie celle
BS in questo modo tu escludi il tasto Canc , ma vi sono altri problemi che si verranno a trovare strada facendo
non sto qui ad elencarteli tutti
il primo era il tasto Canc , il secondo e' il comando Copia con i suoi comandi annessi , taglia incolla ecc ecc
trascinamento delle celle , ed altro
ciao
di BS (utente non iscritto) data: 18/12/2015 15:15:22
OK .. mister_x
compreso la complessità
grazie mille
di Marius44 data: 18/12/2015 16:58:44
Allego il mio file che, a mio parere, non presenta nessun refuso di colore nè problemi riguardanti il copia/incolla, taglia, ecc.
I "cicli" sono solo due: una per la riga ed uno per la colonna (forse si potrebbero unificare).
Ciao,
Mario
di jack&john (utente non iscritto) data: 18/12/2015 21:37:07
marius complimenti per la macro.
potresti scrivere anche una macro alternativa per colorare solamente la riga?
di Marius44 data: 19/12/2015 00:05:46
come puoi vedere, nella macro vi sono due cicli For ... Next.
Il primo colora la riga della cella attiva mentre il secondo colora la colonna.
Elimina quello che non ti serve ed hai risolto.
Ciao,
Mario
di Albatros54 data: 19/12/2015 11:47:36
Non per essere pignoli, ma la macro che ho postato io,cosa aveva che non andava? forse perchè interessava tutte le celle?
Ciao
albatros54
di jack&john (utente non iscritto) data: 21/12/2015 08:44:35
marius, potresti modificare la tua macro per far si che colora solamente tutta la riga? indipendentemente della cella selezionata? per esempio se posiziono il cursore su A4, B4 o C4 ecc... mi colora sempre tutta la riga 4.
di Marius44 data: 21/12/2015 09:33:35
Nella seconda macro che ho postato metti l'apice singolo davanti alle righe che si riferiscono alla riga (cioè fai come sotto) e vedi se ti va bene.
Ciao,
Mario
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rowNumberValue As Integer, columnNumberValue As Integer, i As Integer, j As Integer
If Not Intersect(Target, Range("$A$7:$AI$46")) Is Nothing Then
Cells.Interior.ColorIndex = 0
rowNumberValue = ActiveCell.Row
columnNumberValue = ActiveCell.Column
'For i = 7 To rowNumberValue ANNULLA
' Cells(i, columnNumberValue).Interior.ColorIndex = 37 ANNULLA
'Next i ANNULLA
For j = 1 To columnNumberValue
Cells(rowNumberValue, j).Interior.ColorIndex = 37
Next j
End If
End Sub |
di jack&john (utente non iscritto) data: 21/12/2015 10:26:14
sembra che non mi colori tutta la riga..
se per esempio posiziono il cursore in C4, mi colora solamente A4, B4 e C4 invece di tutta la riga 4..
di Marius44 data: 21/12/2015 14:51:29
Non mi pare necessario colorare tutta la riga ma fino alla colonna che ti interessa. Per esempio se clicco in C4 mi basta che colori A4:Z4 oppure A4:AZ4 ecc.
in questo caso nel ciclo For ... Next al posto di
columnNumberValue
metti il numero della colonna fino a dove vuoi che si veda il colore.
Ciao,
Mario
Vuoi Approfondire?