Estrazione sincrona archivio compresso con vba access

di il
8 risposte

Estrazione sincrona archivio compresso con vba access

Buongiorno a tutti, tramite vba estraggo il contenuto di un'archivio .zip in una cartella predefinita per poi "leggere" ad uno ad uno i file o cartelle estratte per rinominarle e fare altre operazioni.
Il problema è che l'esecuzione dell'estrazione tramite Winrar avviene in modo asincrono, il resto del codice prosegue mentre l'estrazione è ancora in corso e durante la ricerca tra i file o cartelle estratti non vengono trovati tutti.
il codice che utilizzo è il seguente

Dim RarIt As String
   	Dim Source As String
   	Dim Desti As String
    	Dim WinRarPath As String
    	Percorso = "E:\Scaricati\"
	WinRarPath = "C:\Program Files\WinRar\"
    	mypath = percorso
	MioFile = mypath & "*.*"
	myname = Dir(MioFile, vbDirectory)
	...
	
    	Source = "E:\Scaricati\" & myname
   	Desti = "J:\xxxx\xxxxx\extr\"
        RarIt = Shell(Chr(34) & WinRarPath & "WinRar.exe" & Chr(34) & " X " & Chr(34) & Source & Chr(34) & " " & Chr(34) & Desti & Chr(34), VbNormalFocus)
Ho trovato il seguente tread
https://www.iprogrammatori.it/forum-programmazione/access/far-andare-avanti-codice-solo-file-t38225.html
in cui si parla di wshell ma non riesco a costruire la stringa in modo corretto, così wshell.run mi genera errore
450 numero errato di argomenti o assegnazione di proprietà non valida
Mi spiegate dove sbaglio?

8 Risposte

  • Re: Estrazione sincrona archivio compresso con vba access

    Non stai usando nulla del link che hai citato lo sai vero...?
    In quel link si fa appunto cenno al metodo RUN dell'oggetto Windows Scripring Shell... che viene istanziato con il CreateObject...
    Tu in questo codice invece usi la Shell nativa che NON È SINCRONA.

    Detto questo mi pare, ad occhio che manchi qualche spazio nella stringa.... ma se non la stampi in finestra immediata prima di lanciarla fai fatica sicuramente a vedere le possibili anomalie.
  • Re: Estrazione sincrona archivio compresso con vba access

    @Alex ha scritto:


    Non stai usando nulla del link che hai citato lo sai vero...?
    In quel link si fa appunto cenno al metodo RUN dell'oggetto Windows Scripring Shell... che viene istanziato con il CreateObject...
    in realtà l'ho fatto, ho solo dimenticato di inserirlo nel messagio
    
    Dim Source As String
        Dim Desti As String
        Dim WinRarPath As String
        Dim wshell As Object
        Set wshell = VBA.CreateObject("Wscript.Shell")
        Percorso = "E:\Scaricati\"
        WinRarPath = "C:\Program Files\WinRar\"
    
    Detto questo mi pare, ad occhio che manchi qualche spazio nella stringa.... ma se non la stampi in finestra immediata prima di lanciarla fai fatica sicuramente a vedere le possibili anomalie.
    ho provato a stamparla nella finestra immediata e ottengo
    "C:\Program Files\WinRar\WinRar.exe" X "E:\Scaricati\file.zip" "J:\Dario\xxxx\xxxxx\extr\"
    mi sembra a posto ma da sempre errore 450
  • Re: Estrazione sincrona archivio compresso con vba access

    Hai scordato di inserirlo...?
    Ma poi nel.codice usi Shell... e quello lo hai scordato o è un errore...?

    Quella stringa se la usi da Cmd funziona...?
  • Re: Estrazione sincrona archivio compresso con vba access

    
    Dim RarIt As String
       	Dim Source As String
       	Dim Desti As String
        	Dim WinRarPath As String
        	Dim wshell As Object
            Set wshell = VBA.CreateObject("Wscript.Shell")
            
        	Percorso = "E:\Scaricati\"
    	WinRarPath = "C:\Program Files\WinRar\"
        	mypath = percorso
    	MioFile = mypath & "*.*"
    	myname = Dir(MioFile, vbDirectory)
    	...
    	
        	Source = "E:\Scaricati\" & myname
       	Desti = "J:\xxxx\xxxxx\extr\"
       	stringaWR = Chr(34) & WinRarPath & "WinRar.exe" & Chr(34) & " X " & Chr(34) & Source & Chr(34) & " " & Chr(34) & Desti & Chr(34)
            Debug.Print stringaWR
            
            wshell.Run stringaWR, vbNormalFocus, vbHide, True
    
    con la stampa di stringaWR ottengo
    "C:\Program Files\WinRar\WinRar.exe" X "E:\Scaricati\file.zip" "J:\Dario\xxxx\xxxxx\extr\"
    e con wshell.run mi da errore 450
  • Re: Estrazione sincrona archivio compresso con vba access

    Quella stringa funziona da riga di comando...?
  • Re: Estrazione sincrona archivio compresso con vba access

    Non sono pratico della riga di comando, cmq sono riuscito così perchè con C:\Program Files\WinRar\WinRar.exe ottengo come risposta "C:\Program" non è riconosciuto come comando interno o esterno
    C:\Program Files>WinRar\winRar.exe X E:\Scaricati\file.zip J:\Dario\xxxx\xxxxx\extr\
    e ottengo l'estrazione
  • Re: Estrazione sincrona archivio compresso con vba access

    Ho trovato una soluzione provvisoria fintanto che non riesco a utilizzare wshell, inserendo una msgbox nel codice appena a shell
  • Re: Estrazione sincrona archivio compresso con vba access

    Questo da riga di comando finziona
    C:\Program Files\WinRAR>WinRar.exe X E:\Scaricati\20191226_ExportFattureRicevute.zip J:\Dario\_Lavoro\_FATTURAZIONE\_Versione12\_ExportFattureRicevute\extr\
Devi accedere o registrarti per scrivere nel forum
8 risposte