|
08/05/2020 12:12 | |
Ciao a tutti, per evitare questa riga
For Each ws In ActiveWorkbook.Worksheets oppure il +6
Se non ricordo male, c'era un'altro modo per definire un foglio. Ex
Ho 31 fogli rinominati 1,2,3, ecc ecc,31. Altri 6 con nome vari (potrebbero aumentare)
For Y = 1 To 31
Set ws = Sheets(Y) ' se metto +6 mi funziona, mà preferirei non usarlo
MsgBox (ws.cells(1,1)
Next Y
Grazie mille |
|
| | Post: 2.790 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
08/05/2020 12:32 | |
ciao
se è come l'hai detto e non ci sono altri fogli il cui nome è un numero, potresti fare:
For y = 1 To Sheets.Count
If IsNumeric(Sheets(y).Name) Then
....
saluti
Domenico
Win 10 - Excel 2016 |
|
08/05/2020 18:44 | |
Grazie, anche se non mi piace...
n = Sheets.Count - 31
For Y = 1 To 31
Set ws = Sheets(Y + n)
Gli ho detto che se inserisce nuovi fogli di metterli a sinistra degli ultimi 31 |
| | Post: 5.912 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
09/05/2020 08:27 | |
Ciao, la soluzione di Domenico che Saluto è quella migliore anche se non la condivido troppo, in quanto cercare un foglio è sempre bene farlo in modo nominativo, con il nome in una cella o una variabile o matrice, e non basato sull'indice.
in quanto se qualcuno sposta il foglio di posizione non hai più la corrispondenza e potrebbe causare problemi, sia nella scrittura che nel cancellamento dati.
Ciao By Sal
[Modificato da by sal 09/05/2020 08:31] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
|
09/05/2020 13:40 | |
Grazie by sal
Ci stavo ripensando stanotte e ho capito il problema (Y è numerico).
Alla fine ho fatto con CStr(Y) e funziona
For Y = 1 To 31
Nome = CStr(Y)
Set ws = Sheets(Nome)
ws.Select
Next Y |
| | Post: 2.798 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
09/05/2020 17:35 | |
e se i giorni/fogli sono 28...29...30, il loop ti va in errore
saluti
[Modificato da dodo47 09/05/2020 17:35] Domenico
Win 10 - Excel 2016 |
|
09/05/2020 20:04 | |
Scusami dodo47, ma non capisco cosa desideri dire
A me sembra che funzioni bene |
| | Post: 2.799 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
09/05/2020 21:33 | |
Ciao
ricordo bene di cosa si parla......
Il documento è composto da n fogli ciascuno chiamato con il numero dei giorni del mese, cioè se il documento è aprile, è composto da 30 fogli, chiamati 1,2,3....30 (lasciamo perdere i vari riepiloghi)
Quando quel loop cerca di assegnare a WS il valore di "sheets(31)", poichè il foglio "31" non esiste, va in errore. (Per non parlare di febbraio)
Spero di aver chiarito cosa volevo dire.
cari saluti
Domenico
Win 10 - Excel 2016 |
|
09/05/2020 23:56 | |
Ok capito, hai ragione mà gli ho detto di lasciare sempre i 31 fogli
Inoltre conoscendo anche il mese, il VBA calcola i giorni presenti nel mese.
Pertanto è diventato For y = 1 to (tot giorni) e non più 31 |
| | Post: 2.800 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
10/05/2020 10:22 | |
ABCDEF@Excel, 09/05/2020 23:56:
..... mà gli ho detto di lasciare sempre i 31 fogli
Inoltre conoscendo anche il mese, il VBA calcola i giorni presenti nel mese.
Pertanto è diventato For y = 1 to (tot giorni) e non più 31
Mai fidarsi degli utenti (dovresti saperlo).
A parte questo, devi accertarti che l'utente quando crea il documento, lo faccia con tutti i fogli di tutti i giorni, esempio: crea aprile con dentro 30 fogli (a parte i vari di appoggio), non con dentro 10 fogli "tanto ancora c'è tempo per il giorno 11".
saluti
Domenico
Win 10 - Excel 2016 |
|
|