+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Copia righe da un file excel in un nuovo file

  1. #1
    ginopizza non è in linea Scolaretto
    Post
    106

    Copia righe da un file excel in un nuovo file

    Ciao

    Devo generare un report copiando delle righe intere da un file excel in un altro file nuovo , il codice sul quale sto lavorando è questo:

    codice:
    Sub Report_gen()
    
    ' Report
    Dim xlapp_print_REP As Excel.Application
    Dim xlBook_print_REP As Excel.Workbook
    Dim xlSheet_print_REP As Excel.Worksheet
    ' Sorgente
    Dim xlapp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    
    'Apro file sorgente
    
    Set xlapp = Excel.Application
    Set xlBook = xlapp.Workbooks.Open("C:\temp\test_pippo\pippo.xlsx")
    
    xlapp.Visible = False
    
    'Apro file Report
    
    Set xlapp_print_REP = CreateObject("Excel.Application")
    Set xlBook_print_REP = xlapp_print_REP.Workbooks.Add
    
    
    
    xlapp_print_REP.Visible = False
    
    
    Set xlSheet = xlBook.Worksheets(1)
    
    Set xlSheet_print_REP = xlBook_print_REP.Worksheets(1)
    
    riga = 3
    riga_tot = 3
    
    
    'lastCol = xlSheet.Cells(riga, xlSheet.Columns.Count).End(xlToLeft).Column
    lastrow = xlSheet.Cells(xlSheet.Rows.Count, "A").End(xlUp).Row
    
    
    
    For a = 1 To lastrow
    
    lastCol = xlSheet.Cells(riga, xlSheet.Columns.Count).End(xlToLeft).Column
    
    'xlSheet.Range("A" & riga & ":" & "AX" & riga).Copy
    
    xlSheet.Range(xlSheet.Cells(riga, 1), xlSheet.Cells(riga, lastCol)).Copy
    
    ' Con On Error evito l'errore "run-time error 1004 ma nel report ovviamente non vengono copiate le righe
    
    On Error Resume Next
    
    xlSheet_print_REP.Range("A" & riga_tot).PasteSpecial Paste:=xlPasteValues
    
    Application.CutCopyMode = False
    
    
    riga = riga + 1
    riga_tot = riga_tot + 1
    
    Next a
    
    xlapp_print_REP.Visible = True
    xlapp.Visible = True
    
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
    
    'Annullo le variabili per liberare le risorse
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlapp = Nothing
    
    
    'Annullo le variabili per liberare le risorse
    Set xlSheet_print_REP = Nothing
    Set xlBook_print_REP = Nothing
    Set xlapp_print_REP = Nothing
    
    
    
    
    End Sub
    Senza "On Error" prima del comando PasteSpecial, il codice si ferma in debug con errore --> run-time error 1004 .
    Con F8 riparte fino all'errore successivo in una riga sempre diversa, non riesco a capire da cosa dipende.
    Come posso risolvere ?
    Le righe che devo copiare nel riport sono tante, potrebbero essere diverse migliaia , 4000/8000, mi potete consigliare anche alternative più performanti ?

    Grazie per il supporto.

    Ciao

  2. #2
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    388
    Quote Originariamente inviato da ginopizza Visualizza il messaggio
    xlSheet_print_REP.Range("Aiga_tot).PasteSpecial Paste:=xlPasteValues
    Quello evidenziato è un refuso da copia/incolla o è proprio scritto così nel codice?

  3. #3
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    6,148
    Quote Originariamente inviato da ginopizza Visualizza il messaggio
    Senza "On Error" prima del comando PasteSpecial, il codice si ferma in debug con errore --> run-time error 1004 .
    Con F8 riparte fino all'errore successivo in una riga sempre diversa, non riesco a capire da cosa dipende.
    Come posso risolvere ?
    E noi come dovremmo indovinarlo, secondo te?
    - non abbiamo alcun file da esaminare e testare
    - non sappiamo DOVE si genera l'errore
    - non sappiamo la causa che lo genera

    Quote Originariamente inviato da ginopizza Visualizza il messaggio
    Le righe che devo copiare nel riport sono tante, potrebbero essere diverse migliaia , 4000/8000, mi potete consigliare anche alternative più performanti ?
    Quando le righe sono molte allora usare ADODB è sicuramente più performante.

  4. #4
    ginopizza non è in linea Scolaretto
    Post
    106
    Ciao e grazie dei commenti , provo a descrivere meglio, scusatemi se non sono stato abbastanza chiaro.

    Per quanto riguarda il commenti di Sgrubak, è una riga probabilmente dimenticata, tra le innumerevoli prove, ma è commentata quindi non ha nessun effetto sul codice.

    Per i commenti di Gibra:

    - il file Pippo.xlsx non dovrebbe essere importante, quello che sto usando per testare il codice è composto da 50 righe e 8 colonne di cui alcune vuote, se necessario proverò a condividerlo.

    - l'errore si genera sempre nella riga con il comando pasteSpecial, ma si verifica in corrispondenza di righe differenti del file excel e apparentemente in modo sporadico.

    - la causa non la comprendo, ottengo l'errore run time 1004 se vado in debug, con F8 il codice fa il suo lavoro copiando quello che deve copiare.
    Se faccio ripartire il codice, l'errore si ripropone in corrispondenza di un altra riga del file excel.

    Fatemi sapere, se mancano informazioni proverò a condividerle.

    Ciao Grazie per il supporto

  5. #5
    ginopizza non è in linea Scolaretto
    Post
    106
    Sgrubak, scusami ..
    Vedo solo ora che l'errore che hai segnalato è presente anche nelle riga non commentata, in ogni caso il codice originale è corretto, è un errore di copia incolla e non è causa del problema segnalato.

    Ciao

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi