creare copia di un foglio



  • 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