|
Domanda.
nome=Roberto
cognome=Mascali
versione=2002
conosco2=medio
email=alfio.mascali@tin.it
chra=22
problema=Ho un problema, la macro sottostante ha la funzione di aggiungere
un foglio di lavoro in una cartella di lavoro, denominarlo, copiare la
formattazione di un altro foglio e incollarla sul nuovo, poi con
diversi inputbox inserisco dei nomi. Ecco il problema è questo, se aggiungo
il primo foglio tutto funziona ma se voglio aggiungere il secondo
foglio non va, ho capito qual è il problema ma non riesco a risolverlo. mi
puoi
aiutare? In pratica io devo aggiungere dei fogli di lavoro, questi
devono essere formattati come quelli che ho già nella stessa cartella di
lavoro. grazie anticipate
Roby
Sheets("Siris").Select
Sheets.Add
Sheets("Todero").Select
Cells.Select
Selection.Copy
Sheets("Foglio1").Select
Cells.Select
ActiveSheet.Paste
ActiveWindow.DisplayGridlines = False
ActiveWindow.Zoom = 119
Dim Titolo, Messaggio As String
Dim contenitore As Variant
Titolo = "Risorse Umane"
Messaggio = "Nuovo Nominativo"
On Error GoTo saltaerrore
contenitore = InputBox(Messaggio, Titolo)
Sheets("Foglio1").Select
Sheets("foglio1").Name = contenitore
Dim contenitore1 As Variant
Titolo = "Risorse Umane"
Messaggio = "Inserire il Grado"
contenitore1 = InputBox(Messaggio, Titolo)
Range("b9") = contenitore1
Dim contenitore2 As Variant
Titolo = "Risorse Umane"
Messaggio = "Inserire Nome e Cognome"
contenitore2 = InputBox(Messaggio, Titolo)
Range("i9") = contenitore2
Risposta.
Salve Roberto, sei un pò incasinato nelle spiegazioni. Se vuoi aggiungere un
foglio formattato come uno già esistente nella stessa cartella, puoi usare
il Copy anzichè Add, in questo modo hai una copia del foglio compreso la
formattazione, esempio per copiare il foglio1 e inserirlo dopo il foglio3, e
assegnare il nome che vuoi, esempio. supponendo che sia Todero il foglio già
formattato:
Sheets("Todero").Copy After:=Sheets(3)
Sheets("Foglio1").Name = "Pippo"
ora, tu non l'hai scitto, ma i fogli che usi sono già rinominati? per questo
il foglio aggiunto o copiato prende il nome di Foglio1, giusto? Comunque
dopo l'istruzione sopra ti trovi già sul nuovo foglio (in questo modo puoi
evitare di usare la prima inputbox per rinominare il foglio) e puoi far
seguire le istruzioni delle altre due inputbox, così:
Sheets("Todero").Copy After:=Sheets(3)
Sheets("Foglio1").Name = "Pippo"
ActiveWindow.DisplayGridlines = False
ActiveWindow.Zoom = 119
Dim Titolo, Messaggio As String
Dim contenitore1 As Variant
Titolo = "Risorse Umane"
Messaggio = "Inserire il Grado"
contenitore1 = InputBox(Messaggio, Titolo)
Range("b9") = contenitore1
Dim contenitore2 As Variant
Titolo = "Risorse Umane"
Messaggio = "Inserire Nome e Cognome"
contenitore2 = InputBox(Messaggio, Titolo)
Range("i9") = contenitore2
Ora il Foglio1 copiato (o aggiunto) non esiste più come Foglio1, ma come
pippo e se credi puoi ripetere le stesse istruzioni, CAMBIANDO IL NOME AL
FOGLIO COPIATO, a seguire queste sopra, per quanti fogli vorrai.
Non so se ho capito la tua domanda, ma da come l'hai posta questo è ciò che
sono riuscito a fare.
ciao, fammi sapere, ennius
Replica di Roberto.
Ciao Ennio, hai centrato il problema, ti ringrazio infinitamente.
Per quanto riguarda il casino nella macro, be tu sai che non è da molto che
bazzico il vba ho imparato qualcosa ma mancano anni luce per esplorarlo
tutto.
Anzi approfitto della tua gentilezza per chiederti un altro quesito. Io
nella cartella di lavoro ho 6 fogli, dei quali 5 formattati allo stesso modo
e nel sesto ho dei collegamenti dei 5. Mi spiego nella cella C46 dei 5 fogli
ho il totale dell'intervallo C15:C45, nel foglio 6 cella A11 facendo copia
incolla speciale ho il totale di tutti i 5 fogli cioè =Licciardello!$C$46+Todero!$C$46+Zappalà!$C$46Cinquanta!$C$46Mascali!$C$46.
Ecco il quesito è questo è possibile magari con quanche funzione diversa
farsì che quando aggiungo un nuovo foglio di lavoro la cella C46 di quest'ultimo
venga aggiunta alla cella a11 del 6° foglio?.
Lo so la domanda è più incasinata della macro precedente ma spero di essermi
fatto capire e che ci sia una risoluzione. Ti ringrazio ancora immensamente.
Risposta.
bene, il sesto foglio avrà un nome, no? supponiamo che si chiami "pippo".
Dobbiamo quindi creare un ciclo che controlli il nome dei fogli, e se il
nome è diverso da pippo, prenda il valore che sarà in una cella (C46) di
ogni foglio e lo sommi ad un totale che va inizializzato a zero. Poi,
siccome la macro la lancerai dal foglio pippo, quindi il foglio attivo in
quel momento, rendiamo la cella A11 (o qualunque altra vorrai) del foglio
attivo uguale al totale. Questa la routine:
Sub Total()
tot = 0
For Each ws In Worksheets 'per ogni foglio (ws)
della cartella
If ws.Name <> "pippo" Then 'se il nome è
diverso da pippo allora:
tot = tot + ws.[C46].Value 'si aggiunge a tot
il valore che sarà il C46
End If
Next ws
ActiveSheet.[A11] = tot 'e si pone tot nella
cella del foglio attivo (pippo)
End Sub
Questa routine ti permette di avere il totale per tutti i fogli, anche se ne
aggiungi di nuovi. Unico accorgimento, non dovrai mai cambiare il nome del
foglio che usi come totale (io ho messo pippo) e i fogli che aggiungi
dovranno avere il totale foglio nella stessa cella (C46) comune a tutti gli
altri fogli.
Spero tu capisca, fammi sapere, ennius
|