Macro VBA trasferimento dati



  • Macro VBA trasferimento dati
    di Aradia (utente non iscritto) data: 13/02/2013 22:41:06

    Salve vorrei chiedere un aiuto perche' sto provando a fare una macro su excel che mi permetta di prendere dei dati da un foglio e portarli su un altro foglio in origine vuoto. Collocando le cose nelle colonne e inserendo dei valori fissi in altre colonne.L'errore che mi da alla 14esima riga e il 9 "indice non incluso nell'intervallo"

    Sapete dirmi dove sbaglio?

    grazie
     
    Sub Copia()
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("A3:A50")
    riga = 1
    For riga = 1 To riga = 100
                     num = Int((999999999 - 100000000 + 1) * Rnd + "a,b,c,d,e,f,g,h,i,l,m,n,o,p,q,r,s,t,u,v,z")
                     Rows(riga) = num
                    riga = riga + 1
    
    
    
    Next
    
    Application.Goto Workbooks("C:UsersAdministratorDownloadsadelphi_fastbook.xls"), (False)
    Sheets("Table1").Select
    Set Rng = ActiveSheet.Range("B3:B50")
    For riga = 1 To riga = 1
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("B3:B50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          riga = riga + 1
    
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("C4:C50")
    riga = 1
    For riga = 1 To riga = 100
               Rows(riga) = "EAN"
               riga = riga + 1
               If riga >= 32 Then Exit For
               
               
    Next
    
    Application.Goto Workbooks("C:UsersAdministratorDownloadsadelphi_fastbook.xls").Sheets("Table1")
    Set Rng = ActiveSheet.Range("E3:E50")
    For riga = 1 To riga = 1
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("D3:D50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          riga = riga + 1
    
    Next
    
    Application.Goto Workbooks("C:UsersAdministratorDownloadsadelphi_fastbook.xls").Sheets("Table1")
    Set Rng = ActiveSheet.Range("J3:J50")
    For riga = 1 To riga = 1
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("H3:H50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          riga = riga + 1
    
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("I3:I50")
    riga = 1
    For riga = 1 To riga = 100
               Rows(riga) = "1"
               riga = riga + 1
               If riga >= 32 Then Exit For
               
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("J3:J50")
    riga = 1
    For riga = 1 To riga = 100
               Rows(riga) = "Nuovo"
               riga = riga + 1
               If riga >= 32 Then Exit For
               
    Next
    
    Application.Goto Workbooks("C:UsersAdministratorDownloadsadelphi_fastbook.xls").Sheets("Table1")
    Set Rng = ActiveSheet.Range("E3:E50")
    For riga = 1 To riga = 1
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("Y3:Y50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          riga = riga + 1
    
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("Z3:Z50")
    riga = 1
    For riga = 1 To riga = 100
               Rows(riga) = "Perfect"
               riga = riga + 1
               If riga >= 32 Then Exit For
               
    Next
    
    Application.Goto Workbooks("C:UsersAdministratorDownloadsadelphi_fastbook.xls").Sheets("Table1")
    Set Rng = ActiveSheet.Range("K3:K50")
    For riga = 1 To riga = 1
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("AA3:AA50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          riga = riga + 1
    
    Next
    
    Application.Goto Workbooks("C:UsersAdministratorDownloadsadelphi_fastbook.xls").Sheets("Table1")
    Set Rng = ActiveSheet.Range("F3:F50")
    For riga = 1 To riga = 1
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("AB3:AB50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          riga = riga + 1
    
    Next
    End Sub
    



  • di Vecchio Frac data: 14/02/2013 09:16:02

    Non hai scritto codice VBA corretto, in diversi punti.

    Non devi assegnare la variabile di controllo al contatore finale di un ciclo For.
    Esempio (ma vale per tutto il codice che hai scritto):
    For riga = 1 To riga = 100
    equivale a scrivere:
    For riga = 1 To 0 (perchè riga in quel momento vale 1 e perciò è riga <> 100)
    e perciò non verrà mai eseguito il ciclo.

    L'errore accade qui:
    Application.Goto Workbooks("C:UsersAdministratorDownloadsadelphi_fastbook.xls"), (False)
    perchè la cartella di lavoro no è aperta e quindi non puoi attivarla così.

    Il successivo
    Rows(cell.Row).Select
    darà errore (se ci arriverà) perchè l'oggetto cell non è definito.





  • di Aradia (utente non iscritto) data: 14/02/2013 13:34:14

    Grazie per la risposta
    ho provato a modificare per eliminare l errore e ora quando faccio il debug non mi da piu' allerrt

    solo che azionando la macro non fa quello che in teoria vorrei fargli fare Oo
    So di non essere un genio perche' e' poco che mi sono avvicinata al vba ma non capisco dove sbaglio.
    Dovrebbe generare una lista di numeri e non lo fa ç_ç e copiare gli altri dati ma nisba.

    In piu' sarebbe possibile secondo voi fargli chiudere il file alla fine del lavoro e salvarlo in file txt con la divisione tabelle?
    rincollo la macro modificata :)
    grazie dell'attenzione
     
    Sub Copia()
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("A3:A50")
    riga = 1
    For riga = 1 To riga = 100
                     num = Int((999999999 - 100000000 + 1) * Rnd + 1000)
                     Rows(riga) = num
                    riga = riga + 1
    
    
    
    Next
    
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("C3:C50")
    For riga = 1 To riga = 1
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("B3:B50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          riga = riga + 1
    
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("C4:C50")
    riga = 1
    For riga = 1 To riga = 100
               Rows(riga) = "EAN"
               riga = riga + 1
               If riga >= 32 Then Exit For
               
               
    Next
    
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("E3:E50")
    For riga = 1 To riga = 1
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("D3:D50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          riga = riga + 1
    
    Next
    
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("G3:G50")
    For riga = 1 To riga = 1
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("H3:H50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          riga = riga + 1
    
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("I3:I50")
    riga = 1
    For riga = 1 To riga = 100
               Rows(riga) = "1"
               riga = riga + 1
               If riga >= 32 Then Exit For
               
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("J3:J50")
    riga = 1
    For riga = 1 To riga = 100
               Rows(riga) = "Nuovo"
               riga = riga + 1
               If riga >= 32 Then Exit For
               
    Next
    
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("E3:E50")
    For riga = 1 To riga = 1
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("Y3:Y50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          riga = riga + 1
    
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("Z3:Z50")
    riga = 1
    For riga = 1 To riga = 100
               Rows(riga) = "Perfect"
               riga = riga + 1
               If riga >= 32 Then Exit For
               
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("AA3:AA50")
    riga = 1
    For riga = 1 To riga = 100
               Rows(riga) = "2013"
               riga = riga + 1
               If riga >= 32 Then Exit For
               
    Next
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("F3:F50")
    For riga = 1 To riga = 1
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("AB3:AB50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          riga = riga + 1
    
    Next
    End Sub
    



  • di Vecchio Frac data: 14/02/2013 14:07:19

    Non hai corretto gli errori che ti ho già segnalato.

    For riga = 1 To riga '<--- fermati qui! e non aggiungere altro :)
    num = Int((999999999 - 100000000 + 1) * Rnd + 1000)
    Rows(riga) = num
    'togli assolutamente quel "riga = riga + 1" !!
    Next

    Ti mancano gli elementi di base, non è questione di essere un genio, ma di aprire la Guida sul For e vedere come funziona.
    Per salvare un file in formato diverso, guardati (sempre nella Guida) come funziona SaveAs e il suo argomento FileFormat.






  • di Aradia (utente non iscritto) data: 14/02/2013 22:34:24

    ---Il successivo
    Rows(cell.Row).Select
    darà errore (se ci arriverà) perchè l'oggetto cell non è definito.---

    Ci sono arrivata!!! XD non crea i numeri variabili della prima parte ma apre il file che deve aprire poi arrivati a Rows si blocca per chiedermi un oggetto selezionato

    sono gia quasi felice XD
     
    Sub Copia()
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("A3:A50")
    riga = 1
    For riga = 1 To riga
                     num = Int((999999999 - 100000000 + 1) * Rnd + 1000)
                     Rows(riga) = num
                    
    
    
    
    Next
    
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("C3:C50")
    For riga = 1 To riga
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("B3:B50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          
    
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("C4:C50")
    riga = 1
    For riga = 1 To riga
               Rows(riga) = "EAN"
               riga = riga + 1
               If riga >= 50 Then Exit For
               
               
    Next
    
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("E3:E50")
    For riga = 1 To riga
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("D3:D50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          
    
    Next
    
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("G3:G50")
    For riga = 1 To riga
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("H3:H50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          
    
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("I3:I50")
    riga = 1
    For riga = 1 To riga
               Rows(riga) = "1"
               riga = riga + 1
               If riga >= 50 Then Exit For
               
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("J3:J50")
    riga = 1
    For riga = 1 To riga
               Rows(riga) = "Nuovo"
               riga = riga + 1
               If riga >= 50 Then Exit For
               
    Next
    
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("E3:E50")
    For riga = 1 To riga
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("Y3:Y50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          
    
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("Z3:Z50")
    riga = 1
    For riga = 1 To riga
               Rows(riga) = "Perfect"
               riga = riga + 1
               If riga >= 50 Then Exit For
               
    Next
    
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("AA3:AA50")
    riga = 1
    For riga = 1 To riga
               Rows(riga) = "2013"
               riga = riga + 1
               If riga >= 50 Then Exit For
               
    Next
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("F3:F50")
    For riga = 1 To riga
    
          Rows(cell.Row).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("AB3:AB50")
          Rows(riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          
    
    Next
    End Sub
    



  • di Vecchio Frac data: 15/02/2013 09:29:45

    Forse c'è ancora qualcosa da sistemare (e ho paura di averti indotto io in errore rileggendo sopra).
    For riga = 1 To riga
    è sbagliato.
    Non puoi definire un punto di arrivo del contatore uguale alla variabile contatore.
    For riga = 1 To rng.Rows.Count

    Leggendo il resto del codice vedo qualche refuso qua e là.
    All'inizio della discussione dicevi " sto provando a fare una macro su excel che mi permetta di prendere dei dati da un foglio e portarli su un altro foglio in origine vuoto "... prova a esplicitare meglio qual è l'origine dei dati da prelevare, dove si trovano i fogli di origine e di destinazione (locale, rete, chiavetta ecc.) e proveremo a riscrivere il codice.







  • di Aradia (utente non iscritto) data: 15/02/2013 14:32:08

    Eccoci :)
    Allora ora la macro mi crea il numerov ariabile all inizio
    io ho due cartelle excel su downloads
    lista e' la fonte dei dati
    Foglio2 e' quello dove inserirli

     
    Sub copia()
    /questo crea una serie di numeri a caso e li mette nella colonna A dal 4 al 50/
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("A3:A50")
    Riga = 1
    For Riga = 4 To 54
                     num = Int((999999999 - 100000000 + 1) * Rnd + 1000)
                     Cells(Riga, 1) = num
                   
    
    
    
    Next
    /qui apre il file da cui copiare.solo che poi non copia la colonna che ho richiesto/
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("C3:C50")
    For Riga = 1 To Riga
    
          Rows(Riga).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("B3:B50")
          Rows(Riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          
    
    Next
    /qui dovrebbe scrivere la parola EAN nella colonna e non lo fa/
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("C4:C50")
    Riga = 1
    For Riga = 4 To 54
               Cells(Riga, 3) = "EAN"
               Riga = Riga + 1
               If Riga >= 50 Then Exit For
               
               
    Next
    /qui riapre il foglio e mi va in errore ho provato a scrivere Active invece di open ma non lo legge come comando.dovrebbe copiare ma non lo fa/
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("E3:E50")
    For Riga = 1 To Riga
    
          Rows(Riga).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("D3:D50")
          Rows(Riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          
    
    Next
    /qui riapre il foglio e mi va in errore ho provato a scrivere Active invece di open ma non lo legge come comando.dovrebbe copiare ma non lo fa/
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("G3:G50")
    For Riga = 1 To Riga
    
          Rows(Riga).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("H3:H50")
          Rows(Riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          
    
    Next
    /qui dovrebbe scrivere il numero 1 nella colonna e non lo fa/
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("I3:I50")
    Riga = 1
    For Riga = 1 To Riga
               Rows(Riga) = "1"
               Riga = Riga + 1
               If Riga >= 50 Then Exit For
               
    Next
    /qui dovrebbe scrivere la parola Nuovo nella colonna e non lo fa/
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("J3:J50")
    Riga = 1
    For Riga = 1 To Riga
               Rows(Riga) = "Nuovo"
               Riga = Riga + 1
               If Riga >= 50 Then Exit For
               
    Next
    /qui riapre il foglio e mi va in errore ho provato a scrivere Active invece di open ma non lo legge come comando.dovrebbe copiare ma non lo fa/
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("E3:E50")
    For Riga = 1 To Riga
    
          Rows(Riga).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("Y3:Y50")
          Rows(Riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          
    
    Next
    /qui dovrebbe scrivere la parola Perfect nella colonna e non lo fa/
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("Z3:Z50")
    Riga = 1
    For Riga = 1 To Riga
               Rows(Riga) = "Perfect"
               Riga = Riga + 1
               If Riga >= 50 Then Exit For
               
    Next
    /qui dovrebbe scrivere il numero 2013 nella colonna e non lo fa/
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("AA3:AA50")
    Riga = 1
    For Riga = 1 To Riga
               Rows(Riga) = "2013"
               Riga = Riga + 1
               If Riga >= 32 Then Exit For
               
    Next
    /qui riapre il foglio e mi va in errore ho provato a scrivere Active invece di open ma non lo legge come comando.dovrebbe copiare ma non lo fa/
    Workbooks.Open Filename:="C:UsersAdministratorDownloadslista.xls"
    Sheets("Foglio1").Select
    Set Rng = ActiveSheet.Range("F3:F50")
    For Riga = 1 To Riga
    
          Rows(Riga).Select
          Selection.Copy
          Sheets("Foglio1").Select
          Set Rng = ActiveSheet.Range("AB3:AB50")
          Rows(Riga).Select
          ActiveSheet.Paste
          Sheets("Foglio1").Select
          
    
    Next
    End Sub
    
    
    
    



  • di Aradia (utente non iscritto) data: 20/02/2013 12:52:26

    Quindi dici che non copia per il comando di puntamento?
    For riga =1 to 54
    ???