Risultati da 1 a 20 di 20

Discussione: VBA domande sui riferimenti Range



  1. #1
    L'avatar di Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1126

    VBA domande sui riferimenti Range

    Ciao a tutti
    Il codice che vedete qui sotto l'ho copiato dal libro, ho provato a farlo con il registratore di macro ed è quasi uguale, devo ammettere che in questo caso il codice creato con il registratore è molto più comprensibile
    infatti questo codice mi lascia alcune domande sui riferimenti

    1)ActiveCell.Offset(0, -1).Range("A1").Select la parte in rosso dovrebbe essere la ("D2") come potete verificare dall'allegato

    2)ActiveCell.Offset(-6, 0).Range("A1:C7").Select la parte in rosso dovrebbe essere la ("D2:F8")

    Nome definito "RigaForm" corrisponde a D2:F2



    Codice: 
    Sub FomulaSemplice()    
    Application.Goto Reference:="RigaForm"
        Selection.Copy
        ActiveCell.Offset(0, -1).Range("A1").Select
        Selection.End(xlDown).Select
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.Offset(-6, 0).Range("A1:C7").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A1").Select
    
    
    
    
    End Sub

  2. #2
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3340
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da Gerardo Zuccalà Visualizza Messaggio
    Ciao a tutti
    Il codice che vedete qui sotto l'ho copiato dal libro, ho provato a farlo con il registratore di macro ed è quasi uguale, devo ammettere che in questo caso il codice creato con il registratore è molto più comprensibile
    infatti questo codice mi lascia alcune domande sui riferimenti

    1)ActiveCell.Offset(0, -1).Range("A1").Select la parte in rosso dovrebbe essere la ("D2") come potete verificare dall'allegato

    2)ActiveCell.Offset(-6, 0).Range("A1:C7").Select la parte in rosso dovrebbe essere la ("D2:F8")

    Nome definito "RigaForm" corrisponde a D2:F2



    Codice: 
    Sub FomulaSemplice()    
    Application.Goto Reference:="RigaForm"
        Selection.Copy
        ActiveCell.Offset(0, -1).Range("A1").Select
        Selection.End(xlDown).Select
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.Offset(-6, 0).Range("A1:C7").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A1").Select
    
    
    
    
    End Sub
    da quanto ho potuto capire leggendo su internet, si presuppone che la cella selezionata al momento viene considerata come cella A1 e di conseguenza la selezione avviene come se si partisse da A1 (vai a pagina 15 e 16 del file allegato c'è la spiegazione)

    https://www.dropbox.com/s/lqihnk8ooi...Excel.pdf?dl=0

    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)

  3. #3

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7142
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2063
    Likes dati
    1300
    Ciao Gerardo,
    da neofita del vba ho interpretato in questo modo:
    i riferimenti che hai indicato sono giusti ma nel codice si usa la proprietà offset che corrisponderebbe ad una funzione scarto , quindi si prende a base una cella e poi da questa si sposta in su o in giù a sinistra o destra assumendo valori positivi o negativi (per avere una miniguida guarda qui)

    Se invece non usi offset puoi benissimo scrivere come dici tu, cioè così:
    Codice: 
    Sub FomulaSemplice()Application.Goto Reference:="RigaForm"
        Selection.Copy
        Range("D2").Select
        Selection.End(xlDown).Select
        Range("D2").Select
        Range("D2:F8").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A1").Select
    
    
    End Sub
    Edit:
    Pag. 163 del libro di Giaccaglini.

  4. #4
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3340
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    [QUOTE=ges;6995]Ciao Gerardo,
    da neofita del vba ho interpretato in questo modo:
    i riferimenti che hai indicato sono giusti ma nel codice si usa la proprietà offset che corrisponderebbe ad una funzione scarto , quindi si prende a base una cella e poi da questa si sposta in su o in giù a sinistra o destra assumendo valori positivi o negativi (per avere una miniguida guarda qui)

    Se invece non usi offset puoi benissimo scrivere come dici tu, cioè così:
    Codice: 
    Sub FomulaSemplice()Application.Goto Reference:="RigaForm"
        Selection.Copy
        Range("D2").Select
        Selection.End(xlDown).Select
        Range("D2").Select
        Range("D2:F8").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A1").Select
    
    
    End Sub
    Scusate l'ignoranza ma perchè seleziona la zona D2:F2 (RigaForm) e fa copia poi seleziona il range D2:F8 e incolla e non incolla nulla?

    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)

  5. #5
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3340
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    [QUOTE=Baloon_50;6996]
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Ciao Gerardo,
    da neofita del vba ho interpretato in questo modo:
    i riferimenti che hai indicato sono giusti ma nel codice si usa la proprietà offset che corrisponderebbe ad una funzione scarto , quindi si prende a base una cella e poi da questa si sposta in su o in giù a sinistra o destra assumendo valori positivi o negativi (per avere una miniguida guarda qui)

    Se invece non usi offset puoi benissimo scrivere come dici tu, cioè così:
    Codice: 
    Sub FomulaSemplice()Application.Goto Reference:="RigaForm"
        Selection.Copy
        Range("D2").Select
        Selection.End(xlDown).Select
        Range("D2").Select
        Range("D2:F8").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A1").Select
    
    
    End Sub
    Scusate l'ignoranza ma perchè seleziona la zona D2:F2 (RigaForm) e fa copia poi seleziona il range D2:F8 e incolla e non incolla nulla?

    cancello tutto quello che ho scritto (sono proprio rinco alle 00:13) non avevo visto che ci sono delle formule.

    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)

  6. #6
    L'avatar di Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1126
    Ciao

    @Ges
    Mi è abbastanza chiaro l'istruzione ActiveCell.Offset(0, -1)...... la conoscevo già questa istruzione che tra le altre cose dal registratore di macro si crea con i riferimenti relativi,
    L'unica cosa che non mi quadrava era il Range("A1") in quanto non è A1 bensi D2

    @Ballon scrive
    si presuppone che la cella selezionata al momento viene considerata come cella A1 e di conseguenza la selezione avviene come se si partisse da A1

    ok ci siamo era quello che volevo sapere sostanzialmente A1 non'è la prima cella del foglio, bensi la prima cella della tabella.
    Credo che questo complica un po le cose nello scrivere una routine perchè se avessimo un data base di 100/1000 righe è difficile sapere come si chiamano le altre celle, allora in questo caso è meglio scrivere una una routine come ha scritto ges senza ActiveCell.offset (rif relativi) e usare Range (rif.Assoluti)

    Ciao a tutti grazie



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

    Credo che questo complica un po le cose nello scrivere una routine perchè se avessimo un data base di 100/1000 righe è difficile sapere come si chiamano le altre celle, allora in questo caso è meglio scrivere una una routine come ha scritto ges senza ActiveCell.offset (rif relativi) e usare Range (rif.Assoluti)

    Ciao a tutti grazie


    Gli offset li puoi utilizzare comunque (a volte sono utili) basta sapere qual'è la cella di partenza (la selezioni tu col codice VBA) e non utilizzi la seconda parte dell'istruzione (.range("A1").select)

    :255:

    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)

  8. #8
    L'avatar di Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1126
    Gli offset li puoi utilizzare comunque basta sapere qual'è la cella di partenza (la selezioni tu col codice VBA) e non utilizzi la seconda parte dell'istruzione (.range("A1").select)
    Ho provato a non utilizzare la seconda parte ma mi da "Errore previsto" mi potresti dare la tua versione del codice

  9. #9
    L'avatar di Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1126
    Citazione Originariamente Scritto da Baloon_50 Visualizza Messaggio
    Gli offset li puoi utilizzare comunque (a volte sono utili) basta sapere qual'è la cella di partenza (la selezioni tu col codice VBA) e non utilizzi la seconda parte dell'istruzione (.range("A1").select)

    :255:
    Codice: 
    
    Sub FomulaSemplice()
    
        Application.Goto Reference:="RigaForm"
        Selection.Copy
        ActiveCell.Offset(0, -1).Select
        Selection.End(xlDown).Select
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Offset(-6, 0).Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A1").Select
        MsgBox ("troppo forte")
        
    
    
    End Sub
    ok adesso ci sono posso eliminare "Range" ma devo lasciare la proprietà ".select"
    meglio cosi ero preoccupato
    funzionaaa:87:_

  10. #10
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3213
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155
    Ciao Gerardo e saluti a tutta la compagnia.
    Quando copi qualcosa dal libro e non ti è chiaro il procedimento della macro, inserisci degli Stop ogni tanto e t'accorgi di quello che fa. E' il metodo che ho sempre usato per capire meglio una routine.
    Guarda la routine come l'ho impostata io. Aggiungi l'altra routine e vedi dove ha scritto (per Excel2007)

    @Balloon_50
    Come vedi non è vero che non ha scritto nulla, ha scritto qualcosa ma "lontano dalla visibilità".

    Codice: 
    Sub FomulaSemplice()    Application.Goto Reference:="RigaForm"
    Stop
        Selection.Copy
        ActiveCell.Offset(0, -1).Range("A1").Select
        Selection.End(xlDown).Select
    Stop
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.Offset(-6, 0).Range("A1:C7").Select
    Stop
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A1").Select
    End Sub
    
    
    Sub selez()
        Cells(1048570, 1).Select
    End Sub

    Ciao a tutti,
    Mario

  11. #11
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3340
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da Gerardo Zuccalà Visualizza Messaggio
    Ho provato a non utilizzare la seconda parte ma mi da "Errore previsto" mi potresti dare la tua versione del codice
    Guarda la nuova routine VBA che è la modifica del tuo codice (ti ho messo anche un commento)

    :266:

    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)

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

    @Balloon_50
    Come vedi non è vero che non ha scritto nulla, ha scritto qualcosa ma "lontano dalla visibilità".

    Ciao a tutti,
    Mario
    Grazie Mario ma nel #5 mi sono subito dato del "rinco" non avevo notato che nelle celle c'erano le formule :295:

    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)

  13. #13
    L'avatar di Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1126
    Ciao Mario44
    @Mario44 Ok grazie questa si che è una buona chicca, ovviamente credo che gli stop alla fine bisogna cancellarli??
    o comunque a volte uso la "Finestra immediata" CTRL+G per vedere cosa fa una istruzione, ma ovviamente è meglio lo stop cosi da avere più istruzioni alla volta.

    @Baloon
    grazie adesso ho capito che posso fare a meno di RANGE è questa è sicuramente una buona notizia, solo che leggendo il tuo codice c'è una nuova istruzione che mi confonde ancora più di prima
    Resize(Selection.Rows.Count + 5, _
    Selection.Columns.Count).Select

    comunque grazie a tutti per il vostro aiuto

  14. #14
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3340
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da Marius44 Visualizza Messaggio
    Ciao Gerardo e saluti a tutta la compagnia.
    Quando copi qualcosa dal libro e non ti è chiaro il procedimento della macro, inserisci degli Stop ogni tanto e t'accorgi di quello che fa. E' il metodo che ho sempre usato per capire meglio una routine.

    Ciao a tutti,
    Mario
    Per quanto riguarda gli STOP è preferibile mettere dei punti di interruzione (sulla barra a sinistra all'altezza della riga interessata) perchè gli stop te ne puoi dimenticare qualcuno quando li togli mentre i unti di interruzione colorano di marrone tutta la riga e quindi è più facile notarla (io uso quest'ultima soluzione) che è anche più pratica

    :266:

    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)

  15. #15
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3340
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da Gerardo Zuccalà Visualizza Messaggio
    Ciao Mario44
    @Mario44 Ok grazie questa si che è una buona chicca, ovviamente credo che gli stop alla fine bisogna cancellarli??
    o comunque a volte uso la "Finestra immediata" CTRL+G per vedere cosa fa una istruzione, ma ovviamente è meglio lo stop cosi da avere più istruzioni alla volta.

    @Baloon
    grazie adesso ho capito che posso fare a meno di RANGE è questa è sicuramente una buona notizia, solo che leggendo il tuo codice c'è una nuova istruzione che mi confonde ancora più di prima
    Resize(Selection.Rows.Count + 5, _
    Selection.Columns.Count).Select

    comunque grazie a tutti per il vostro aiuto
    detto semplice semplice il resize ti seleziona una zona che nel nostro caso è 5 righe in basso e stessa colonna (stessa colonna perchè è selezionata la zona D2:F2)

    :266:

    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)

  16. #16
    L'avatar di Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1126
    Baloon Scrive
    punti di interruzione (sulla barra a sinistra all'altezza della riga interessata)
    intendi questi puntini marroni?




  17. #17
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3340
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da Gerardo Zuccalà Visualizza Messaggio
    Baloon Scrive


    intendi questi puntini marroni?
    Esattamente. Ogni qualvolta la macro viene eseguita si ferma in quei punti e poi se vuoi puoi andare avanti di riga in riga premendo F8. Se poi ti posizioni sulle variabili col mouse ne vedi il valore. :87:_

    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 Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1126
    Ciao Baloon
    Se poi ti posizioni sulle variabili col mouse ne vedi il valore
    non ho capito questo, che sembra interessante, ma non credo fosse qualcosa relativo a quest'ultmo codice?
    Ok per i tasto F8
    grazie

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

    non ho capito questo, che sembra interessante, ma non credo fosse qualcosa relativo a quest'ultmo codice?
    Ok per i tasto F8
    grazie
    quando utilizzi i punti di interruzione e sei nella finestra del VBA, passando sulle variabili che ci sono nelle varie righe, ne puoi vedere il contenuto.

    Esempio :

    se hai una riga di codice così

    numrig = ws.Cells(Rows.Count, 1).End(xlUp).Row

    e ti posizioni col mouse su "numrig" ti fa vedere il valore che ha in quel momento la variabile "numrig"

    spero di essere stato chiaro :251:

    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 Gerardo Zuccalà
    Clicca e Apri
    Data Registrazione
    May 2015
    Località
    Milano, Italy
    Età
    49
    Messaggi
    4916
    Versione Office
    2013
    Likes ricevuti
    1117
    Likes dati
    1126
    @Baloon_50
    Si chiarissimo...
    Adesso non sono ancora arrivato alle variabili comunque ne farò tesoro dei tuoi consigli
    Grazie Baloon_50

Discussioni Simili

  1. [Tutorial VBA] Range.End() - Range.OffSet() - Come operare sulle tabelle di dati
    Di dracoscrigno nel forum Imparando Excel & VBA - Tutorial di Excel-
    Risposte: 3
    Ultimo Messaggio: 29/03/17, 22:30
  2. Principiante con domande assurde
    Di zorro nel forum Domande su Excel in generale
    Risposte: 2
    Ultimo Messaggio: 21/01/17, 13:50
  3. [Risolto] Quiz con domande e risposte random
    Di filippo nel forum Domande su Excel in generale
    Risposte: 70
    Ultimo Messaggio: 14/11/16, 16:40
  4. [Risolto] Dichiarazione Range (Dim as range)
    Di camoncino nel forum Domande su Excel VBA e MACRO
    Risposte: 18
    Ultimo Messaggio: 08/11/16, 13:10
  5. Due domande su formattazione/formule
    Di Fill_01 nel forum Domande su Excel in generale
    Risposte: 14
    Ultimo Messaggio: 26/04/16, 00:46

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
  •