Domanda.

da eligian = eligian@libero.it

vorrei cortesemente porti alcune domande che date le mie scarse conoscenze non trovano risposta:
1) - in un foglio di Excel ho 31 "schede" che corrispondono ai giorni del mese. Ogni cella A1 deve contenere la data del giorno interessato, (alla scheda 5 deve corrispondere il giorno 5 ecc....); io nella cella A1 del foglio 2 ho inserito una semplice formula (=1!A1+1) e cosi di seguito fino al foglio 31. Ti chiedo se esiste un metodo più brillante per risolvere il problema (ad esempio un ciclo For...Each);

2) - di seguito al foglio 31 ho inserito un foglio DB dove si trovano i dati a cui i vari fogli fanno riferimento; è possibile nascondere solamente la linguetta (WorksTab) del foglio DB in quanto le altre schede devono restare visibili all'utente?

3) - all'apertura del WorkBook chiedo di inserire la data iniziale (es. 01-10-2000), è possibile in funzione della data immessa far scomparire le schede in eccesso (ad esempio se il mese è di 30 giorni far scomparire la scheda con la dicitura 31?
ti ringrazio per il tempo dedicato
sinceri saluti
gianfranco

 

Risposta.

1)
visto che i fogli portano i nomi dei giorni, è più semplice usare il nome del foglio come riferimento del singolo giorno:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
[A1].Value = ActiveSheet.Name
End Sub

una sola istruzione da mettere nell'evento SheetActivate del Workbook.
2)
No, non è possibile. Usa "nascondi foglio"; se non usi istruzioni tipo: DB.Select, il foglio non riappare ed è comunque leggibile da istruzioni.
3) usa un istruzione Se (If) nel Workbook_Open. Per questa soluzione dovrai lavorare un pò. Devi estrarre il mese corrente dalla data del giorno, usare una funzione specifica che non esiste in vba, ma che ho preparato, e che fornisce da quanti giorni è composto un mese, indi usare la condizione se il mese ha 31 giorni, mi fai apparire il foglio 31, altrimenti lo nascondi. Per fare questo devi inserire in un modulo queste istruzioni, avendo cura di mettere Option Explicit nella sezione Generale - Dichiarazioni del modulo stesso:
Option Explicit
_____________________________________
Function giorni(mese)
Select Case mese
Case 1, 3, 5, 7, 8, 10, 12
giorni = 31
Case 4, 6, 9, 11
giorni = 30
Case 2
giorni = 28
End Select
End Function


Poi nel WorkBook_Open inserisci queste istruzioni:
Private Sub Workbook_Open()
Dim X
Dim Y
X = Month(Date)
'X sarà uguale al numero del mese (da 1 a dodici) in corso
Y = giorni(X)
'richiama la funzione giorni usando X come argomento
If Y = 31 Then
Worksheets("31").Visible = True
Else
Worksheets("31").Visible = False
End If
End Sub


spero tu ti ci rinvenga, la cosa funziona.
saluti, ennius