› Sviluppare funzionalita su Microsoft Office con VBA › togliere colore riga non vuota
-
AutoreArticoli
-
Ciao a tutti.
Nella macro nel workbook allegato nel foglio1 c'è una macro che se aggiungo un valore nella colonna B toglie il colore alla riga.
E' possibile che se tolgo un valore dalla colonna B mi rimette il colore?
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B5:B" & Rows.Count)) Is Nothing Then Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = xlNone End If End SubAllegati:
You must be logged in to view attached files.ciao
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B5:B" & Rows.Count)) Is Nothing Then If Target.Value <> "" Then Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = xlNone Else Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = RGB(234, 234, 234) End If End If End SubCiao @frank_ciccio
hai una serie di richieste ancora aperte. In quelle in cui hai avuto riscontro positivo, dovresti segnarle come RISOLTO
Altrimenti c'è rischio che ti vengano bloccate le nuove richieste.
Grazie.
Ciao mi dà tipo non corrispondente qui
If Target.Value <> "" Then
non nel file allegato, ma in un'altro.
ciao
mi dispiace
non nel file allegato, ma in un'altro.
mica abbiamo visto l'altro
la risposta è inerente al file che hai allegato
dovresti allegare i file esattamente come sono nell'originale
alex
fermo restante che hai ragione
Altrimenti c'è rischio che ti vengano bloccate le nuove richieste.
che mi risulti sono regole di altri forum non di questo
(onestamente ne conosco solo uno che applica il blocco)
sempre che non mi sia sfuggito qualche cosa del regolamento
il paragrafo 7 e 12 non parlano di blocchi ma invitano a chiudere le discussioni
sono regole di altri forum non di questo
Be' in realtà sono regole presenti anche in questo forum. Poi non ci sono vere e proprie sanzioni...infatti ho scritto che dovrebbe chiudere le altre. Di certo applicare un esclusione dal forum è evidente che sia eccessivo, ma il blocco temporale di una nuova richiesta è per far intendere che bisogna dare prima un senso a chi ha offerto del suo tempo al richiedente e al forum.
Il file è un file aziendale
ciao
Il file è un file aziendale
verifica che le celle siano realmente vuote
alex
c'è un malinteso
mai pensato all'esclusione da forum ma al blocco temporaneo della nuova domanda.
gentilmente però mi dici in che articolo è scritto?
(ripeto che hai ragione e richiedere la spunta sul RISOLTO)
Ciao @gianfranco55
cerco di spiegarmi meglio...purtroppo dietro a una tastiera non è mai semplice
Quando hai detto: "che mi risulti sono regole di altri forum non di questo"...non so a quale forum ti riferisca ma se è quello che penso io, in verità non è proprio vero. Nel senso che non sono regole ma c'è un giudizio insindacabile dei moderatori.
In un regolamento, qualunque esso sia, in parallelo agli articoli, ci devono essere delle sanzioni...altrimenti che regolamento sarebbe?
Nei circa 20 articoli del regolamento di questo forum, come hai ben citato, ci sono i seguenti:
7) Dare un riscontro sulla domanda
Non lasciare la tua domanda "in sospeso" dopo aver trovato la soluzione giusta. Una volta trovata una risposta utile, la discussione va marcata come "risolta" premendo l'apposito pulsante in fondo alla discussione.-------------------------------------------------------------------------------------------------------------------------
12) Chiudere le discussioni aperte
Quando una discussione è chiusa, è bene impostarla su "Risolta" mediante l'apposito menu a tendina in cima alla prima discussione. Solo gli utenti registrati possono marcare come risolta una discussione; pertanto gli utenti non registrati dovranno chiedere che ciò venga fatto per loro.Quindi il regolamento prevede che l'OP debba ottemperare a quanto scritto, ma se non lo fa dovrebbe incorrere in una sanzione, proprio perché ha violato un regolamento. Ora, sempre nel regolamento, c'è questo articolo:
15) Mutua collaborazione
Una Comunità è un luogo virtuale dove “convivono” centinaia di persone, per questo sono necessarie delle regole.
I Moderatori e, più in generale il gruppo di Staff, composto da Amministratore e Moderatori, hanno l’ingrato compito di far rispettare il presente regolamento.
Tutti sono tenuti ad ottemperare a quanto richiesto dallo Staff, perché spesso dietro una osservazione ci sono delle motivazioni anche tecniche di gestione del portale. E’ questo un impegno che il Team porta avanti nel tempo libero. Essere collaborativi è utile perché fa perdere meno tempo a tutti e consente una gestione efficace e puntuale della Comunità di ExcelVBA.Come vedi in grassetto ho evidenziato il fatto che le regole vanno rispettate e che i Moderatori hanno il compito di farle rispettare.
Siccome non esistono vere e proprie sanzioni ma allo stesso tempo c'è bisogno di farle rispettare, allora i Moderatori possono applicare, laddove sia necessaria, la giusta sanzione, proprio per far rispettare il regolamento.
Gli unici modi per poterlo fare sarebbero:
- avviso
- richiamo
- blocco della richiesta
- blocco dell'utente
- cancellazione dell'utente
Quindi in conclusione, non esistono vere è proprie sanzioni scritte in questo forum ma si ha comunque facoltà, in base all'art. 15, di trovare un modo per farle rispettare...chiaramente partendo da un semplice avviso, così com'è stato fatto.
Scusa la disamina prolissa ma volevo essere il più chiaro possibile.
Ho estrapolato una parte di file e nell'allegato ora ci sono 2 macro.
La macro che crea problemi alla macro di gianfranco55 post#47142 è
eliminarigaselezionata1_input
nel modulo1.
Questa macro serve per eliminare righe selezionate.
(seleziona una riga nel foglio1 > clicca nel pulsante giallo)
Allegati:
You must be logged in to view attached files.ciao
è perchè eliminando una riga vengono toccate più celle
e mandano in debug la macro messa nel foglio1
(if not intersect.........va in debug se selezioni più celle)
ovviamo al problema così
`Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ex If Not Intersect(Target, Range("B5:B" & Rows.Count)) Is Nothing Then If Target.Value <> "" Then Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = xlNone Else Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = RGB(234, 234, 234) End If End If ex: Exit Sub End Sub`ho visto che hai protetto il foglio
ma se la colonna B deve essere usata perchè non la escludi dalla protezione
poi il pulsante ha scritto cancella ma di fatto elimina non cancella
ciao Alex
tutto giusto
a dire il vero l'articolo 1 lo prevede ma ma parla di off topic
1) Rimanere in argomento
Messaggi concernenti argomenti fuori tema (OT, Off Topic) sono tollerati, ma senza abusarne.
I Moderatori sono autorizzati ad intervenire per reprimere i comportamenti scorretti (con il blocco della discussione o, nel caso estremo, anche con la cancellazione dei messaggi interessati).ma è la prima volta che leggo su questo forum un leggerissimo
avvisto di blocco se non si chiudono le discussioni.
Io onestamente non ho mai bloccato nessuno passata una settimana chiudo io la discussione.
(anche altri fanno come me specialmente in microsoft)
comunque non è importante è solo il mio pensiero
Ora con questa funzione nella macro
On Error GoTo ex
non funziona più correttamente, non toglie il colore ad ogni modifica delle celle colonna B
Allegati:
You must be logged in to view attached files.ciao
certo che non capisco perchè se elimini la riga
e la cella B è vuota non colori di grigio
Nel file post#47158
colore_riga_input_2
ho aggiunto una macro
ordina_ascendente_archivio_input
per elimiare la riga vuota dopo aver cliccato nel pulsante giallo, questa sale di un posto.
Ora se scivi in una cella vuota della colonna B questa non cambia di colore, resta grigia
ciao
è la protezione che impedisce la macro
nel tuo file metti
Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ex If Not Intersect(Target, Range("B5:B" & Rows.Count)) Is Nothing Then ActiveSheet.Unprotect "987654" If Target.Value <> "" Then Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = xlNone Else Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = RGB(234, 234, 234) ActiveSheet.Protect "987654" End If End If ex: Exit Sub End SubSi ora toglie il colore grigio ad ogni inserimento.
Un problema se ora eliminino una riga, questa sale di un posto ma no si sposta la parte di range grigia che è vuota.
Resta una riga bianca o più righe bianche se elimino più di una riga. Deve restare tutto grigio dopo l'ultima riga non vuota.
ciao
prova questa e si sistema la colorazione
`Rows(n).EntireRow.ClearContents 'elimina solo una riga Rows(n).EntireRow.Interior.Color = xlNone 'toglie colori Range(Cells(n, 1), Cells(n, 17)).Interior.Color = RGB(234, 234, 234)`Allegati:
You must be logged in to view attached files.Il maestro delle formule @gianfranco55 è passato al VBA
ciao
Luca
è solo un'eccezione alla regola
se sono cosette semplici riesco a smanettarci
Io avrei lasciato tutto come all'inizio e avrei modificato solo la macro ordina
`Sub ordina_ascendente_archivio_input() 'data creazione Dim I 'foglio archivio input abbin. elimina righe ActiveWorkbook.Worksheets("Archivio_input").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Archivio_input").Sort.SortFields.Add Key:=Range( _ "B5:B303"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Archivio_input").Sort .SetRange Range("A4:Q303") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With For I = 5 To 303 If Range("B" & I) = "" Then Range("A" & I & ":Q" & I).Interior.Color = RGB(234, 234, 234) End If Next ActiveSheet.Protect "987654" End Sub`Allegati:
You must be logged in to view attached files.Grazie oscar e gianfranco55 è ok per tutti e due.
Ciao @frank_ciccio
secondo me non hai bisogno di tutto quel codice. Ti basta la Formattazione Condizionale.
Allora prova a seguire questi passaggi:
1) Elimina innanzitutto ogni codice negli eventi dei Fogli
2) Seleziona l'intervallo A5:Q fino alla fine del foglio (per farlo velocemente, dopo che hai selezionato il range A5:Q5, tieni premuto SHIFT + CTRL e premi la freccia direzionale verso il basso. Premi tante volte finché non arrivi all'ultimo rigo del Foglio.
3) Selezionato il range, colora il fondo di grigio
4) Sempre a range selezionato, vai in scheda Home --> Formattazione Condizionale --> Nuova Regola --> Scrivi questo =$B5<>"" nel rigo delle formule --> Poi premi su "OK"
adesso vedrai che quando scrivi qualcosa in una cella incolonna "B" , quel rigo, da A a Q, diventa bianco. Se cancelli ciò che è scritto, sempre in colonna "B", il rigo torna grigio.
5) Inserisci questo codice al posto di quello che hai già in tuo possesso:
Option Explicit Sub eliminarigaselezionata1_input() Dim avviso As Byte If ActiveCell.Row < 5 Then MsgBox "Le prime 4 righe non possono eliminare!!!", vbCritical, "ATTENZIONE!" Exit Sub End If If Trim(Range("A5")) = "" Then MsgBox "Non c'è niente da eliminare!", vbExclamation, "AVVISO" Exit Sub End If avviso = MsgBox("elimino riga < " & ActiveCell.Row & " > selezionata?", vbYesNo + vbQuestion, "ATTENZIONE!") If avviso = vbNo Then Exit Sub Application.ScreenUpdating = False ActiveSheet.Unprotect "987654" ActiveCell.EntireRow.ClearContents 'elimina solo una riga Call ordina_ascendente_archivio_input ActiveCell.Offset(1).Select '<-- nuova riga inserita ActiveSheet.Protect Password:="987654", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True Application.ScreenUpdating = True End Sub Sub ordina_ascendente_archivio_input() 'data creazione 'foglio archivio input abbin. elimina righe ActiveWorkbook.Worksheets("Archivio_input").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Archivio_input").Sort.SortFields.Add Key:=Range( _ "B5:B303"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Archivio_input").Sort .SetRange Range("A4:Q303") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End SubPoi altra cosa...come avviene la protezione del Foglio? Lo fai manualmente la prima volta oppure all'avvio del File nell'evento Open del WorkBook c'è l'istruzione che protegge?
Se così fosse, puoi evitare ogni qual volta di inserire nelle varie macro
Unprotecte poiProtect.Quando fai ricorso al metodo Worksheet.Protect, tra i parametri opzionale esiste UserInterfaceOnly che se lo imposti a TRUE fai sì che il Foglio rimane comunque protetto ma le macro restano libere di agire su di esso. Così ti eviti ogni volta di sproteggere e proteggere il Foglio.
🤣
lo sapevo che smanettando la macro
attivavo i VBAISTI😂😂😂😂
Grazie anche a te alexps81
-
AutoreArticoli
