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