Condividi tramite

excel vba Ciclo For Next

Anonimo
2020-01-23T17:05:23+00:00

Buon Giorno a tutti

sono nuovamente a chiedere aiuto

utilizzo questo codice

15

 With Me 

  Rng = InsFerie.tbRngDalIl.Value 

  End With

  30

     With SH1    

     Set Rng5 = Sheets("GENNAIO").Range(Rng)   

     For Each Cella In Rng5

     If Cella = "X" Then

Cella.Font.ColorIndex = 1       

Else

Cella.Font.ColorIndex = 3    

 End If

 Next

 ThisWorkbook.Worksheets("GENNAIO").Range(Rng).Value = "X"

 End With

Che mi permette di inserire delle  X  in un Range di celle , se nelle celle del range trova delle "X" allora riporta la "X" in Nero , se invece le celle sono vuote , allora inserisce una "X" in Rosso

Io vorrei e nonostante i tentativi , non ci riesco a far si che se nel Range trova una "X" , deve lasciarla come e' (Nero) .

Se  Invece  all'interno del Range trova delle celle Vuote , allora deve scrivere "F"  in  Rosso

Purtroppo con i cicli , fatico ancora a progredire

             Grazie per qualsiasi suggerimento                 Claudio P

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
2020-01-24T09:59:37+00:00

Ciao Claudio,

Grazie e' perfetto (come al solito  !! )

vediamo se ho capito

For Each Cella  ....   Apre il Ciclo

If UCase  .....      Prima Condizione           se Range Contiene X  allora  X  (Nero)

ElseIf Is   .....      Seconda Condizione      se  Range Vuoto   allora F (Rosso) 

Next Cella  ....   Chiude il Ciclo

Yes.

??? per il futuro , se avessi una 3°  .... condizione  potrei fare cosi'  ??

For Each Cella In Rng5.Cells

        With Cella

            If UCase(Cella.Value) = "X" Then

                Cella.Font.Color = vbBlack

            ElseIf IsEmpty(Cella) Then

                      .Value = "F"

                    .Font.Color = vbRed

ElseIf Is(Cella) = "F" Then

                      .Value = "M"

                    .Font.Color = vbGreen

                End If

Fai un confronto tra questo codice e la seguente versione corretta:

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

Public Sub Tester()

   Dim cella As Range

    For Each cella In Range("A1:A10").Cells

        With cella

            If UCase(.Value) = "X" Then

                .Font.Color = vbBlack

            ElseIf IsEmpty(.Value) Then

                .Value = "F"

                .Font.Color = vbRed

            ElseIf UCase(.Value) = "F" Then

                .Value = "M"

                .Font.Color = vbGreen

            End If

        End With

    Next cella

End Sub

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

Per un modo alternativo, vedi il seguente codice equivalente:

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

Public Sub Tester2()

    Dim cella As Range

    For Each cella In Range("A1:A10").Cells

        With cella

            Select Case UCase(.Value)

            Case "X"

                .Font.Color = vbBlack

            Case vbNullString

                .Value = "F"

                .Font.Color = vbRed

            Case "F"

                .Value = "M"

                .Font.Color = vbGreen

            End Select

        End With

    Next cella

End Sub

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

Vado a ripassare  Case ,Else, .....   

Buon lavoro! :-)

===

Regards,

Norman

La risposta è stata utile?

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

Risposta accettata dall'autore della domanda

Anonimo
2020-01-23T17:31:52+00:00

Ciao Claudio,

sono nuovamente a chiedere aiuto

utilizzo questo codice

15

 With Me 

  Rng = InsFerie.tbRngDalIl.Value 

  End With

  30

     With SH1    

     Set Rng5 = Sheets("GENNAIO").Range(Rng)   

     For Each Cella In Rng5

     If Cella = "X" Then

        Cella.Font.ColorIndex = 1       

        Else

        Cella.Font.ColorIndex = 3    

         End If

         Next

         ThisWorkbook.Worksheets("GENNAIO").Range(Rng).Value = "X"

         End With

Che mi permette di inserire delle  X  in un Range di celle , se nelle celle del range trova delle "X" allora riporta la "X" in Nero , se invece le celle sono vuote , allora inserisce una "X" in Rosso

Io vorrei e nonostante i tentativi , non ci riesco a far si che se nel Range trova una "X" , deve lasciarla come e' (Nero) .

Se  Invece  all'interno del Range trova delle celle Vuote , allora deve scrivere "F"  in  Rosso

Purtroppo con i cicli , fatico ancora a progredire 

Prova qualcosa del genere:

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

Option Explicit

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

Public Sub Tester()

    Dim Rng5 As Range, Cella As Range

    Dim sIntervallo As String

   sIntervallo =InsFerie.tbRngDalIl.Value

   Set Rng5 = Sheets("GENNAIO").Range(sIntervallo)

    For Each Cella In Rng5.Cells

        With Cella

            If UCase(Cella.Value) = "X" Then

                Cella.Font.Color = vbBlack

            ElseIf IsEmpty(Cella) Then

                      .Value = "F"

                    .Font.Color = vbRed

                End If

        End With

        Next Cella

End Sub

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

===

Regards,

Norman

La risposta è stata utile?

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

1 risposta aggiuntiva

Ordina per: Più utili
  1. Anonimo
    2020-01-24T07:08:04+00:00

    Buon Giorno  Norman 

    Grazie e' perfetto (come al solito  !! )

    vediamo se ho capito

    For Each Cella  ....   Apre il Ciclo

    If UCase  .....      Prima Condizione           se Range Contiene X  allora  X  (Nero)

    ElseIf Is   .....      Seconda Condizione      se  Range Vuoto   allora F (Rosso)

    Next Cella  ....   Chiude il Ciclo

    ??? per il futuro , se avessi una 3°  .... condizione  potrei fare cosi'  ??

    For Each Cella In Rng5.Cells

            With Cella

                If UCase(Cella.Value) = "X" Then

                    Cella.Font.Color = vbBlack

                ElseIf IsEmpty(Cella) Then

                          .Value = "F"

                        .Font.Color = vbRed

    ElseIf Is(Cella) = "F" Then

                          .Value = "M"

                        .Font.Color = vbGreen

                    End If

    Vado a ripassare  Case ,Else, .....      Ciao  Grazie di nuovo    Claudio P

    La risposta è stata utile?

    0 commenti Nessun commento