Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[VBA] problema con unione range

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[VBA] problema con unione range

Postdi genik83 » 17/06/16 10:20

Ciao a tutti, non sono un fenomeno con il linguaggio, sto piano piano creando macro più complesse per cui ora ho bisogno di un aiuto in quanto sono bloccato da diversi giorni su questo problema.
La macro, apre i file presenti all'interno di una cartella (hanno tutti la stessa struttura, variano solo nel numero di righe), copia i range di dati e dovrebbe incollarli su di un altro file chiamato "Template".
Il problema sta nel fatto che lanciando la macro vedo effettivamente la selezione dei range che mi interessano, quando va però a incollare, mi incolla tutto non tenendo conto dei range impostati.
Se però eseguo soltanto la parte del range copia e incolla su di un altro file, giusto per prova, funziona tutto correttamente, c'è quindi qualche interferenza tra la struttura della macro e la parte del copia e incolla
Di seguito la macro
Codice: Seleziona tutto
Sub copia300gol()
       
    'dichiaro le variabili
    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim wk As Workbook
    Dim tmp As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim C1, C2, C3, C4, UNIONE As Range 'dichiariamo come Range tutte le variabili
   
    'impedisco lo sfarfallio dello schermo
    Application.ScreenUpdating = False
       
    'metto un riferimento alle cartelle in cui si trovano i files
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder("C:\Users\pietro\Desktop\DATI TECNICI\GRUPPO GOL_300")
   
    'PER OGNI FILE NELLA CARTELLA LO APRE E APRE ANCHE IL FILE TEMPLATE
For Each objFile In objFolder.Files
Set tmp = Workbooks.Open("C:\Users\pietro\Desktop\DATI TECNICI\TEMPLATE.xlsx")
Set wk = Workbooks.Open(objFile.Path)


 'metto i riferimenti ai fogli
   Set sh2 = tmp.Worksheets("300")
Set sh1 = wk.Worksheets("GasOnLine Export")
 
   
    With sh1
       
   
        'metto un riferimento ai range da copiare
               
Set C1 = Range("C2:Q2", Range("C2").End(xlDown))  'primo intervallo di 10 celle che inizia dalla riga 1
Set C2 = Range("U2:U2", Range("u2").End(xlDown))  'secondo intervallo che inizia sulla stessa riga e sempre di 10 celle
Set C3 = Range("W2:X2", Range("w2").End(xlDown))  'terzo intervallo che inizia sulla stessa riga e sempre di 10 celle
Set C4 = Range("AW2:bi2", Range("aw2").End(xlDown)) 'QUARTO intervallo che inizia sulla stessa riga e sempre di 10 celle

'unisco i range

Set UNIONE = Union(C1, C2, C3, C4)
       
       
        'copio da un file all'altro
        UNIONE.Select
        UNIONE.Copy

'chiudo il file dal quale sono copiati i dati
        wk.Close SaveCHANGES:=False
        End With
       
       
        'With Application
        '.CutCopyMode = False
        '.ScreenUpdating = True
    'End With
     
      'trova la prima riga libera disponibile del file "template" e copia il range selzionato
       Range("A1").End(xlDown).Select
       Selection.Offset(1, 0).Select
        x = ActiveCell.Row
        sh2.Range("A" & x).PasteSpecial
   
   
'CHIUDI IL FILE DELLA RELATIVA CARTELLA

tmp.Save

Next
End Sub
genik83
Utente Junior
 
Post: 19
Iscritto il: 07/02/13 22:19

Sponsor
 

Re: [VBA] problema con unione range

Postdi Anthony47 » 18/06/16 22:04

Prova completando l'Incolla prima di chiudere il file; il blocco da modificare e' questo:
Codice: Seleziona tutto
'chiudo il file dal quale sono copiati i dati
'''        wk.Close SaveCHANGES:=False                  '****
        End With
       
       
        'With Application
        '.CutCopyMode = False
        '.ScreenUpdating = True
    'End With
     
      'trova la prima riga libera disponibile del file "template" e copia il range selzionato
tmp.Activate                                            '****
       Range("A1").End(xlDown).Select
       Selection.Offset(1, 0).Select
        x = ActiveCell.Row
        sh2.Range("A" & x).PasteSpecial
wk.Close SaveCHANGES:=False                             '****
'CHIUDI IL FILE DELLA RELATIVA CARTELLA

Le righe aggiunte o modificate sono marcate ****

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [VBA] problema con unione range

Postdi genik83 » 21/06/16 10:26

grazie mille, funziona.
c'è un modo per evitare di far uscire il pop up nel quale mi si dice che gli appunti contengono una grande quantità di informazioni ecc?
genik83
Utente Junior
 
Post: 19
Iscritto il: 07/02/13 22:19

Re: [VBA] problema con unione range

Postdi alfrimpa » 21/06/16 10:40

Ciao

Potresti provare (non so se funzionerà perché dipende se quel messaggio proviene da Excel o da Windows) ad inserire subito dopo la dichiarazione delle variabili questa istruzione

Codice: Seleziona tutto
Apllication.DisplayAlerts = False


e prima di End Sub

Codice: Seleziona tutto
Apllication.DisplayAlerts = True


Ma se vuoi la mia opinione ritengo che il warning provenga da Windows e quindi non credo funzioni.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 842
Iscritto il: 30/12/13 17:01
Località: Napoli


Torna a Applicazioni Office Windows


Topic correlati a "[VBA] problema con unione range":

Problema Windows 10
Autore: asso1998
Forum: Software Windows
Risposte: 1

Chi c’è in linea

Visitano il forum: alfrimpa, giorgio1979 e 8 ospiti