Condividi tramite

Tabella: cambiare valore ultima cella della tabella su riga selezionata in con macro specifica

Anonimo
2023-11-06T16:08:28+00:00

Buonasera

Come già sottolineato in un precedente post:

"purtroppo non sono affatto esperto nella compilazione dei codici.

Ho fatto un patchwork di vari codici nei limiti delle mie conoscenze...limiti evidentemente disarmanti per voi professionisti.

Ho avuto la malsana idea di recuperare un paio di lavori per definire quanto segue, ma purtroppo nonostante varie prove non riesco a raggiungere il mio obiettivo.

Mi scuso in anticipo per gli errori che certamente riscontrerete e per la compilazione rude ed imprecisa."

Sulla base di questa macro, vorrei assegnare un valore all'ultima cella della riga attiva


Sub ImpostaSfondoRigaTabella(PRESOorPERSOorSBY As String)

Dim vColor As Long

Dim oLO As ListObject

Dim iRiga As Long

Select Case PRESOorPERSOorSBY

  Case "PRESO" 

     vColor = 5296274 

  Case "PERSO" 

     vColor = 255 

  Case "SBY" 

     vColor = xlNone 

End Select

Set oLO = ActiveSheet.ListObjects(1)

With oLO

  iRiga = ActiveCell.Row - .Range.Row 

  .ListRows(iRiga).Range.Interior.Color = vColor 

End With

End Sub


quindi ho aggiunto (in rosso):


Sub ImpostaSfondoRigaTabella(PRESOorPERSOorSBY As String)

Dim vColor As Long

Dim oLO As ListObject

Dim iRiga As Long

Select Case PRESOorPERSOorSBY

  Case "PRESO" 

     vColor = 5296274 

     ActiveCell.End(xlToRight) = "1" 

  Case "PERSO" 

     vColor = 255 

     ActiveCell.End(xlToRight) = "2" 

  Case "SBY" 

     vColor = xlNone 

     ActiveCell.End(xlToRight) = "0" 

End Select

Set oLO = ActiveSheet.ListObjects(1)

With oLO

  iRiga = ActiveCell.Row - .Range.Row 

  .ListRows(iRiga).Range.Interior.Color = vColor 

End With

End Sub


Ma purtroppo non lavora come desiderato, in quanto non sovrascrive l'ultima cella della tabella (colonna Colore), bensì la successiva piena nella riga attiva:

quindi nelle prime due righe va male perché era già scritto qualcosa, nelle successive va bene in quanto i campi sono liberi fino alla cella desiderata.

Riuscireste a suggerirmi per favore un comando opportuno?

Vi ringrazio anticipatamente

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
    2023-11-07T08:30:28+00:00

    Ho notato che se blocco il foglio ricevo un errore, ho provato a spuntare tutte le voci sul menù di blocco, ma comunque mi genera un anomalia.

    Il foglio è protetto senza psw in quanto serve solo ad evitare cancellazioni accidentali di alcune celle dove ci sono delle formule, quindi potrei sbloccare il foglio ogni volta si attiva la macro...ma si può evitare?

    Usa:

    Activesheet.Unprotect
    

    in testa al codice e poi

    Activesheet.Protect
    

    in coda per ripristinare la protezione del foglio,

    ciao e grazie del riscontro.

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
    2023-11-06T16:26:34+00:00

    Puoi usare i riferimenti di tabella:

    Sub ImpostaSfondoRigaTabella(PRESOorPERSOorSBY As String) 
    
    Dim vColor As Long 
    
    Dim oLO As ListObject 
    
    Dim iRiga As Long 
    
    Dim intValue As Integer 
    
        Select Case PRESOorPERSOorSBY 
    
            Case "PRESO" 
    
                vColor = 5296274 
    
                intValue = 1 
    
            Case "PERSO" 
    
                vColor = 255 
    
                intValue = 2 
    
            Case "SBY" 
    
                vColor = xlNone 
    
                intValue = 0 
    
        End Select 
    
        With ActiveSheet.ListObjects(1) 
    
            iRiga = ActiveCell.Row - .Range.Row 
    
            .ListRows(iRiga).Range.Interior.Color = vColor 
    
            .ListColumns("Colore").Range.Cells(iRiga + 1, 1).Value = intValue 
    
        End With 
    
    End Sub
    

    Io ho preferito valori integer, ma se ti servono stringa modifica pure la dichiarazione e l'assegnazione nel Select.

    Ciao.

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2023-11-06T17:03:51+00:00

    Ho notato che se blocco il foglio ricevo un errore, ho provato a spuntare tutte le voci sul menù di blocco, ma comunque mi genera un anomalia.

    Il foglio è protetto senza psw in quanto serve solo ad evitare cancellazioni accidentali di alcune celle dove ci sono delle formule, quindi potrei sbloccare il foglio ogni volta si attiva la macro...ma si può evitare?

    0 commenti Nessun commento
  2. Eliminata

    Questa risposta è stata eliminata a causa di una violazione del codice di comportamento. La risposta è stata segnalata manualmente o identificata tramite il rilevamento automatizzato prima dell'esecuzione dell'azione. Per ulteriori informazioni, fai riferimento al codice di comportamento.


    I commenti sono stati disattivati. Ulteriori informazioni

  3. Anonimo
    2023-11-06T16:47:28+00:00

    Grazie mille Eleuterio

    Così è perfetto

    0 commenti Nessun commento