› Excel e gli applicativi Microsoft Office › anno bisestile – vba –
-
AutoreArticoli
-
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 Subla 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.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
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
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
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
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) Thenpiù cerco definizioni di anno bisestile e meno mi è chiaro il concetto...)
Il concetto è semplice, basta leggere il mio post precedente #52884
....era una battuta.....pechè poi non applicare la definizione di anno bisestile e andare al1 marzo -1? Non è necessario
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`ciao Raffaele53
grandissimo. funziona. ho invertito false con true.
grazie
Sono contento che tu abbia risolto
Una curiosità, quanto del codice del primo post è tuo?
-
AutoreArticoli
