Condividi tramite

Macro CANCELLA contenuto celle con CONDIZIONE

Anonimo
2015-05-21T13:06:42+00:00

Buongiorno.

Nel mio file excel ho impostato un pulsante con associata la seguente macro:

Sub Cancella()

Sheets("Foglio1").Select ' o il nome del tuo foglio

 Dim SH As Worksheet

     Dim lng As Long

     Dim lRisposta As Long

     lRisposta = MsgBox(Prompt:="VUOI VERAMENTE PULIRE LE CELLE A F I ?", _

         Title:="Attenzione", _

         Buttons:=vbYesNoCancel + vbQuestion)

     If lRisposta = vbYes Then

Range("A5:A81").ClearContents

Range("F5:F81").ClearContents

Range("I5:I81").ClearContents

End If

End Sub

In pratica vorrei affinare tale macro in modo tale che NON CANCELLARE il contenuto delle celle nei range impostati qualora ci fossero le seguenti condizioni:

Range("A5:A81") NON CANCELLARE se presente un NUMERO

Range("F5:F81") NON CANCELLARE se presente una data formato dd/mm/yyyy

Range("I5:I81") NON CANCELLARE se presente le parole 'INSTALLATO' e 'NON INSTALLATO'

Se trova la condizione la macro deve proseguire con la cella successiva fino alla fine del range impostato.

Se qualcosa non fosse chiaro sono qui.

Grazie mille in anticipo a tutti.

Massimo

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

Anonimo
2015-05-21T16:10:31+00:00

Ciao Massimo,

Prova qualcosa del genere:

'=========>>

Option Explicit

'--------->>

Public Sub Cancella()

    Dim WB As Workbook

    Dim SH As Worksheet

    Dim Rng As Range, rCell As Range

    Dim lng As Long

    Dim lRisposta As Long

    Set WB = ThisWorkbook

    Set SH = WB.Sheets("Foglio1")

    Set Rng = SH.Range("A5:A81,F5:F81,I5:I81")

    lRisposta = MsgBox(Prompt:="VUOI VERAMENTE PULIRE LE CELLE " _

                             & Rng.Address(0, 0) & "?", _

                       Title:="Attenzione", _

                       Buttons:=vbYesNoCancel + vbQuestion)

   If lRisposta = vbYes Then

        For Each rCell In Rng.Cells

            With rCell

                If IsNumeric(.Value) _

                Or .NumberFormat = "dd/mm/yyyy" _

                Or .NumberFormat = "m/d/yyyy" _

                Or .Value = "INSTALLATO" _

                Or .Value = "NON INSTALLATO" Then

                    '\ Do nothing!

                Else

                    .ClearContents

                End If

            End With

        Next rCell

    End If

End Sub

'<<=========

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-05-22T13:21:15+00:00

    Ciao Massimo.

    Tra l'altro se lancio la macro mi cancella comunque il contenuto delle celle colonna F pur se ci sono delle date con formato dd/mm/yyyy...non capisco come mai...

    Finora. questa tua risposta mi sfuggiva!

    Tuttavia, non credo che questa dichiarazione sia coerente con la tua affermazione precedente:

    Ma se trova le condizioni io dopo il THEN cosa devo scrivere per dire passa alla cella successiva oppure comunque non fare nulla e controllare la cella successiva?

    Perchè così com'è adesso non fa nulla...

    In ogni modo, ti chiederei di caricare un esempio non funzionante; cancella/modifica eventuali dati sensibili.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-05-22T08:53:12+00:00

    Ciao Massimo,

    Una domanda: 

    Ma se trova le condizioni io dopo il THEN cosa devo scrivere per dire passa alla cella successiva oppure comunque non fare nulla e controllare la cella successiva?

    Perchè così com'è adesso non fa nulla...

    Con il mio file di prova  invece il codice funziona senza problema!

    Per il test, ho popolato ogni cella dell'intervallo A5:A81,F5:F81,I5:I81A5:A81,F5:F81,I5:I81 con dei dati in modo che ogni seconda cella fosse un numero, una data, la parola INSTALLATO oppure NON INSTALLATO.

    Con questa disposizione dei dati, eseguendo la mia macro, io ottengo una cella cancellata dopo ogni cella di interesse. Così, la metà delle celle risultano vuote.

    Potresti scaricare il mio file di prova Pedmas20150522.xlsm a: **http://1drv.ms/1c8HoaK**

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-05-22T07:54:19+00:00

    Tra l'altro se lancio la macro mi cancella comunque il contenuto delle celle colonna F pur se ci sono delle date con formato dd/mm/yyyy...non capisco come mai...

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-05-22T07:24:24+00:00

    Buongiorno Norman.

    Innanzi tutto grazie della risposta.

    Una domanda: 

    Ma se trova le condizioni io dopo il THEN cosa devo scrivere per dire passa alla cella successiva oppure comunque non fare nulla e controllare la cella successiva?

    Perchè così com'è adesso non fa nulla...

    Grazie in anticipo.

    Massimo

    La risposta è stata utile?

    0 commenti Nessun commento