Excel e gli applicativi Microsoft Office anno bisestile – vba –

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

    mandoz
    Partecipante

      ciao a tutti,

      volevo aggiungere a codice funzionante, questo --->

      Private Sub Worksheet_Change(ByVal Target As Range)
          Dim rCell As Range, ws As Worksheet
          Dim j As Integer, x As Integer
        
          If Target.Address = "$E$17" Then
              For j = 1 To 12
                  Set ws = ThisWorkbook.Worksheets(CStr(j))
                  For Each rCell In ws.Range("C11:C41")
                      rCell.NumberFormat = "d ddd"
                      If Right(rCell.Text, 3) = "gio" Then rCell.NumberFormat = "d dddv"
                  Next rCell
              Next j
          
            Set ws = Worksheets("Planner")
          
            For x = 3 To 58 Step 5
                For j = 3 To 33
                    ws.Cells(x, j).NumberFormat = "ddd"
                    If ws.Cells(x, j).Text = "gio" Then ws.Cells(x, j).NumberFormat = "dddv"
                Next j
            Next x
          End If
          Set ws = Nothing
          Set rCell = Nothing
      End Sub

      la possibilità di --nascondere/vedere-- la riga_38 del foglio 2 (febbraio). se anno foglio dati!e17 è bisestile comparirà la riga_38 del 29 febb. se non lo è nascondere riga_38 in modo da non vedere 1 marzo.

      il codice che troverete l'ho recuperato googoleggiando. non sono stato capace ad adattarlo.

       

      grazie  

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

      LucaSR
      Partecipante
        15 pts

        Ciao fammi capire, vuoi sapere se un anno è bisestile tramite VBA?

        Crei una variabile come data, la inizializzi al 01/03/anno da valutare (se pari, se dispari sicuramente non è bisestile) e poi sottrai 1 giorno. Se il giorno è 29, anno bisestile.

        Bisogna sfruttare il più possibile e con efficienza ciò che i veri programmatori hanno implementato a dovere   

        Comunque sei nella sezione sbagliata   

        #52885 Score: 0 | Risposta

        LukeReds
        Partecipante
          19 pts

          ciao

          ttenzione che se togli 1 a 01/03/1900 ottieni 29/92/1900 ma il 1900 non era bisestile

          Userei la definizione di anno bisestile (copi e incollo)

          è divisibile per 4 e anche per 100, se finisce per 00 divisibile per 400

          #52886 Score: 0 | Risposta

          gianfranco55
          Partecipante
            91 pts

            ciao

            con una formula

            in A1 l'anno

            =SE(GIORNO(FINE.MESE(DATA($A$1;2;1);0))=29;"bisestile";"")

            ma perchè non fate le tabelle dei mesi tutte eguali di 31 righe

            andreste meglio anche con formule sommatorie avendo le matrici tutte uguali

            #52887 Score: 0 | Risposta

            mandoz
            Partecipante

              grazie a tutti per i suggerimenti. sempre ben accetti. nel foglio dati è presente un codice valido.

              nella sua parte finale ho aggiunto poche righe per gestire il bisestile. parziale di codice che ho trovato online.

              non funzionano. è lì che ho bisogno di una mano.

              grazie ancora

              #52888 Score: 0 | Risposta

              LukeReds
              Partecipante
                19 pts

                istruzione corretta (credo... più cerco definizioni di anno bisestile e meno mi è chiaro il concetto...)

                 

                If (Year((dati!e17) Mod 4) = 0 And Year((dati!e17) Mod 100) <> 0) Or (Year((dati!e17) Mod 400) = 0) Then
                #52889 Score: 0 | Risposta

                LucaSR
                Partecipante
                  15 pts

                  LukeReds ha scritto:

                  più cerco definizioni di anno bisestile e meno mi è chiaro il concetto...)

                   

                  Il concetto è semplice, basta leggere il mio post precedente #52884

                  #52890 Score: 0 | Risposta

                  LukeReds
                  Partecipante
                    19 pts

                    ....era una battuta.....pechè poi non applicare la definizione di anno bisestile e andare al1 marzo -1? Non è necessario

                    #52891 Score: 0 | Risposta

                    Raffaele53
                    Partecipante
                      23 pts

                      Prova in questo modo

                      `Private Sub Worksheet_Change(ByVal Target As Range)
                          Dim rCell As Range, ws As Worksheet
                          Dim j As Integer, x As Integer, ann As Integer
                        
                          If Target.Address = "$E$17" Then
                              For j = 1 To 12
                                  Set ws = ThisWorkbook.Worksheets(CStr(j))
                                  For Each rCell In ws.Range("C11:C41")
                                      rCell.NumberFormat = "d ddd"
                                      If Right(rCell.Text, 3) = "gio" Then rCell.NumberFormat = "d dddv"
                                  Next rCell
                              Next j
                          
                            Set ws = Worksheets("Planner")
                          
                            For x = 3 To 58 Step 5
                                For j = 3 To 33
                                    ws.Cells(x, j).NumberFormat = "ddd"
                                    If ws.Cells(x, j).Text = "gio" Then ws.Cells(x, j).NumberFormat = "dddv"
                                Next j
                            Next x
                          'End If
                          'Set ws = Nothing
                          'Set rCell = Nothing
                       
                          Set ws = Worksheets("2")
                          ann = Year(Sheets("Dati").Range("E17"))
                          If (ann Mod 4) = 0 And ((ann Mod 100) <> 0 Or (ann Mod 400) = 0) Then
                                   ws.Rows("38:38").EntireRow.Hidden = True
                               Else
                                   ws.Rows("38:38").EntireRow.Hidden = False
                          End If
                          Set ws = Nothing
                          Set rCell = Nothing
                      End If
                      End Sub`
                      #52892 Score: 0 | Risposta

                      mandoz
                      Partecipante

                        ciao Raffaele53

                        grandissimo. funziona. ho invertito false con true.

                        grazie

                        #52893 Score: 0 | Risposta

                        LucaSR
                        Partecipante
                          15 pts

                          Sono contento che tu abbia risolto   

                          Una curiosità, quanto del codice del primo post è tuo?

                          #52894 Score: 0 | Risposta

                          mandoz
                          Partecipante

                            niente è farina del mio sacco.

                            la prima parte è di scossa. la seconda è di alexps. io ho raccolto googoleggiando parte di codice che non sono stato capace ad adattare alle  mie necessità. loro si.

                          Login Registrati
                          Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
                          Rispondi a: anno bisestile – vba –
                          Gli allegati sono permessi solo ad utenti REGISTRATI
                          Le tue informazioni: