Gestione fogli Excel

  • Gestione fogli excel di Ricky
    Salve, come posso fare a far cambiare da un foglio all'altro di excel con una macro? mi spiego meglio: devo spostarmi da un foglio all'altro di una cartella che contiene una trentina di fogli. ho creato una casella combinata che fa vedere i nomi dei vari fogli: come posso fare a far apparire il foglio che vado a selezionare? in questo modo, mettendo la stessa casella in ogni foglio mi potrei spostare senza grossi problemi, visto che voglio far sparire tutte le ettichette dei fogli in fondo.
    non è possibile collegare il tutto ad esempio al tasto destro del mouse in modo da non avere neanche la tendina a discesa?
    se non sono stato chiaro ditemelo.
    grazie anticipatamente.
    by ricky.

    Ciao e benvenuto ! di Apoben
    Questa istruzione ti permette di aprire il foglio che vuoi , indicando il nome nella casella a1, ovviamente il nome digitato dev'esserre esatto.
    adattala alle tue esigenze !
     
    Sub ApriFoglio()
    Dim x
    x = Range("A1").Text
    Sheets(x).Activate
    End Sub
    

    di Ricky
    Ti ringrazio e vedo che funziona. però mi piacerebbe capire che cosa vuol dire quello che c'è scritto. intendi dire: che funzione ha "sub" nella formula? e "dim"? e "()"? insomma vorrei capire, in modo da poter eventualmente utilizzare gli stessi comandi anche in altre applicazioni, se possibile.
    grazie mille.
    p.s.: gia che ci siamo, non è possibile fare in modo che cambi foglio in automatico? io ho associato questa macro ad un tasto (e va benissimo), ma si puo' fare anche in automatico o diventa troppo complicato?
    grazie by ricky.

    di Apoben64
    Come ti ho indicato nell'altro tuo post , perchè non provi a dare un'occhiata al corso inserito nel forum ?. e' molto semplice e troverai le risposte a quello che cerchi o vuoi sapere !!!
    un saluto e buona giornata luca

    di Big ronnie
    Ciao ricky,
    ti mando questo codice che ti fà apparire nella commandbar formatting una combobox con i numeri dei fogli della workbook, ed ogni volta che ne selezioni uno si attiva il figlio corrispondente.quando chiudi il file la combobox scompare automaticamente.ciao
     
    Copia questo codice così com'è nell'editor VBA della cartella "thisworkbook":
    
    Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("formatting").Controls(Application.CommandBars("formatting").Controls.Count).Delete
    End Sub
    Sub Workbook_Open()
    Set Mybar = Application.CommandBars("formatting")
    Set mycontrol = Mybar.Controls.Add(Type:=msoControlComboBox)
    For I = 1 To 30
      mycontrol.AddItem I
    Next I
    mycontrol.ListIndex = 1
    mycontrol.OnAction = "AttivaFoglio"
    End Sub
    
    E questo nel modulo1 :
    
    Sub AttivaFoglio()
    Set combo = Application.CommandBars("formatting").Controls(Application.CommandBars("formatting").Controls.Count)
    I = CInt(combo.Text)
    Worksheets(I).Activate
    End Sub
    

    Problemino di Ricky
    La macro che ho inserito, come detto, va bene ma ho riscontrato un problema: i fogli che devo gestire sono 29 per il momento, in ogni foglio ho inserito la tendina a discesa con il tasto "vai" che attiva la macro dopo la selezione ma alcuni di questi fogli contengono dei grafici e in questi fogli la cosa non funziona come si può ovviare? se non trovo soluzione metterò un tasto separato ma mi manderebbe in una pagina diciamo "home" e vorrei evitare la cosa, se c'è soluzione.
    grazie by ricky.

    di Ricky
    Ciao big ronnie, volevo dirti che il mio messaggio precedente era riferito alla macro di apoben64, mentre la tua devo ancora provarla e lo farò questa sera, ma purtroppo c'è stato un accavallamento di messaggi. non vorrei che pensassi che è il tuo che non funziona visto che non l'ho ancora provato, anche se devo capire cosa fa di preciso ma lo vedrò non appena lo inserirò. intanto grazie a tutti, siete forti.
    by ricky.

    Per big ronnie di Ricky
    Ciao big, ho avuto la possibilità di provare la macro che mi hai mandato: carino però.....:
    1) si può far uscire solo nella barra della formattazione o posso scegliere una barra a mio piacimento?
    2) vengono fuori ovviamente i numeri dei fogli ma è possibile far venire fuori i nomi dei fogli in modo che uno sappia in che foglio si sposta? ti spiego velocemente: ogni foglio può contenere o una tabella dove inserire dei numeri (punteggi di gare di tiro con l'arco) che vanno poi a formare un grafico in un altro foglio, possono contenere il suddetto grafico o ancora una tabella con i punteggi degli allenamenti (con rispettivi grafici in altro foglio): io i fogli li ho rinominati in base al loro contenuto per comodità. visto che io sono un istruttore nazionale di questo sport mi servirebbe il tutto per gestire i vari atleti. venendo anche apportate modifiche sia al materiale che alla tecnica di tiro, tabelle e grafici mi servono nel tempo per vedere a colpo d'occhio se ci sono stati dei cali o dei miglioramenti sull'atleta e guardando le note vedo anche quando è avvenuto e quindi cosa è stato modificato in quel frangente. avendo vari tipi di gare e varie distanze, per riuscire a gestire il tutto ho bisogno di tutti quei fogli per ogni atleta. scusa se mi sono dilungato ma era per farti capire il motivo di quello che voglio fare.
    3) quando seleziono un numero che corrisponde ad un foglio che contiene un grafico mi da errore.
    tieni anche presente che io ho praticamente 9 fogli per i dati degli allenamenti, 5 per i dati delle gare, 14 per i grafici ed un paio per le note varie.
    spero ci sia soluzione al mio problema
    grazie by ricky.

    di Big ronnie
    Per il quesito n°3 basta correggere nella macro "attivafoglio"(modulo1) la parola worksheets con sheets.
    per il quesito numero n°1 si può fare anche una commandbar tutta sua.
    per il quesito n°2 si possono far apparire i nomi invece dei numeri, ma in questo momento non ho tempo di inviarti il codice.probabilmente stasera.ciao

    di Big ronnie
    Ciao ricky,
    per il quesito 1 puoi inserirla(la combobox)dove vuoi basta cambiare il nome("formatting") della commandbar.per
    il quesito 2 e 3 ti mando il codice.ciao alla prossima
     
    Nel Modulo1
    
    Sub AttivaFoglio()
    Set combo = Application.CommandBars("formatting").Controls(Application.CommandBars("formatting").Controls.Count)
    For I = 1 To Sheets.Count
      If combo.Text = Sheets(I).Name Then Sheets(I).Activate
    Next I
    End Sub
    
    Copia questo codice così com'è nell'editor VBA della cartella "thisworkbook".
    
    Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("formatting").Controls(Application.CommandBars("formatting").Controls.Count).Delete
    End Sub
    Sub Workbook_Open()
    Set MyBar = Application.CommandBars("formatting")
    Set mycontrol = MyBar.Controls.Add(Type:=msoControlComboBox)
    For I = 1 To Sheets.Count
      mycontrol.AddItem Sheets(I).Name
    Next I
    mycontrol.ListIndex = 1
    mycontrol.OnAction = "AttivaFoglio"
    End Sub
    

    Grande!!! di Ricky
    Grande in tutti i sensi: big ronnie o grande ronnie, prendila come vuoi.
    grazie, sono riuscito ad adattare il tutto, per il momento, alle mie esigenze. unica cosa non riesco ad adattare la larghezza della barra che creo con la larghezza del contenuto: intendo dire che i nomi dei fogli che appaiono all'interno della tendina a discesa vengono tagliati perchè risultano più lunghi della larghezza della tendina stessa. ho provato anche a "stirarla" ma non ne vuole sapere: c'è la possibilità di darle una larghezza "manualmente"? comunque sia... grazie mille ancora.
    by ricky.

    di Big ronnie
    Ciao ricky,
    ho dimenticato di dirti che il codice che ti ho inviato si adatta automaticamente all'aumento o alla diminuzione dei fogli del file.per la tua ultima richiesta copia il codice qui sotto riportato nella cartella thisworkbook eliminando il codice vecchio(solo evento open).la larghezza della combobox e della sua tendina(le 2 righe di codice con il commento)dipendono dal numero di caratteri che formano il nome(variabile max) del foglio per un coefficente(in questo caso 8),quindi può darsi che dovrai adattarlo alle tue esigenze(c'è differenza tra minuscole e maiuscole).ciao alla prossima
     
    Sub Workbook_Open()
    Max = Len(Sheets(1).Name)
    Set MyBar = Application.CommandBars("formatting")
    Set mycontrol = MyBar.Controls.Add(Type:=msoControlComboBox)
    For I = 1 To Sheets.Count
      mycontrol.AddItem Sheets(I).Name
        If Max < Len(Sheets(I).Name) Then Max = Len(Sheets(I).Name)
        mycontrol.Width = Max * 8 'Larghezza Combobox in Commandbar
        mycontrol.DropDownWidth = Max * 8 'Larghezza Tendina a discesa
    Next I
    mycontrol.ListIndex = 1
    mycontrol.OnAction = "AttivaFoglio"
    End Sub
    

    Piccolo inceppamento di Ricky
    Ciao big, c'è un piccolo inceppamento sulla creazione della commandbars: ti invio i comandi che ho inserito. dimmi dov'è l'errore per cortesia. il problema è che quando apro excel mi crea una commandbars di nome ricky ma mi mette dentro due menù a tendina: uno dei due oltre a non funzionare ovviamente, mi resta anche quando chiudo la cartella. in poche parole non mi cancella tutta la nuova barra denominata ricky ma solo una parte (mi lascia un menù a tendina) e quando riapro excel me la ritrovo ancora. se po prova a lanciare la macro quando ho la cartella aperta, continua a crearmi nuove tendine nella commandbars ma non le chiude all'uscita se non l'ultima. che istruzione devo modificare?
    grazie by ricky.
     
    Io ho questo in modulo1:
    
    Sub AttivaFoglio()
    Set combo = Application.CommandBars("Ricky").Controls(Application.CommandBars("formatting").Controls.Count)
    For I = 1 To Sheets.Count
      If combo.Text = Sheets(I).Name Then Sheets(I).Activate
    Next I
    End Sub
    
    e questo in thisworkbook:
    
    Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Ricky").Controls(Application.CommandBars("Ricky").Controls.Count).Delete
    End Sub
    Sub Workbook_Open()
    Max = Len(Sheets(1).Name)
    Set MyBar = Application.CommandBars("Ricky")
    Set mycontrol = MyBar.Controls.Add(Type:=msoControlComboBox)
    For I = 1 To Sheets.Count
      mycontrol.AddItem Sheets(I).Name
        If Max < Len(Sheets(I).Name) Then Max = Len(Sheets(I).Name)
        mycontrol.Width = Max * 5 'Larghezza Combobox in Commandbar
        mycontrol.DropDownWidth = Max * 5 'Larghezza Tendina a discesa
    Next I
    mycontrol.ListIndex = 1
    mycontrol.OnAction = "AttivaFoglio"
    End Sub

    Piccolo inceppamento di Ricky
    Ciao big, c'è un piccolo inceppamento sulla creazione della commandbars: ti invio i comandi che ho inserito. dimmi dov'è l'errore per cortesia. il problema è che quando apro excel mi crea una commandbars di nome ricky ma mi mette dentro due menù a tendina: uno dei due oltre a non funzionare ovviamente, mi resta anche quando chiudo la cartella. in poche parole non mi cancella tutta la nuova barra denominata ricky ma solo una parte (mi lascia un menù a tendina) e quando riapro excel me la ritrovo ancora. se po prova a lanciare la macro quando ho la cartella aperta, continua a crearmi nuove tendine nella commandbars ma non le chiude all'uscita se non l'ultima. che istruzione devo modificare?
    grazie by ricky.
     
    Io ho questo in modulo1:
    
    Sub AttivaFoglio()
    Set combo = Application.CommandBars("Ricky").Controls(Application.CommandBars("formatting").Controls.Count)
    For I = 1 To Sheets.Count
      If combo.Text = Sheets(I).Name Then Sheets(I).Activate
    Next I
    End Sub
    
    e questo in thisworkbook:
    
    Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Ricky").Controls(Application.CommandBars("Ricky").Controls.Count).Delete
    End Sub
    Sub Workbook_Open()
    Max = Len(Sheets(1).Name)
    Set MyBar = Application.CommandBars("Ricky")
    Set mycontrol = MyBar.Controls.Add(Type:=msoControlComboBox)
    For I = 1 To Sheets.Count
      mycontrol.AddItem Sheets(I).Name
        If Max < Len(Sheets(I).Name) Then Max = Len(Sheets(I).Name)
        mycontrol.Width = Max * 5 'Larghezza Combobox in Commandbar
        mycontrol.DropDownWidth = Max * 5 'Larghezza Tendina a discesa
    Next I
    mycontrol.ListIndex = 1
    mycontrol.OnAction = "AttivaFoglio"
    End Sub

    Piccolo inceppamento di Ricky
    Ciao big, c'è un piccolo inceppamento sulla creazione della commandbars: ti invio i comandi che ho inserito. dimmi dov'è l'errore per cortesia. il problema è che quando apro excel mi crea una commandbars di nome ricky ma mi mette dentro due menù a tendina: uno dei due oltre a non funzionare ovviamente, mi resta anche quando chiudo la cartella. in poche parole non mi cancella tutta la nuova barra denominata ricky ma solo una parte (mi lascia un menù a tendina) e quando riapro excel me la ritrovo ancora. se po prova a lanciare la macro quando ho la cartella aperta, continua a crearmi nuove tendine nella commandbars ma non le chiude all'uscita se non l'ultima. che istruzione devo modificare?
    grazie by ricky.
     
    Io ho questo in modulo1:
    
    Sub AttivaFoglio()
    Set combo = Application.CommandBars("Ricky").Controls(Application.CommandBars("formatting").Controls.Count)
    For I = 1 To Sheets.Count
      If combo.Text = Sheets(I).Name Then Sheets(I).Activate
    Next I
    End Sub
    
    e questo in thisworkbook:
    
    Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Ricky").Controls(Application.CommandBars("Ricky").Controls.Count).Delete
    End Sub
    Sub Workbook_Open()
    Max = Len(Sheets(1).Name)
    Set MyBar = Application.CommandBars("Ricky")
    Set mycontrol = MyBar.Controls.Add(Type:=msoControlComboBox)
    For I = 1 To Sheets.Count
      mycontrol.AddItem Sheets(I).Name
        If Max < Len(Sheets(I).Name) Then Max = Len(Sheets(I).Name)
        mycontrol.Width = Max * 5 'Larghezza Combobox in Commandbar
        mycontrol.DropDownWidth = Max * 5 'Larghezza Tendina a discesa
    Next I
    mycontrol.ListIndex = 1
    mycontrol.OnAction = "AttivaFoglio"
    End Sub

    Correzzione di Ricky
    Anche se appare "formatting" in seconda riga, anche lì c'è scritto "ricky", è stato solo un errore di trascrizione, scusa.
    spero sia chiaro il "problema" comunque.

    Correzzione di Ricky
    Anche se appare "formatting" in seconda riga, anche lì c'è scritto "ricky", è stato solo un errore di trascrizione, scusa.
    spero sia chiaro il "problema" comunque.

    Correzzione di Ricky
    Anche se appare "formatting" in seconda riga, anche lì c'è scritto "ricky", è stato solo un errore di trascrizione, scusa.
    spero sia chiaro il "problema" comunque.

    Correzzione di Ricky
    Anche se appare "formatting" in seconda riga, anche lì c'è scritto "ricky", è stato solo un errore di trascrizione, scusa.
    spero sia chiaro il "problema" comunque.

    di Big ronnie
    Ciao ricky,
    copia questo codice nella stessa posizione del tuo vecchio.
     
    Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Ricky").Delete
    End Sub
    Sub Workbook_Open()
    Application.CommandBars.Add(Name:="Ricky").Visible = True
    Max = Len(Sheets(1).Name)
    Set MyBar = Application.CommandBars("Ricky")
    Set mycontrol = MyBar.Controls.Add(Type:=msoControlComboBox)
    For I = 1 To Sheets.Count
      mycontrol.AddItem Sheets(I).Name
        If Max < Len(Sheets(I).Name) Then Max = Len(Sheets(I).Name)
        mycontrol.Width = Max * 8 'Larghezza Combobox in Commandbar
        mycontrol.DropDownWidth = Max * 8 'Larghezza Tendina a discesa
    Next I
    mycontrol.ListIndex = 1
    mycontrol.OnAction = "AttivaFoglio"
    End Sub
    
    Sub AttivaFoglio()
    Set combo = Application.CommandBars("Ricky").Controls(Application.CommandBars("Ricky").Controls.Count)
    For I = 1 To Sheets.Count
      If combo.Text = Sheets(I).Name Then Sheets(I).Activate
    Next I
    End Sub

    E venne il giorno...... di Ricky
    Come dicevo: " e venne il giorno.... che il grande big ronnie mi mandò al diavolo..."
    ciao big, due problemi ora: errore nella riga "application.commandbars.add(name:="ricky").visible = true" quando apro il file e poi non mi allarga ne la tendina ne la cmmandbars variando i numeri relativi a tale comando io ho inserito tutto in thisworkbook così come me lo hai dato cancellando tutto il precedente: praticamente c'è dentro solo l'ultima istruzione che mi hai mandato. la tendina, in compenso, si chiude, grazie.
    by ricky

    di Big ronnie
    Ciao ricky,
    tranquillo questo per me è un allenamento quindi rispondo sempre volentieri.per quanto riguarda il codice a me funziona tutto.domanda?......quando tu ricopi il codice lo fai digitandolo o lo fai selezionando il testo e poi fai copia e incolla con il tasto destro? con il secondo metodo eviti gli errori di sintassi che sono fonte di errori.ciao e fammi sapere.

    Copia/incolla di Ricky
    Ciao big, faccio copia incolla altrimenti addio.
    quando lancio il file mi appare la classica finestra grigia con scritto:
    errore run-time '5':
    chiamata di routine o argomento non validi
    non vorrei che la cosa succedesse solo su questo computer perchè in ufficio uso un programma fatto in excel e gestito con visual basic da un programmatore. però ieri funzionava il discorso di allargare o stringere la commandbars e la tendina, tanto è vero che pensavo che i numeri da inserire si riferissero ai caratteri che doveva contenere e mettendo 30 è venuta fuori una commandbars lunga quasi come la larghezza dello schermo
    portata a 5 avevo la larghezza esatta che corrispondeva alla descrizione più lunga che era contenuta (nome del foglio ovviamente). se vuoi ti posso mandare il file ma l'unica macro contenuta è quella che ti ho mandato: te la rimando con anche quello che ho in modulo1 per sicurezza.
    ciao e grazie.
    p.s.: ti ho mandato anche un msg riguardante il testo che mi hai consigliato: l'hai visto? se vuoi puoi rispondermi direttamente qui, grazie.
     
    In thisworkbook:
    
    Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Ricky").Delete
    End Sub
    Sub Workbook_Open()
    Application.CommandBars.Add(Name:="Ricky").Visible = True
    Max = Len(Sheets(1).Name)
    Set MyBar = Application.CommandBars("Ricky")
    Set mycontrol = MyBar.Controls.Add(Type:=msoControlComboBox)
    For I = 1 To Sheets.Count
      mycontrol.AddItem Sheets(I).Name
        If Max < Len(Sheets(I).Name) Then Max = Len(Sheets(I).Name)
        mycontrol.Width = Max * 5 'Larghezza Combobox in Commandbar
        mycontrol.DropDownWidth = Max * 5 'Larghezza Tendina a discesa
    Next I
    mycontrol.ListIndex = 1
    mycontrol.OnAction = "AttivaFoglio"
    End Sub
    
    Sub AttivaFoglio()
    Set combo = Application.CommandBars("Ricky").Controls(Application.CommandBars("Ricky").Controls.Count)
    For I = 1 To Sheets.Count
      If combo.Text = Sheets(I).Name Then Sheets(I).Activate
    Next I
    End Sub
    
    
    ed in modulo1:
    
    Sub AttivaFoglio()
    Set combo = Application.CommandBars("Ricky").Controls(Application.CommandBars("Ricky").Controls.Count)
    For I = 1 To Sheets.Count
      If combo.Text = Sheets(I).Name Then Sheets(I).Activate
    Next I
    End Sub
    

    X big ronnie di Mauro
    Ciao big ronnie, quando hai un po' di tempo ti chiedo di contattarmi alla sezione "contatti" del sito. ho bisogno di chiederti un paio di cose. ciao mauro

    di Big ronnie
    Ciao ricky,
    torno a dirti che a me funziona tutto,però ho potuto notare che quell'errore mi viene dato quando faccio partire da codice il file(forse potrebbe essere il tuo lancio del file?),e questo perchè esiste già la commandbar "ricky" creata all'apertura del file.adesso prova a fare così
    1)copia il codice(ultimo mandato .attento hai ripetuto la macro del modulo1 in thisworkbook) nei soliti posti
    2)salva il file
    3)prova a farlo partire e vedi se continua a darti errore(a me non lo dà)logicamente la cmdbar "ricky" non deve esistere.se così è ogni volta che lanci il file da codice elimina prima la cmdbar "ricky".la variabile max è la lunghezza del nome + lungo dei fogli.l'autore del libro è reed jacobson ed è della serie i portatili "i miti informatica" €.10.70.il codice isbn è 88-8331-429-8.sperando che sia la volta buona ciao alla prossima.(fammi sapere)

    ??????????????? di Ricky
    Ciao big, allora: ho copiato le macro in una cartella nuova e funziona ma....
    c'è sempre un ma: ho controllato le istruzioni e sono identiche (me le sono stampate per sicurezza e non cambia una virgola), in quello vecchio mi da l'errore che ti dicevo, mi crea la barra "ricky" sulla barra degli strumenti e per fare una larghezza giusta devo mettere come numero 5; in quello nuovo non da errore, mi crea la barra "ricky" in mezzo alla pagina, devo mettere come numero per la larghezza della tendina 20 per farla larga come l'altra. ripeto che mi sono stampato le istruzioni e sono identiche: come è possibile? perchè la tendina non va sulla barra degli strumenti? perchè quello vecchio mi da errore con le stesse istruzioni? oggi me lo copio e se riesco, questa sera, li provo sul pc di casa e vediamo se mi da gli stessi errori o le stesse differenze. mi avevi chiesto di farti sapere.... ecco fatto
    per il momento è tutto, grazie ancora per l'aiuto. by ricky.