Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 30 di 34

Discussione: Salvare dati collegati



  1. #1

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7174
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1308

    Salvare dati collegati

    Ciao ragazzi,
    ho una cartella di lavoro con due fogli: nel foglio 1 ho lasciato dei campi per l’inserimento di dati mentre nel foglio 2 ho messo i collegamenti al foglio 1 (da salvare).

    Avrei bisogno di una macro – attivabile con un pulsante – che faccia le seguenti azioni:

    1) Mi salva i dati del foglio 2 inseriti alla riga 2 trasformandoli da formule a valori (in modo che non risultino più collegati al foglio 1, e quindi salvati anche se modifico il foglio 1);
    2) Mi svuoti i campi dai dati inseriti nel foglio 1 (direi da svuotare celle non bloccate poiché ho intenzione di bloccare nel foglio 1 le celle che non sono campi di scrittura);
    3) Che inserendo nuovi dati nei campi del foglio 1 prosegua a copiarli nel foglio 2 (alla riga immediatamente successiva a quella salvata (cioè alla prima riga libera)

    Non so se sono stato sufficientemente chiaro, in ogni caso allego un file da esempio (le celle sono bloccate ma non c'è password).

    Grazie.

    Edit:
    Opps ....scusate ho sbagliato sezione .. chiedo a Gerardo di spostarla. Grazie
    Ultima modifica fatta da:ges; 02/09/15 alle 20:36
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  2. #2

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931
    Ciao ges,
    puoi provare con questo codice:

    Codice: 
    Option Explicit
    Sub registra()
    Dim wks1 As Worksheet, wks2 As Worksheet, campo As Range, riga As Integer, dati As Range
    Set wks1 = Worksheets("Foglio1")
    Set wks2 = Worksheets("Foglio2")
    wks1.Unprotect
    wks2.Unprotect
    Set dati = wks1.Range("B5:B10")
    riga = wks2.Range("A65000").End(xlUp).Row + 1
    Set campo = wks2.Range("A" & riga & ":F" & riga)
        With wks2
            .Cells(riga, 1).Value = wks1.Range("B5").Value
            .Cells(riga, 2).Value = wks1.Range("B6").Value
            .Cells(riga, 3).Value = wks1.Range("B7").Value
            .Cells(riga, 4).Value = wks1.Range("B8").Value
            .Cells(riga, 5).Value = wks1.Range("B9").Value
            .Cells(riga, 6).Value = wks1.Range("B10").Value
            With campo
                .Borders(xlEdgeLeft).LineStyle = xlContinuous
                .Borders(xlEdgeTop).LineStyle = xlContinuous
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
                .Borders(xlEdgeRight).LineStyle = xlContinuous
                .Borders(xlInsideVertical).LineStyle = xlContinuous
            End With
        End With
    dati.ClearContents
    Range("B5").Select
    wks1.Protect
    wks2.Protect
    End Sub
    da mettere in un modulo e dopo assegnare ad un pulsante.
    Ad inizio e fine codice i due fogli vengono prima "sprotetti" e "riprotetti" prima di finire. Se vuoi aggiungere la password, ad esempio il tuo nome,
    dovrai aggiungerlo tra virgolette sia dopo "Protect" che dopo "Unprotect":

    wks1.Protect "ges"
    wks1.Unprotect "ges"

    Ti lascio comunque il file in allegato....

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  3. #3

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7174
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1308
    Perfetto, funziona ottimamente!!! :255:
    Grazie Cromagno .... una cosa però, visto che il mio è un file di esempio, se voglio aggiungere altre celle di scrittura sul foglio 1 che debbano essere salvate sul foglio2 cosa cambio nel codice?
    Per esempio se aggiungo la cella di scrittura E2 nel foglio 1 aggiungo la riga in rosso per salvarla?
    E per svuotarla?
    Codice: 
    Option ExplicitSub registra()
    Dim wks1 As Worksheet, wks2 As Worksheet, campo As Range, riga As Integer, dati As Range
    Set wks1 = Worksheets("Foglio1")
    Set wks2 = Worksheets("Foglio2")
    wks1.Unprotect
    wks2.Unprotect
    Set dati = wks1.Range("B5:B10")
    riga = wks2.Range("A65000").End(xlUp).Row + 1
    Set campo = wks2.Range("A" & riga & ":F" & riga)
    With wks2
    .Cells(riga, 1).Value = wks1.Range("B5").Value
    .Cells(riga, 2).Value = wks1.Range("B6").Value
    .Cells(riga, 3).Value = wks1.Range("B7").Value
    .Cells(riga, 4).Value = wks1.Range("B8").Value
    .Cells(riga, 5).Value = wks1.Range("B9").Value
    .Cells(riga, 6).Value = wks1.Range("B10").Value
    .Cells(riga, 7).Value = wks1.Range("E2").Value
    With campo
    .Borders(xlEdgeLeft).LineStyle = xlContinuous
    .Borders(xlEdgeTop).LineStyle = xlContinuous
    .Borders(xlEdgeBottom).LineStyle = xlContinuous
    .Borders(xlEdgeRight).LineStyle = xlContinuous
    .Borders(xlInsideVertical).LineStyle = xlContinuous
    End With
    End With
    dati.ClearContents
    Range("B5").Select
    wks1.Protect
    wks2.Protect End Sub
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  4. #4

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931
    Esattamente :90:

    comunque, fai delle prove (per vedere come si comporta), se non dovessi riuscire (se sono in grado) ti darò una mano...

    Ciao ges

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  5. #5

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931
    [EDIT]
    però dovrai anche aggiornare il range da cancellare ("dati") aggiungendo anche la cella E2 (puoi unire i range con il metodo "union" se non sbaglio) ...
    e forse altre piccole cose che noterai provando ;)

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  6. #6

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7174
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1308
    Ok, ..ho aggiunto una nuova cella E2 in cui inserisco dei dati e con la modifica in rosso mi si scrivono nel foglio 2 però non si svuotano dal foglio1 ... sto leggendo su questo metodo "union" ... per ora solo fallimenti :187: ... è ancora troppo aventi per me ... comunque ci sto provando.
    Grazie
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  7. #7

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    @cromagno: ricordati che le variabili destinate a ricevere un numero di riga o di colonna è più corretto dichiararle Long; poi meglio distruggere le istanze degli oggetti.
    Infine, meglio non annidare i With se il With annidato non dipende da quello esterno, il codice diventa più leggibile:

    Codice: 
    Sub registra()
        Dim wks1 As Worksheet, wks2 As Worksheet, 
        Dim campo As Range, dati As Range
        Dim riga As Long
    
    
        Set wks1 = Worksheets("Foglio1")
        Set wks2 = Worksheets("Foglio2")
        wks1.Unprotect
        wks2.Unprotect
        Set dati = wks1.Range("B5:B10")
        riga = wks2.Range("A65000").End(xlUp).Row + 1
        With wks2
            Set campo = .Range("A" & riga & ":F" & riga)
            .Cells(riga, 1).Value = wks1.Range("B5").Value
            .Cells(riga, 2).Value = wks1.Range("B6").Value
            .Cells(riga, 3).Value = wks1.Range("B7").Value
            .Cells(riga, 4).Value = wks1.Range("B8").Value
            .Cells(riga, 5).Value = wks1.Range("B9").Value
            .Cells(riga, 6).Value = wks1.Range("B10").Value
        End With
        With campo
            .Borders(xlEdgeLeft).LineStyle = xlContinuous
            .Borders(xlEdgeTop).LineStyle = xlContinuous
            .Borders(xlEdgeBottom).LineStyle = xlContinuous
            .Borders(xlEdgeRight).LineStyle = xlContinuous
            .Borders(xlInsideVertical).LineStyle = xlContinuous
        End With
    
        dati.ClearContents
        Range("B5").Select
        wks1.Protect
        wks2.Protect
        Set wks1 = Nothing
        Set wks2 = Nothing
        Set dati = Nothing
    
    End Sub
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  8. #8
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3349
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da cromagno Visualizza Messaggio
    Ciao ges,
    puoi provare con questo codice:
    ciao Cromagno mi piace questo codice ma ho da chiederti solo un piccolo particolare :
    perchè per trovare la prima riga vuota nel foglio 2 parti da una certa cella dal basso ?

    riga = wks2.Range("A65000").End(xlUp).Row + 1

    non sarebbe più "giusto" partire dalla prima considerando che c'è una riga d'intestazione?

    magari c'è una logica in quello che hai fatto e che io non conosco ma mi è venuta questa curiosità :50:

    grazie per la tua eventuale risposta.

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  9. #9

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7174
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1308
    Grazie scossa, ho sostituito il tuo codice e mi viene fuori questo messaggio di errore:





    Sbaglio in qualcosa?
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  10. #10

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Grazie scossa, ho sostituito il tuo codice e mi viene fuori questo messaggio di errore:
    Sbaglio in qualcosa?
    No, ho editato il messaggio nel forum anziché in Excel ed ho dimenticato di togliere quella virgola alla fine della riga rossa, sorry.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  11. #11

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931
    @scossa
    speravo ti facessi vivo per correggere quelle cose (che se pur mi è già capitato di vederne l'uso corretto) di cui ancora non sono pratico.
    Thanks

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  12. #12

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Citazione Originariamente Scritto da Baloon_50 Visualizza Messaggio
    perchè per trovare la prima riga vuota nel foglio 2 parti da una certa cella dal basso ?

    riga = wks2.Range("A65000").End(xlUp).Row + 1
    Si parte dall'ultima riga e si risale alla prima cella occupata per evitare che eventuale celle vuote tra la prima e l'ultima riga compilate falsino il risultato.
    Il codice utilizzato infatti è l'equivalente delle azioni fatte via tastiera per portarsi alla fine del foglio e tornare all'ultima cella piena.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  13. #13

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7174
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1308
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    No, ho editato il messaggio nel forum anziché in Excel ed ho dimenticato di togliere quella virgola alla fine della riga rossa, sorry.
    Ottimo!!:97:
    Ho tolto la virgola, funziona perfettamente, grazie!!!
    Come ho scritto prima, però, questo è un file di esempio, in realtà mi servono altre celle scrivibili nel foglio 1 da salvare nel foglio 2 e con lo stesso metodo e svuotare al click del pulsante ... Cromagno gentilmente mi ha suggerito il metodo "union" che sto leggendo ma per ora senza risultati ...se puoi darmi qualche suggerimento al riguardo.
    Per esempio se ho bisogno che oltre all'intervallo B5:B10 di avere una cella scrivibile in E2 ed E4 che mi si salvi nel foglio 2 e poi mi si cancella cosa dovrei modificare nel codice?
    Grazie
    Allego file
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  14. #14

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931
    Ciao Baloon,
    si, il motivo è quello che ha spiegato "scossa".
    Per come dovrebbe essere usato il codice, non ce ne sarebbe bisogno, ma ho voluto prevenire visto che altre volte dopo alcuni cambiamenti del codice, questo era uno dei principali errori.

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  15. #15

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931
    @ges
    per la cancellazione finale... per aggiungere nuovi range con "union" (funziona come la funzione "CONCATENA" solo che al posto delle stringhe ci sono i range e al posto dei "punti e virgola" per separare ci sono le "virgole"):

    per aggiungere ad esempio la cella E2 e anche la E4:

    Codice: 
    Set dati = union(wks1.Range("B5:B10"), wks1.Range("E2"), wks1.Range("E4"))
    non l'ho provato, ma dovrebbe essere corretto...

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  16. #16

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7174
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1308
    @cromagno
    Funziona!! Perfetto!!!! :274:
    Questo codice si può capire solo scrivendolo!!!!
    Grazie

    Ho usato la sintassi di scossa:
    Codice: 
    Sub registra()    Dim wks1 As Worksheet, wks2 As Worksheet
        Dim campo As Range, dati As Range
        Dim riga As Long
    
    
    
    
        Set wks1 = Worksheets("Foglio1")
        Set wks2 = Worksheets("Foglio2")
        wks1.Unprotect
        wks2.Unprotect
        Set dati = Union(wks1.Range("B5:B10"), wks1.Range("E2"), wks1.Range("E4"))
        riga = wks2.Range("A65000").End(xlUp).Row + 1
        With wks2
            Set campo = .Range("A" & riga & ":F" & riga)
            .Cells(riga, 1).Value = wks1.Range("B5").Value
            .Cells(riga, 2).Value = wks1.Range("B6").Value
            .Cells(riga, 3).Value = wks1.Range("B7").Value
            .Cells(riga, 4).Value = wks1.Range("B8").Value
            .Cells(riga, 5).Value = wks1.Range("B9").Value
            .Cells(riga, 6).Value = wks1.Range("B10").Value
            .Cells(riga, 7).Value = wks1.Range("e2").Value
            .Cells(riga, 8).Value = wks1.Range("e4").Value
    
    
    EndWith
        With campo
            .Borders(xlEdgeLeft).LineStyle = xlContinuous
            .Borders(xlEdgeTop).LineStyle = xlContinuous
            .Borders(xlEdgeBottom).LineStyle = xlContinuous
            .Borders(xlEdgeRight).LineStyle = xlContinuous
            .Borders(xlInsideVertical).LineStyle = xlContinuous
    EndWith
    
    
        dati.ClearContents
        Range("B5").Select
        wks1.Protect
        wks2.Protect
        Set wks1 = Nothing
        Set wks2 = Nothing
        Set dati = Nothing
    
    
    EndSub
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  17. #17
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3349
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Si parte dall'ultima riga e si risale alla prima cella occupata per evitare che eventuale celle vuote tra la prima e l'ultima riga compilate falsino il risultato.
    Il codice utilizzato infatti è l'equivalente delle azioni fatte via tastiera per portarsi alla fine del foglio e tornare all'ultima cella piena.
    ok capito.
    Adesso (non sparatemi vorrei capire per poter imparare) è giusto che la riga :

    Set campo = wks2.Range("A" & riga & ":F" & riga)

    stia all'interno del whit wks2 ?

    Grazie e scusatemi ancora per la rottura

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  18. #18

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931
    Citazione Originariamente Scritto da Baloon_50 Visualizza Messaggio
    ok capito.
    ...è giusto che la riga :

    Set campo = wks2.Range("A" & riga & ":F" & riga)

    stia all'interno del whit wks2 ?
    Credo che "scossa" l'abbia fatto solo per una questione di "leggibilità", nel senso che ha raggruppato tutte le operazioni che vengono fatte con "wks2".
    Almeno questa è la mia prima impressione...

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  19. #19
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3349
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da cromagno Visualizza Messaggio
    Credo che "scossa" l'abbia fatto solo per una questione di "leggibilità", nel senso che ha raggruppato tutte le operazioni che vengono fatte con "wks2".
    Almeno questa è la mia prima impressione...
    Ah ok quindi è solo per un fattore "estetico" :208:

    Grazie ancora e buonanotte.

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  20. #20

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Ciao,

    Citazione Originariamente Scritto da Baloon_50
    Ah ok quindi è solo per un fattore "estetico"
    il fattore estetico in realtà è il meno importante.
    Ogni dot (punto) nella "stringa" che referenzia un oggetto deve essere "risolto" dall'interprete VB.
    L'uso del costrutto With .. End With permette di esguire una sola volta questo calcolo, in quanto tutti i riferimenti degli oggetti/propreità/metodi indicati con un dot iniziale verrano considerati appartenenti all'oggetto indicato in With.

    Cerco di farmi capire con una metafora molto "azzardata":
    abbiamo una scatola di biscotti e vogliamo mangiarne uno. Apriamo la scatola, prendiamo un biscotto, lo mangiamo, chiudiamo la scatola.
    Ma se vogliamo mangiare 3 biscotti non avrebbe molto senso, dopo ogni biscotto chiudere la scatola per poi riaprirla.
    Ecco con il costrutto With .. End With noi risparmiamo al processore di aprire continuamente l'oggetto ScatolaBiscotti per risolvere il gruppo di azioni con cui interagiamo con essa.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  21. #21
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3349
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,



    il fattore estetico in realtà è il meno importante.
    Ogni dot (punto) nella "stringa" che referenzia un oggetto deve essere "risolto" dall'interprete VB.
    L'uso del costrutto With .. End With permette di esguire una sola volta questo calcolo, in quanto tutti i riferimenti degli oggetti/propreità/metodi indicati con un dot iniziale verrano considerati appartenenti all'oggetto indicato in With.

    Cerco di farmi capire con una metafora molto "azzardata":
    abbiamo una scatola di biscotti e vogliamo mangiarne uno. Apriamo la scatola, prendiamo un biscotto, lo mangiamo, chiudiamo la scatola.
    Ma se vogliamo mangiare 3 biscotti non avrebbe molto senso, dopo ogni biscotto chiudere la scatola per poi riaprirla.
    Ecco con il costrutto With .. End With noi risparmiamo al processore di aprire continuamente l'oggetto ScatolaBiscotti per risolvere il gruppo di azioni con cui interagiamo con essa.
    Benissimo capito. Anche la metafora è stat di grande aiuto a farmi capire. Spero almeno che i biscotti siano buoni.

    Grazieee

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  22. #22

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931
    Quando si parla di biscotti si è tutti più attenti :184:
    Hai reso l'idea.

    Ciao "scossa" :246:

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  23. #23

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7174
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1308
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,



    il fattore estetico in realtà è il meno importante.
    Ogni dot (punto) nella "stringa" che referenzia un oggetto deve essere "risolto" dall'interprete VB.
    L'uso del costrutto With .. End With permette di esguire una sola volta questo calcolo, in quanto tutti i riferimenti degli oggetti/propreità/metodi indicati con un dot iniziale verrano considerati appartenenti all'oggetto indicato in With.

    Cerco di farmi capire con una metafora molto "azzardata":
    abbiamo una scatola di biscotti e vogliamo mangiarne uno. Apriamo la scatola, prendiamo un biscotto, lo mangiamo, chiudiamo la scatola.
    Ma se vogliamo mangiare 3 biscotti non avrebbe molto senso, dopo ogni biscotto chiudere la scatola per poi riaprirla.
    Ecco con il costrutto With .. End With noi risparmiamo al processore di aprire continuamente l'oggetto ScatolaBiscotti per risolvere il gruppo di azioni con cui interagiamo con essa.
    Non potevi essere più chiaro! :286:
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  24. #24

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Grazie a voi per il riscontro.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  25. #25

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7174
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1308
    Ho provato e riprovato il codice e funziona a meraviglia .... però, scusate se approfitto della vostra disponibilità e pazienza avrei bisogno ancora di una "chicca" per completare il mio progetto.

    C'è un dato che posso inserire solo dopo aver inserito gli altri dati (come esempio ho citato la "data di presa visione"), vorrei che inserendo questo ultimo dato (es. J9) tramite un pulsante (ma va bene anche automaticamente senza pulsante) questo dato si inserisse nella casella corrispondente al nome nel secondo foglio che richiamo con una formula nel primo foglio.

    Prevediamo se è possibile che come nel primo caso posso scegliere due o più celle da inserire dopo.

    Come sempre un esempio è meglio di mille parole.

    Grazie ancora.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  26. #26

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7174
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1308
    Niente, ho provato a fare qualche prova ma ancora sono troppo debole nel vba riesco solo a creare confusione :20: cioè, non mi riesce di inserire l'altro dato a lato della colonna corrispondete - come nel file che ho indicato sopra.
    Mi affido a qualcuno disponibile.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  27. #27

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1027
    Versione Office
    .
    Likes ricevuti
    368
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Niente, ho provato a fare qualche prova ma ancora sono troppo debole nel vba riesco solo a creare confusione :20: cioè, non mi riesce di inserire l'altro dato a lato della colonna corrispondete - come nel file che ho indicato sopra.
    Mi affido a qualcuno disponibile.
    Ho sistemato il file inserendo dei "nomi" per le celle di input e sistemando il codice.

    Codice: 
    Sub registra()
        Dim wks1 As Worksheet, wks2 As Worksheet
        Dim campo As Range
        Dim riga As Long
    
        Set wks1 = ThisWorkbook.Worksheets("Foglio1")
        Set wks2 = ThisWorkbook.Worksheets("Foglio2")
        wks2.Unprotect
        riga = wks2.Cells(Rows.Count, 1).End(xlUp).Row + 1
        With wks2
            Set campo = .Range("A" & riga & ":F" & riga)
            .Cells(riga, 1).Value = [Nome].Value
            .Cells(riga, 2).Value = [Data_Na].Value
            .Cells(riga, 3).Value = [Luogo_Na].Value
            .Cells(riga, 4).Value = [Residenza].Value
            .Cells(riga, 5).Value = [Tel].Value
            .Cells(riga, 6).Value = [Codice].Value
            .Cells(riga, 7).Value = [Prot].Value
            .Cells(riga, 8).Value = [Sesso].Value
        End With
        With campo
            .Borders(xlEdgeLeft).LineStyle = xlContinuous
            .Borders(xlEdgeTop).LineStyle = xlContinuous
            .Borders(xlEdgeBottom).LineStyle = xlContinuous
            .Borders(xlEdgeRight).LineStyle = xlContinuous
            .Borders(xlInsideVertical).LineStyle = xlContinuous
        End With
        [dati].ClearContents
        Range("B5").Select
        wks2.Protect
        Set wks1 = Nothing
        Set wks2 = Nothing
    
    End Sub

    Codice: 
    'Registrazione Presa Visione
    Sub PV()
      Dim wks2 As Worksheet
      Dim nRow As Long
      
      Set wks2 = ThisWorkbook.Worksheets("Foglio2")
      With wks2
        .Unprotect
        nRow = Evaluate("MATCH(Foglio1!$E$9,Foglio2!$A$2:$A$8,0)") + 1
        .Cells(nRow, 9).Value = [DT_PV].Value
        [DT_PV].ClearContents
        .Protect
      End With
      
      Set wks2 = Nothing
    End Sub
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  28. #28

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7174
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1308
    Eccellente!!! Funziona alla perfezione. :274::274::274:
    Grande scossa!!!
    Grazie ancora.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  29. #29

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4046
    Versione Office
    2013
    Likes ricevuti
    1239
    Likes dati
    931
    Ciao a tutti ragazzi :)
    scusate la mia scarsa presenza ma... finalmente sono in ferie :274:

    @ges
    niente da dire sul codice di "scossa" ma volevo solo darti un consiglio...
    Per come è scritto ora, il codice utilizza la funzione "CONFRONTA" per trovare il nome (scritto nella cella "E9" del Foglio1) nella colonna "A" del Foglio2.
    Come ben sai, in caso di omonimia, la "Data per Presa Visione" verrebbe trascritta nella riga corrispondente al primo riscontro trovato, quindi ti suggerisco di lasciare una colonna nel foglio2 per attribuire un indice univoco (1,2,3, etc...) ad ogni nominativo, in modo da utilizzare quella colonna per la ricerca e quindi la trascrizione della data nella riga corretta.

    Come detto prima, il mio è solo un consiglio...

    Ciao :269:

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  30. #30

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7174
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1308
    Ciao cromagno,
    si sente la tua mancanza e buon per te che sei in ferie!
    Il tuo è un buon suggerimento, però se aggiungo una colonna nel foglio 2 mi viene fuori un errore alla seguente riga del codice.
    nRow = Evaluate("MATCH(Foglio1!$E$9,Foglio2!$A$2:$A$8,0)") + 1
    Per fare delle modifiche dovrei capire come aggiustare anche il codice.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

Discussioni Simili

  1. fogli excel collegati
    Di Francesco60 nel forum Domande su Excel in generale
    Risposte: 7
    Ultimo Messaggio: 09/02/17, 19:31
  2. Risposte: 4
    Ultimo Messaggio: 17/11/16, 02:45
  3. salvare automaticamente dati in celle differenti
    Di viareggino77 nel forum Domande su Excel VBA e MACRO
    Risposte: 2
    Ultimo Messaggio: 01/10/16, 01:34
  4. [Risolto] Salvare i dati di un record in una maschera dietro una condizione
    Di ProgrammD69 nel forum Domande su Microsoft Access
    Risposte: 13
    Ultimo Messaggio: 12/07/16, 17:10
  5. file excel collegati che non apre
    Di mpaolett nel forum Domande su Excel in generale
    Risposte: 0
    Ultimo Messaggio: 05/06/16, 22:00

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •