|
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
|