Modulo base



  • Modulo base
    di Tullio (utente non iscritto) data: 09/03/2013 18:27:34

    Una volta aperti i files, lavoro su BASE Progetti, e salvo il foglio Fattura da solo, poi anche BASE Progetti con il foglio Articoli, però se viene modificata da altri ( e può succedere ) una cella con una formula e si salva viene fuori un macello, come potrei ovviare ?
    Potrei fare in modo che all'apertura importi il foglio Fattura in modo che l'originale rimanga sempre integro con le sue formule?
    Ti allego i file.
    Grazie



  • di HarryBosch data: 09/03/2013 19:12:46

    Ciao Tullio
    certo, un buon programmino dovrebbe fare proprio questo:
    consentire la scrittura e la selezione dei dati per la compilazione di un documento (nel tuo caso la fattura), senza che la struttura del "modello" venga alterata.
    Quindi, dovrebbero essere protette quelle parti del foglio da non modificare (ad esempio dove utilizzi le formule).

    Serve poi una macro che crei una copia della fattura su un nuovo file, e che cancelli i dati presenti nel modello, in modo da consentire una nuova fatturazione.

    Ho preparato un esempio molto simile in un thread nell'altra sezione del Forum; non c'era di mezzo una fattura ma il concetto era lo stesso.

    Ho visto che hai abbozzato delle routine; le guardo un attimo e appena posso ti allego un esempio.




  • di Tullio (utente non iscritto) data: 09/03/2013 19:30:14

    Grazie dell'interesse HarryBosh.



  • di Tullio (utente non iscritto) data: 09/03/2013 20:22:35

    Ciao HarryBosh, scusa ma ho una gran confusione nelle cartelle con le prove, alla cartella BASE Progetti dovresti aggiungere un foglio chiamato "archivio" e le Sub che ho modificato sono qui allegate.

     
    Sub controllarigaearchivia()
    Dim riga, colonna, maxcolonna As Integer
    maxcolonna = 10
    riga = 4
    colonna = 1
    Sheets("archivio").Select
    Cells(riga, colonna).Select
    While Not Cells(riga, colonna) = "" ' Controlla tutte le righe della prima colonna
        riga = riga + 1                 ' se sono vuote
    Wend
        
    While colonna <> maxcolonna                 'controlla le colonne della
        'Cells(riga, colonna).Select             prima riga vuota
            If Cells(riga, colonna) = "" Then   'e si posiziona per la copia.
                
                colonna = colonna + 1
            Else
                colonna = maxcolonna
                riga = riga + 1
                
            End If
    Wend
    colonna = 1
    Cells(riga, colonna).Select
            
    End Sub
    -----------------------------------------
    
    Sub archivia()
    '
    ' archivia Macro
    ' Macro registrata il 03/03/2006 da xx
    '
    
    
    '
    Application.ScreenUpdating = False
    Sheets("archivio").Select
    Dim riga, colonna, maxcolonna As Integer
    maxcolonna = 10
    
    
    
    riga = 4
    colonna = 1
    
    Sheets("archivio").Select
    Cells(riga, colonna).Select
    While Not Cells(riga, colonna) = "" ' Controlla tutte le righe della prima colonna
        riga = riga + 1                 ' se sono vuote
    Wend
        
    Cells(riga, colonna).Select
        
        'Selection.Insert Shift:=xlDown COLORA DI GIALLO LA CELLA
        'Selection.Insert Shift:=xlDown
        Sheets("fattura").Select
        Cells(12, 5).Select   'CLIENTE
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("archivio").Select
        Cells(riga, colonna).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
    
        Sheets("fattura").Select
        Cells(17, 3).Select 'DOCUMENTO
        
        
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("archivio").Select
        colonna = colonna + 1
        Cells(riga, colonna).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
    
    
        Sheets("fattura").Select
        Cells(15, 3).Select 'DATA DOCUMENTO
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("archivio").Select
        colonna = colonna + 1
        Cells(riga, colonna).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Sheets("fattura").Select
        'ActiveWindow.SmallScroll Down:=24
        Cells(28, 5).Select 'IMPORTO DOCUMENTO
        'ActiveWindow.SmallScroll Down:=3
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("archivio").Select
        colonna = colonna + 1
        Cells(riga, colonna).Select
        'ActiveWindow.SmallScroll Down:=0
        'Range("D7").Select
        'ActiveWindow.SmallScroll Down:=-12
        'Range("D4").Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Sheets("fattura").Select
        Cells(31, 4).Select 'DATA SCADENZA 1
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("archivio").Select
        colonna = colonna + 1
        Cells(riga, colonna).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Sheets("fattura").Select
        'ActiveWindow.SmallScroll Down:=0
        Cells(31, 5).Select 'IMPORTO SCADENZA 1
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("archivio").Select
        colonna = colonna + 1
        Cells(riga, colonna).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Sheets("fattura").Select
        Cells(32, 4).Select 'DATA SCADENZA 2
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("archivio").Select
        'ActiveWindow.SmallScroll Down:=-3
        colonna = colonna + 1
        Cells(riga, colonna).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Sheets("fattura").Select
        Cells(32, 5).Select 'IMPORTO SCADENZA 2
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("archivio").Select
        colonna = colonna + 1
        Cells(riga, colonna).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Sheets("fattura").Select
        Cells(33, 4).Select 'DATA SCADENZA 3
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("archivio").Select
        colonna = colonna + 1
        Cells(riga, colonna).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Sheets("fattura").Select
        Cells(33, 5).Select 'IMPORTO SCADENZA 3
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("archivio").Select
        colonna = colonna + 1
        Cells(riga, colonna).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
       Application.CutCopyMode = False
    
    Orientation:=xlTopToBottom
        Sheets("fattura").Select
        ActiveWindow.SmallScroll Down:=-36
        Range("C8").Select
    End Sub



  • di Tullio (utente non iscritto) data: 11/03/2013 11:28:36

    Così, leggendo quà e là anche in altri forum, dovrei aver risolto almeno il problema del "Modello" perché se creo un modello salvando l'originale come .xlt ho sempre un originale buono.
    Però a questo punto dovrei salvare il foglio "archivio" e aggiungerlo alla apertura della cartella.
    Ho anche creato la Macro per l'archiviazione della "Fattura" all'interno di una directory.
    Ho piacere che tu guardi il codice.
    Grazie HarryBosh



  • di Tullio (utente non iscritto) data: 11/03/2013 19:10:48

    Sto andando in m.rda.
    Il Progetto si chiama "NUOVA BASE ecc."
    apre 3 fogli: Fattura,Articoli,Archivio
    1 Fattura è il frontespizio con le formule nel quale inserisco i dati
    2 Articoli è un elenco
    3 Archivio è un elenco delle scadenze ricavate dalle fattura e che si aggiorna volta volta
    Rubrica clienti è una tabella xls ricavata da un file mdb
    Le Sub che allego sono in "This Woorkbook" .
    Quando apro il file mi da errore "La cartella di lavoro contiene collegamenti che non possono essere aggiornati" e propone le scelte Continua - Modifica collegamenti ma se cerco di modificare i collegamenti mi apre la finestra vuota ma la Rubrica clienti si apre regolarmente, poi quando arrivo a chiudere mi da ERRORE di RUNTIME 9 alla riga di codice che chiude la Rubrica clienti.
    Che cosa sto sbagliando?
    Grazie
     
    Private Sub Workbook_Activate()
    Workbooks("NUOVA BASE PROGETTI - NOTULE (collegata a rubrica clienti OK).xls").Activate
    
    End Sub
    ------------------------------
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'ERRORE DI RUNTIME 9 - INDICE NON INCLUSO NELL'INTERVALLO
    Workbooks("Rubrica clienti.xls").Close False
    Workbooks("NUOVA BASE PROGETTI - NOTULE (collegata a rubrica clienti OK).xls").Close
    
    End Sub
    -------------------------------
    Private Sub Workbook_Open()
    Workbooks.Open ("D:Roba di MarcoRubrica clienti.xls")
    End Sub
    



  • di Tullio (utente non iscritto) data: 11/03/2013 19:30:47

    E mi rimane aperta la cartella Personal.
    Nsocapace.



  • di Vecchio Frac data: 11/03/2013 20:36:44

    Ecco lì il punto rimasto in sospeso dall'altra discussione!
    Hai un file Personal.xls nella cartella XLSTART che ovviamente viene aperto in automatico ad ogni esecuzione di Excel e quindi anche se il workbook si chiude regolarmente (vedi l'altra discussione) rimane aperta l'istanza di Personal ^_^
    Se in Personal non ci sono funzioni e moduli che ti servono, allora toglilo da quella cartella e tutto si sistemerà.
    Altrimenti dopo aver salvato il Workbook imposta un bel
    Application.Quit
    come ultima istruzione e risolviamo quella faccenda.
    L'errore di runtime 9 indica che non esiste più, tra i file aperti, uno di quelli che cerchi di chiudere (Rubrica clienti oppure Nuova base progetti).





  • di Vecchio Frac data: 11/03/2013 20:41:31

    Mamma mia, la macro "archivia" in modulo 2 di Nuova base progetti è roba da infarto :P
    (anche "macro4" è incasinata ma essendo più corta è un tantino più comprensibile)
    ^_^





  • di Vecchio Frac data: 11/03/2013 20:43:22

    L'errore di runtime 9 deriva dal fatto che all'inizio non viene probabilmente trovata la rubrica.
    Quindi alla chiusura della nuova base progetti il codice in uscita tenta di chiudere un file che non è stato trovato e quindi non si è aperto.
    Verifica che il nome del file e il percorso siano corretti ("D:Roba di MarcoRubrica clienti.xls").





  • di HarryBosch data: 11/03/2013 20:56:11

    Si... molte cosse si possono ottimizzare ^_^
    Anch'io stavo cercano di capir bene il ragionamento di Tullio prima di aiutarlo nell'impresa.
    Però è bello vedere che qualcuno provi e riprovi con la propria testa...




  • di Vecchio Frac data: 11/03/2013 21:13:56

    Quoto Harry e attendiamo sviluppi :)





  • di Tullio (utente non iscritto) data: 12/03/2013 17:23:34

    Ciao Vecchio Frac, ho trovato la Xlstart e tolta di mezzo, ma se poi avessi nuovamente bisogno della cartella personal ce la rimette vero?
    Per quanto riguarda la macro incasinata, anche a me pare così, è perché il file di partenza l'ho trovato in rete con questa già fatta e io l'ho solo adattata ma mi riprometto di metterla a posto appena tutto il resto funziona come dovrebbe,di mio c'è la Sub controllarigaearchivia().
    L'errore di runtime lo da nonostante che trovi e carichi "Rubrica clienti", ho provato a modificare il collegamento ma è lo stesso ditemi qualcosa di più per favore.
    Ho inserito due pulsanti sul foglio "Fattura", ma quando lo copio mi copia anche quelli, mi sembra di aver letto (ma non lo ritrovo) che c'è modo di non farli copiare, come?
    Grazie di una risposta a te e a HarryBosh che saluto.