{"id":1145,"date":"2014-04-11T14:20:15","date_gmt":"2014-04-11T12:20:15","guid":{"rendered":"http:\/\/www.office-guru.com\/wordpress\/?p=1145"},"modified":"2014-04-12T17:34:13","modified_gmt":"2014-04-12T15:34:13","slug":"estrarre-dati-da-cartelle-e-files-chiusi-2","status":"publish","type":"post","link":"https:\/\/www.office-guru.com\/wordpress\/2014\/04\/estrarre-dati-da-cartelle-e-files-chiusi-2\/","title":{"rendered":"048. Estrarre dati da cartelle e files chiusi &#8211; 2"},"content":{"rendered":"<div style=text-align:right;><a class=\"wpptopdfenh\" target=\"_blank\" rel=\"noindex,nofollow\" href=\"https:\/\/www.office-guru.com\/wordpress\/2014\/04\/estrarre-dati-da-cartelle-e-files-chiusi-2\/?format=pdf\" title=\"Download PDF\"><img alt=\"Download PDF\" src=\"https:\/\/i0.wp.com\/www.office-guru.com\/wordpress\/wp-content\/plugins\/wp-post-to-pdf-enhanced\/asset\/images\/pdf.png?w=584\" data-recalc-dims=\"1\"><\/a><\/div><p>Domanda:<\/p>\n<p>La mia necessit\u00e0 \u00e8 quella di copiare da file chiusi xls sempre le stesse celle (a4:u200), che si trovano in una cartella in &#8220;c:\/dati&#8221; e incollarli,nel file attivo in quel momento chiamato archivio, sulla prima riga libera partendo dalla colonna A in sequenza, senza lasciare righe libere.<\/p>\n<p>Risposta:<\/p>\n<p>Ho trattato l\u2019argomento nell\u2019articolo \u201cEstrarre dati da cartelle e files chiusi\u201d a cui rimando per la spiegazione di gran parte del codice.<br \/>\nIl link \u00e8 il seguente: <a href=\"http:\/\/www.office-guru.com\/wordpress\/2013\/10\/estrarre-dati-da-cartelle-e-files-chiusi\/\">http:\/\/www.office-guru.com\/wordpress\/2013\/10\/estrarre-dati-da-cartelle-e-files-chiusi\/<\/a><\/p>\n<p>La necessit\u00e0 del lettore \u00e8 un p\u00f2 diversa ed ho apportato quindi alcune modifiche.<br \/>\nIl codice \u00e8 applicabile ai casi in cui in un\u2019azienda vengano salvati in rete dei report automatici (<span style=\"text-decoration: underline\">sempre identici a se stessi<\/span>)<br \/>\ne si abbia la necessit\u00e0 di riunirli automaticamente in un unico file.<\/p>\n<p><!--more-->Un punto di attenzione \u00e8 quello di evitare di importare in arcihivio file gi\u00e0 importati.<br \/>\nQuesto, oltre ad inficiare sulla correttezza dell\u2019archio, allunga i tempi di esecuzione della macro.<br \/>\nNel caso d\u2019esempio, nella cartella dati sono presenti solo 3 file ma pensiamo a casi di report giornalieri, con 365 file per anno&#8230;<\/p>\n<p>La macro verifica se il file \u00e8 stato gi\u00e0 archiviato e solo in caso negativo provvedere ad aprirlo e copiarne i dati.<br \/>\nVediamo come si fa.<\/p>\n<p>Con il seguente codice ciclo per tutti i file contenuti nella cartella da analizzare<br \/>\ne riporto nel foglio \u201cPannello di controllo\u201d nome, percorso, data di creazione, data di ultima modifica e di ultimo accesso al file.<\/p>\n<pre>Dim fs, f, f1, s, sf\r\nSet fs = CreateObject(\"Scripting.FileSystemObject\")\r\nSet f = fs.GetFolder(Percorso)\r\nSet sf = f.Files\r\n\r\nFor Each f1 In sf\r\n\r\nSheet1.Cells(r, 1) = f1.Name\r\nSheet1.Cells(r, 2) = f1.Path\r\nSheet1.Cells(r, 3) = f1.DateCreated\r\nSheet1.Cells(r, 4) = f1.DateLastAccessed\r\nSheet1.Cells(r, 5) = f1.DateLastModified\r\n\r\nnext<\/pre>\n<p>Fatto ci\u00f2 inizializzo a zero la varibile \u201cGiaCaricato\u201d<br \/>\nPer ogni file trovato, verifico che il suo nome non sia gi\u00e0 presente nel foglio \u201cARCHIVIO\u201d.<br \/>\nIn caso affermativo, non appena il ciclo trova una riga contenente il nome del file,<br \/>\nvalorizza ad \u201c1\u201d la variabile \u201cGiaCaricato\u201d, inserisce nel foglio \u201cPannello do controllo\u201d la nota \u201cGi\u00e0 importato\u201d (Sheet1.Cells(r, 7) = &#8220;Gi\u00e0 importato&#8221;)<br \/>\ned esce dal ciclo di controllo con l\u2019istruzione \u201cExit For\u201d<\/p>\n<pre>Sheet3.Select\r\nLast_Row = Sheet3.Cells.Find(\"*\", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row\r\n\r\nGiaCaricato = 0\r\n\r\nFor Z = 2 To Last_Row\r\n\r\nIf Sheet3.Cells(Z, 22) = f1.Name Then\r\n   Sheet1.Cells(r, 7) = \"Gi\u00e0 importato\"\r\n   GiaCaricato = GiaCaricato + 1\r\n   Exit For\r\nEnd If\r\n\r\nNext Z<\/pre>\n<p>Se invece il nome non \u00e8 gi\u00e0 presente (GiaCaricato = 0) allora procedo a:<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 aprire il file\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ( Workbooks.Open (f1.Path) )<br \/>\n&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 copiare il range &#8220;A4:U200&#8221;\u00a0\u00a0\u00a0\u00a0 (ActiveWorkbook.Sheets(&#8220;Sheet1&#8221;).Range(&#8220;A4:U200&#8221;).Select )<br \/>\n&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 individuare l\u2019ultima riga non vuota del foglio \u201cARCHIVIO\u201d<br \/>\n( Last_Row = Sheet3.Cells.Find(&#8220;*&#8221;, SearchOrder:=xlByRows,\u00a0\u00a0SearchDirection:=xlPrevious).Row )<br \/>\n&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 selezionare la riga successive a l\u2019ultima non vuota (Cells(Last_Row + 1, 1).Select )<br \/>\n&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 incollare il range copiato\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ( ActiveSheet.Paste)<br \/>\n&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 individuare l\u2019ultima riga non vuota del foglio \u201cARCHIVIO\u201d dopo aver incollato i dati<br \/>\n( Last_Row_AfterPaste = Sheet3.Cells.Find(&#8220;*&#8221;, SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row )<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 scrivere nelle righe comprese tra Last_Row e Last_Row_AfterPaste nome del file e data creazione<br \/>\n( Sheet3.Range(Cells(Last_Row + 1, 22), Cells(Last_Row_AfterPaste, 22)) = f1.Name )<br \/>\n( Sheet3.Range(Cells(Last_Row + 1, 23), Cells(Last_Row_AfterPaste, 23)) = f1.DateCreated )<br \/>\n&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 inserire nel foglio \u201cPannello do controllo\u201d la nota \u201cIMPORTATO\u201d<\/p>\n<pre>If GiaCaricato = 0 Then\r\n   Sheet1.Cells(r, 7) = \"IMPORTATO\"\r\n   Workbooks.Open (f1.Path)\r\n   ActiveWorkbook.Sheets(\"Sheet1\").Range(\"A4:U200\").Select 'modificare qui per indicare un range diverso da copiare\r\n\r\n   Selection.Copy\r\n   Windows(Archivio).Activate\r\n   Sheet3.Select\r\n\r\n   Last_Row = Sheet3.Cells.Find(\"*\", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row\r\n   Cells(Last_Row + 1, 1).Select\r\n   ActiveSheet.Paste\r\n\r\n   Last_Row_AfterPaste = Sheet3.Cells.Find(\"*\", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row\r\n   Sheet3.Range(Cells(Last_Row + 1, 22), Cells(Last_Row_AfterPaste, 22)) = f1.Name\r\n   Sheet3.Range(Cells(Last_Row + 1, 23), Cells(Last_Row_AfterPaste, 23)) = f1.DateCreated\r\n\r\n   Windows(f1.Name).Close\r\n\r\nEnd If<\/pre>\n<p>A voi il file:<br \/>\n<a href=\"http:\/\/www.office-guru.com\/wordpress\/?attachment_id= 1148\/\u200e\">APRI<\/a><\/p>\n<p>Riccardo Vincenti<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Domanda: La mia necessit\u00e0 \u00e8 quella di copiare da file chiusi xls sempre le stesse celle (a4:u200), che si trovano in una cartella in &#8220;c:\/dati&#8221; e incollarli,nel file attivo in quel momento chiamato archivio, sulla prima riga libera partendo dalla &hellip; <a href=\"https:\/\/www.office-guru.com\/wordpress\/2014\/04\/estrarre-dati-da-cartelle-e-files-chiusi-2\/\">Continua a leggere<span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"_links_to":"","_links_to_target":""},"categories":[13,5,6],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/p39IU1-it","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":752,"url":"https:\/\/www.office-guru.com\/wordpress\/2013\/10\/estrarre-dati-da-cartelle-e-files-chiusi\/","url_meta":{"origin":1145,"position":0},"title":"026. Estrarre dati da cartelle e files chiusi","date":"19 Ottobre 2013","format":false,"excerpt":"Domanda: Sono alla ricerca di una macro vba che mi permetta di andare a leggere dei dati su foglio 1 di excel di varie cartelle di una cartella denominata Magazzino Magazzino \/abete\/1098.xls\/foglio1 \/abete\/1099.xls\/foglio1 \/acero\/2097.xls\/foglio1 \/acero\/2120.xls\/foglio1 ecc. Dovrei sommare in un nuovo foglio i valori contenuti nei vari foglio1 dell'elenco ad\u2026","rel":"","context":"In &quot;Domande Lettori&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1822,"url":"https:\/\/www.office-guru.com\/wordpress\/2017\/10\/071-estrazione-casuale-valori-da-un-elenco\/","url_meta":{"origin":1145,"position":1},"title":"071. Estrazione casuale valori da un elenco","date":"5 Ottobre 2017","format":false,"excerpt":"Ci scrivono: Buonasera, io dovrei estrarre, casualmente, da una colonna di 170 celle 40 celle. Mi potreste dare info su la funzione da utilizzare ? Grazie <!--more--> Risposta: Dopo aver indicato nella cella D1 il numero di valori che voglio estrarre dal mio elenco basta premere il bottone \"ESTRAI\" che\u2026","rel":"","context":"In &quot;Domande Lettori&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":606,"url":"https:\/\/www.office-guru.com\/wordpress\/2013\/05\/estrarre-dati-da-file-diversi-senza-aprirli-ad-uno-ad-uno\/","url_meta":{"origin":1145,"position":2},"title":"020. Estrarre dati da file diversi senza aprirli ad uno ad uno","date":"3 Maggio 2013","format":false,"excerpt":"Domanda: Ho una cartella contenente diversi file excel che per comodit\u00e0 chiamer\u00f2 a.xls, b.xls, c.xls, ecc.. Ognuno di questi file ha nel foglio 1 una tabella (identica per tutti i file) con due colonne di dati (a e b) La mia esigenza \u00e8 quella di trovare una formula\/macro che sommi\u2026","rel":"","context":"In &quot;Domande Lettori&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1831,"url":"https:\/\/www.office-guru.com\/wordpress\/2017\/10\/072-estrazione-numeri-casuali\/","url_meta":{"origin":1145,"position":3},"title":"072. Estrazione numeri casuali","date":"6 Ottobre 2017","format":false,"excerpt":"Durante la realizzazione del precedente articolo '071. Estrazione casuale valori da un elenco' ho pensato ad una variante del codice che permettesse di estrarre dei numeri dopo aver definito il valore minimo e massimo della serie di numeri da cui estrarre, ed il numero di valori da estrarre. Questo \u00e8\u2026","rel":"","context":"In &quot;Excel&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":445,"url":"https:\/\/www.office-guru.com\/wordpress\/2013\/03\/funzione-db-max\/","url_meta":{"origin":1145,"position":4},"title":"012. Funzione DB.MAX","date":"22 Marzo 2013","format":false,"excerpt":"Domanda: Salve, sto cercando di utilizzare la funzione Db.Max. Devo gestire N Attrezzature da lavoro, di cui rilevare periodicamente il monte ore di lavoro ccumulato. La tabella origine (il database), da cui estrarre i dati, contiene le letture periodiche, con i seguenti 3 campi: Attrezzatura | Data della lettura |\u2026","rel":"","context":"In &quot;Domande Lettori&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":843,"url":"https:\/\/www.office-guru.com\/wordpress\/2014\/01\/sommare-valori-in-base-ad-una-condizione\/","url_meta":{"origin":1145,"position":5},"title":"030. Sommare valori in base ad una condizione","date":"16 Gennaio 2014","format":false,"excerpt":"Domanda: Ho la necessit\u00e0 di sommare le quantit\u00e0 (dati numerici in colonna A) degli articoli (dati alfanumerici in colonna C) presenti in un foglio di lavoro. Questi articoli sono ripetuti pi\u00f9 volte (con relative diverse quantit\u00e0), quindi gradirei che si creasse un secondo foglio di lavoro con i dati elencati\u2026","rel":"","context":"In &quot;Domande Lettori&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/posts\/1145"}],"collection":[{"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/comments?post=1145"}],"version-history":[{"count":7,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/posts\/1145\/revisions"}],"predecessor-version":[{"id":1234,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/posts\/1145\/revisions\/1234"}],"wp:attachment":[{"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/media?parent=1145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/categories?post=1145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.office-guru.com\/wordpress\/wp-json\/wp\/v2\/tags?post=1145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}