creare copia di un foglio
Hai un problema con Excel? 
creare copia di un foglio
di Gerry (utente non iscritto) data: 27/05/2014 19:05:30
Salve a tutti, ho un problema da risolvere con excel, ho un file con dei fogli, ho la necessita di creare una copia speculare del foglio, compreso formule e formattazione, naturalmente tramite il clik di un pulsante, quando si esegue la copia del fogli si deve essere avvisati di inserire un nome.
spero che sia fattibile grazie a tutti.
di Lucas87 data: 27/05/2014 19:49:19
Ciao
Prova così se va bene
Da collegare al pulsante
percorso = "C:cartella" 'con / finale
n = InputBox("Inserire nome file: ")
If n <> "" Then
ActiveWorkbook.SaveCopyAs (percorso & n & ".xlsm")
End If
|
di Gerry (utente non iscritto) data: 27/05/2014 21:44:41
ciao Lucas87 quello che devo fare e la copia del foglio esempio apri un file excel allinterno ci sono: foglio1, foglio2, foglio3, quello che devo fare io e la copia del foglio.
esempio: foglio1 un pulsante duplica foglio se io clicco il pulsante mi deve fare un puplicato del foglio e permettermi di rinominarlo
di Lucas87 data: 28/05/2014 08:04:40
Ma copiarlo all'interno della stessa cartella di lavoro?
di Gerry (utente non iscritto) data: 28/05/2014 12:18:27
Cia Lucas87 in parte ho risolto il problema con questo codice, solo che adesso si presenta un altro problema,
una volta creato il duplicato del foglio e possibile impostare un controllo che mi indica di inserire un valore nella cella G4 se questa e vuota, se prima non inserisco un valore in tale cella il foglio deve risultare bloccato praticamente non devo poter inserire altri valori, il tutto deve avvenire solo quando attivo apro il foglio.
Spero che sia possibile.
Sub DuplicaFoglio2()
n = InputBox("Inserire nome file: ")
If n <> "" Then
ActiveSheet.Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = [n]
End If
End Sub |
di Lucas87 data: 28/05/2014 12:56:36
Ciao.
Il tuo codice va bene ma può essere migliorato.
Pensavo a qualcosa del genere (vedi sotto).
Va messo in un nuovo modulo (inserisci-->modulo)
Poi nel foglio crei un pulsante e nel codice del pulsante richiami la sub copia.
Così eviti di ripeterla per ogni foglio.
L'altra richiesta non mi è chiara.
Il controllo sulla cella G4 deve essere fatto solo sul nuovo foglio o su tutti?
Se G4 contiene qualcosa (cosa di preciso?) puoi scrivere il resto del foglio; cosa succede se dopo aver compilato il foglio cancello il contenuto di G4?
Potresti allegare un file per capire quello di cui hai bisogno?
Public Sub copia()
Application.ScreenUpdating = False
n = InputBox("Inserire nuovo nome: ", "Nome nuovo foglio")
If n <> "" Then
For Each ws In ThisWorkbook.Worksheets
If ws.Name = n Then
MsgBox "Nome foglio già esistente." & vbCrLf & "Il foglio non verrà copiato.", vbCritical, "Errore foglio esistente"
Set ws = Nothing
Exit Sub
End If
Next
ActiveSheet.Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = n
End If
Set ws = Nothing
Application.ScreenUpdating = True
End Sub
|
di Gerry (utente non iscritto) data: 28/05/2014 15:35:47
cia Lucas87 come da tua richiesta allego una bozza del file, provo a spiegare quello che dovrei fare
nel file c'è un foglio con il nome turno 1 se io clicco il pulsante duplica foglio parte la runtime e michiede il nome del file, inserisco il nome del nuovo file "Turno 2", dopo aver creato il file "Turno 2" si devono apportare delle modifiche, mentre il turno 1 non deve essere modificato, dopo le modifiche ci saranno delle celle vuote e sono la A2, C2, F2, a questo punto se provo a modificare il turno 2 deve partire il messaggio che mi avverte che le celle sono vuote, e se non inserisco i valori non mi deve permettere di apportare modifiche al foglio. Cella A2 Turno. Cella C2 Operatore. Cella F2 Orario.
Attenzione che dal turno 2 io posso creare anche un turno 3 e le modifiche devono avvenire solo sul turno3, mentre il turno 2 non deve esserwe modificato.
di Lucas87 data: 28/05/2014 16:11:14
Vedo molta nebbia...
Sono al punto di aver copiato il foglio....
ORA DICO QUELLO CHE HO CAPITO
A2, C2, F2 devono essere cancellate. Il resto dei dati invece resta?
Fino a quando A2, C2, F2 non vengono compilate non si può scrivere altro
di Gerry (utente non iscritto) data: 28/05/2014 16:55:50
si perchè cambia il turno, l'operatore, e l'orario, mentre nel nuovo turno la chiusura diventa l'aperture
spero di aver spiegato bene quello che dovrei fare?
di Lucas87 data: 28/05/2014 17:00:43
Prova il file che ho allegato
Duplica foglio di lavoro2 - Lucas87.xls
di Gerry (utente non iscritto) data: 28/05/2014 17:57:44
ci siamo quasi Lucas87 ancora una piccola modifica, dopo che il nuovo file è stato creato bisogna copiare i numeri della chiusura ed incollarli al posto dei nei numeri dell'apertura, praticamente nel nuovo turno i numeri di apertura, sono sempre i numeri della chiusura del turno precedente.
Grazie
di Lucas87 data: 28/05/2014 18:19:43
Modifica la sub copia
Public Sub copia()
Application.ScreenUpdating = False
n = InputBox("Inserire nuovo nome: ", "Nome nuovo foglio")
If n <> "" Then
For Each ws In ThisWorkbook.Worksheets
If ws.Name = n Then
MsgBox "Nome foglio già esistente." & vbCrLf & "Il foglio non verrà copiato.", vbCritical, "Errore foglio esistente"
Set ws = Nothing
Exit Sub
End If
Next
ActiveSheet.Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = n
Sheets(n).Range("A2,C2,F2") = ""
Sheets(n).Range("b4:b12").Value = Sheets(n).Range("c4:c12").Value
Sheets(n).Range("c4:c12").ClearContents
End If
Set ws = Nothing
Application.ScreenUpdating = True
End Sub
|
di Gerry (utente non iscritto) data: 28/05/2014 18:38:25
ho modificato la Sub copia, ma mi da errore, si apre l'editor vba e si posiziona sulla sub copia selezionando su l'ultima riga di copice la parola True, con errore di compilazione.
di Lucas87 data: 28/05/2014 18:40:58
Non saprei...
sicuro di aver copiato bene?
di Lucas87 data: 28/05/2014 18:41:50
Anche perchè ho solo aggiunto 2 righe e quella che ti da errore non è tra quelle
di Gerry (utente non iscritto) data: 28/05/2014 18:55:59
ho fatto un errore io non mi ero dimenticato di End Sub, manca solo un ultima dodifica una volta copiati i numeri della chiusura non si devono cancellare, altrimenti nel venduto e nelle altre celle si vedono numeri -715652 mentre se i numeri rimangono finchè non si digita una nuova chiusura i totali sono 0
Grazie per la pazienza e scusa
di Lucas87 data: 28/05/2014 19:02:05
Nella colonna venduto metti
=SE(C4-B4<0;"";C4-B4)
Nella colonna incasso metti
=SE(VAL.ERRORE(D4*E4);"";D4*E4)
e trascina in basso
di Gerry (utente non iscritto) data: 28/05/2014 19:12:21
Grazie adesso funziona tuuto a meraviglia grazie ancora
di mb data: 29/05/2014 14:48:53
ciao dal curiosone
bellissimo questo post un consiglio solo, le celle di colonna k ed l dovrebbero cambiare o no altrimenti?? altrimenti nei turni successivi compare sempre il valore del 1 turno o mi sbaglio nell'interpretazione del file ??
ciao buon pomeriggio
di Lucas87 data: 29/05/2014 15:13:37
Ciao
Non ci sono riferimenti a quelle colonne.
Credo siano rimaste li da tentativi precedenti
Vuoi Approfondire?