Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Ricerca foglio tramite variabile

  • Messaggi
  • ABCDEF@Excel
    00 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
  • OFFLINE
    dodo47
    Post: 2.790
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 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
  • ABCDEF@Excel
    00 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
  • OFFLINE
    by sal
    Post: 5.912
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 09/05/2020 08:27
    Seleziona fogli
    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 [SM=x423051]

    [Modificato da by sal 09/05/2020 08:31]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • ABCDEF@Excel
    00 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
  • OFFLINE
    dodo47
    Post: 2.798
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 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
  • ABCDEF@Excel
    00 09/05/2020 20:04
    Scusami dodo47, ma non capisco cosa desideri dire
    A me sembra che funzioni bene
  • OFFLINE
    dodo47
    Post: 2.799
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 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
  • ABCDEF@Excel
    00 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
  • OFFLINE
    dodo47
    Post: 2.800
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 10/05/2020 10:22
    Re:
    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