Sviluppare funzionalita su Microsoft Office con VBA colora riga in base al testo specifico

Login Registrati
Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
  • Autore
    Articoli
  • #8371 Score: 0 | Risposta

    marco_budin
    Partecipante
      2 pts

      buongiorno a tutti,

      torno con un nuovo problema: ho un file, dove ho inserito i mesi dell'anno (schede gennaio...febbraio...). ho impostato che l'anno è dinamico, nel senso che se seleziono l'anno nella cella Sheets("Home").Range("B33"), cambiano i vari giorni giorni della settimana (lunedì... martedì...) nei vari mesi.

      Il problema nasce adesso: vorrei che si colorassero in maniera diversa i weekend (sabato/domenica), quindi le celle sulla riga del giorno sabato e domenica (come vedete nelle schede  dei vari mesi). infatti inserendo l'anno non si aggiornano.

      vorrei assegnarlo alla macro che cè sulla scheda Home, Tasto per trasformare i Weekend, oppure direttamente inserendo l'anno si trasformano tutti i mesi con i weekend colorati (con un Private change)

      spero che qualcuno possa aiutarmi nel mio problemino. vi ringrazio anticipatamente del vostro prezioso aiuto!

      ringrazio

      saluti e a presto

      Marco

      Allegati:
      You must be logged in to view attached files.
      #8377 Score: 0 | Risposta

      albatros54
      Moderatore
        89 pts

        Allora, seleziona l'area dove ci sono le date, una volta selezionata l'area apri il menu  Home e selezioni "formattazione Condizionale" dalla finestra che si apre selezioni"Utilizza una formula per formattare le cell selezionate" inserisci questa formula

        =SE(O(GIORNO.SETTIMANA(C14)=7;GIORNO.SETTIMANA(C14)=1);VERO;FALSO)

        e dopo selezioni il colore che piu ti garba, quedta procedura pe tutti i fogli

         

         

        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
        Sempre il mare, uomo libero, amerai!
        ( Charles Baudelaire )
        #8387 Score: 0 | Risposta

        Luca73
        Partecipante
          58 pts

          Ciao

          secondo me il SE non serve 

          basta

          =O(GIORNO.SETTIMANA(C14)=7;GIORNO.SETTIMANA(C14)=1)

          in quanto è una operazione booleana (OR) tra due confronti che restituiscono un valore logico (vero/falso)

          oppure per semplificare ulteriormente 

          =GIORNO.SETTIMANA(C14;2)<6

          #8389 Score: 0 | Risposta

          Luca73
          Partecipante
            58 pts

            Ciao Eccoti anche un esempio (un po' bruttino per certi aspetti)

            che fa quello che chiedi.

            Fammi sapere

            Sub ColoraWE()
            Dim Vettore(1 To 12) As String
            Dim Index As Integer
            Dim Foglio As Worksheet
            Dim CellaW As Range
            For Index = 1 To 12
                Vettore(Index) = Format("01/" & Index & "/2000", "mmmm")
            Next Index
            For Each Foglio In ActiveWorkbook.Sheets
            Foglio.Activate
                For Index = 1 To 12
                    If Foglio.Name = Vettore(Index) Then
                        For Each CellaW In Foglio.Range(Range("C14"), Range("C14").End(xlDown))
                            CellaW.Select
                            With Range(CellaW, CellaW.Offset(0, 10)).Interior
                                 If ((Right(CellaW.Text, 3) = "sab") Or (Right(CellaW.Text, 3) = "dom")) Then
                                    .Color = 14806254
                                Else
                                    .Pattern = xlNone
                                End If
                            End With
                        Next CellaW
                    End If
                 Next Index
            Next Foglio
            End Sub
            
            #8403 Score: 0 | Risposta

            marco_budin
            Partecipante
              2 pts

              buonasera a tutti!!

              siete dei fenomeni!!! 🙂 grazie mille delle soluzioni, ho potuto provare sia quella con la formula, che quella con la macro e come sempre siete riusciti a risolvermi il problema!

              vi ringrazio davvero tanto, e vi auguro una buona serata

              alla prossima

              Marco

              #8409 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                Luca73 ha scritto:

                CellaW.Select

                E' un'istruzione inutile e rallenta l'esecuzione   

                #8413 Score: 0 | Risposta

                Luca73
                Partecipante
                  58 pts

                  Ciao

                  VF hai perfettamente ragione.

                  Le istruzioni

                  Foglio.Activate  e  CellaW.Select

                  vanno cancellate o commentate ( chiedo scusa per non averlo fatto) 

                  Le avevo inserite per una mera questione di debug e verifica del programma

                  Ciao

                  Luca

                  #8414 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    Senza voler essere saccente, ma solo per condivisione dell'informazione (o per ricordarla casomai già fosse nel vostro patrimonio), ricordo che esiste già il vettore MonthName in VBA per ottenere la versione localizzata dei nomi dei mesi.

                    Quindi il codice

                    For Index = 1 To 12
                        Vettore(Index) = Format("01/" & Index & "/2000", "mmmm")
                    Next Index

                    è validamente sostituibile con MonthName(i) dove i va da 1 a 12 e restituisce il nome esteso del mese indicato dall'indice. Per cui

                    MonthName(1) = "gennaio"
                    MonthName(2) = "febbraio"
                    e così via
                    #8415 Score: 0 | Risposta

                    Luca73
                    Partecipante
                      58 pts

                      Ciao Questa proprio non la sapevo.

                      Pertanto

                      Sub ColoraWE()
                      Dim Index As Integer
                      Dim Foglio As Worksheet
                      Dim CellaW As Range
                      For Each Foglio In ActiveWorkbook.Sheets
                      Foglio.Activate
                          For Index = 1 To 12
                              If Foglio.Name = MonthName(Index) Then
                                  For Each CellaW In Foglio.Range(Range("C14"), Range("C14").End(xlDown))
                                      CellaW.Select
                                      With Range(CellaW, CellaW.Offset(0, 10)).Interior
                                           If ((Right(CellaW.Text, 3) = "sab") Or (Right(CellaW.Text, 3) = "dom")) Then
                                              .Color = 14806254
                                          Else
                                              .Pattern = xlNone
                                          End If
                                      End With
                                  Next CellaW
                              End If
                           Next Index
                      Next Foglio
                      End Sub
                      #8417 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        Ottimo Luca allora ti invito anche a modificare

                        If ((Right(CellaW.Text, 3) = "sab") Or (Right(CellaW.Text, 3) = "dom")) Then

                        affinché il test non venga fatto su un testo ma sul valore della cella giorno (è sabato o domenica?). Esiste una funzione apposita 🙂

                        Per due motivi:

                        - il confronto con l'uguale è troppo secco (e se invece di "sab" ci fosse "SAB" ?)

                        - la manipolazione di stringhe è più inefficiente del confronto con valori numerici

                        Sempre se hai voglia di stare dietro a queste paturnie ovviamente. Il tuo codice funziona benissimo (funzionava anche senza MonthName sia chiaro)

                        #8418 Score: 0 | Risposta

                        Luca73
                        Partecipante
                          58 pts

                          Ciao

                          Hai ragione VF, 

                          Quando scrissi che il codice era un po' bruttino era proprio per questi aspetti...

                          L'ho buttato giù di corsa....

                          L'altro problema ' che mi hanno passato alla 2016 e non ho più l'help offline ma solo quello via internet e faccio fatica a cercare le funzioni che non conosco.

                          Ecco la nuova proposta.

                          Comunque,

                          Grazie

                          Sub ColoraWE()
                          Dim Index As Integer
                          Dim Foglio As Worksheet
                          Dim CellaW As Range
                          For Each Foglio In ActiveWorkbook.Sheets
                          'Foglio.Activate
                              For Index = 1 To 12
                                  If Foglio.Name = MonthName(Index) Then
                                      For Each CellaW In Foglio.Range(Range("C14"), Range("C14").End(xlDown))
                                          'CellaW.Select
                                          With Range(CellaW, CellaW.Offset(0, 10)).Interior
                                              If Weekday(CellaW, vbMonday) > 5 Then
                                              'If ((Right(CellaW.Text, 3) = "sab") Or (Right(CellaW.Text, 3) = "dom")) Then
                                                  .Color = 14806254
                                              Else
                                                  .Pattern = xlNone
                                              End If
                                          End With
                                      Next CellaW
                                  End If
                               Next Index
                          Next Foglio
                          End Sub

                          Ciao

                          Luca

                           

                           

                          #8424 Score: 0 | Risposta

                          vecchio frac
                          Senior Moderator
                            272 pts

                            Luca73 ha scritto:

                            Ecco la nuova proposta.

                            Più compatta e più leggibile 🙂

                            Luca73 ha scritto:

                            non ho più l'help offline

                            Anch'io sulla versione 2013 soffro di questo problema. Quando non mi va internet è proprio il momento in cui mi serve l'help 🙂

                          Login Registrati
                          Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
                          Rispondi a: colora riga in base al testo specifico
                          Gli allegati sono permessi solo ad utenti REGISTRATI
                          Le tue informazioni: