› Sviluppare funzionalita su Microsoft Office con VBA › rmDir non funziona sotto MAC-OS
-
AutoreArticoli
-
Buongiorno,
premesso che ACTIVEX non funziona sotto MAC-OS, e quindi il filessystemobject non è accessibile, l'unico comando disponibile per cancellare una directory sotto MAC-OS è rmDir.
Bene, lo accetta, ma da errore in esecuzione.
Ma perché?
(Allego il messaggio la schermata col messaggio di errore e quella con la macro di prova)
Sub X_KILL_FX() Set MM = Workbooks("LOGISTA_MACRO.xls").Worksheets("MACRO") PERCORSOW = "PROVA:" PERCORSOX = MM.Range("A34").Value & MM.Range("F34") & PERCORSOW MsgBox PERCORSOX RmDir PERCORSOX 'Dim FSO As Object 'Set FSO = CreateObject("scripting, filessystemobject")
Allegati:
You must be logged in to view attached files.Ciao, io non posseggo un MAC quindi non posso esserti molto di aiuto. Da una ricerca fatta, potrebbe essere che il problema derivi o dal percorso inesistente (se ricordo bene i percorsi in ambiente MAC-OS sono costruiti in formato simile a /Users/nomeutente/cartella quindi con il carattere "/" al contrario di Windows che utilizza "\"). Altro problema potrebbe essere che il comando
RmDirfunziona a patto che la cartella specificata nel percorso NON contiene dei file all'interno e per questo motivo genera errore.Oltre al comando RmDir hai preso in considerazione anche il comando Kill? Ovvero cancellare prima i file e poi la cartella tramite RmDir.
Ad esempio:
Sub elimina_File_e_Cartella() Dim path As String Dim filePath As String path = "/Users/nomeutente/CartellaPrincipale/" 'tuo percoso filePath = Dir(path & "*") Do While filePath <> "" On Error Resume Next Kill path & filePath On Error GoTo 0 filePath = Dir() Loop On Error Resume Next RmDir path On Error GoTo 0 MsgBox "La cartella " & path & " è stata eliminata!" End SubMsgBox PERCORSOX
Come dice Alex i percorsi sono costruiti con un separatore diverso in Windows rispetto al Mac pero' vogliono comunque un separatore. Non hai mostrato l'esito dell'istruzione che ho quotrato, che sarebbe stato interessante per stabilire se effettivamente sia questo il punto (magari nelle celle che compongono PERCORSOX il separatore c'e' gia' ma non lo sappiamo perche' non si vede dalle immagini allegate).
Trovo pertinente anche l'osservazione successiva di Alex sul fatto che la cartella deve essere vuota per essere cancellata con rmdir.
Allora, questo il codice VBA:
Sub X_RMDIR() ' Dim NOMEDIRW As String Set MM = Workbooks("LOGISTA_MACRO.xls").Worksheets("MACRO") NOMEDIRW = "PROVA" PERCORSOW = MM.Range("A34").Value & MM.Range("F34") MsgBox PERCORSOW & NOMEDIRW If DIR(PERCORSOW & NOMEDIRW, vbDirectory) = "" Then MsgBox NOMEDIRW & " - IL FOLDER NON ESISTE" Else MsgBox NOMEDIRW & " - IL FOLDER ESISTE" RmDir PERCORSOW & NOMEDIRW End If ' End Subi messaggi sono allegati.
Allegati:
You must be logged in to view attached files.altri allegati ...
Ho letto, non ricordo più dove, ma ora lo cerco, che non è una questione di codice o di VBA ma di permessi di accesso alle directory, tipo il permesso di essere modificata da una macro. Ma era un problema in ACCESS e non trovavo il riscontro in EXCEL.
Ora provo a ricercarla , mi sembra in Substack ...
Allegati:
You must be logged in to view attached files.l'ho ritrovato, ecco il link:
https://stackoverflow.com/questions/51304332/rmdir-path-file-access-error-vba
Riuscite a distrigare sta matassa ...
Grazie carissimi !!!
Insomma tradotto in italiano (automaticamente in Crome) dice:
"Come avete detto tutti, non sembra un problema di codice. Ho approfondito un po' e sembrava un problema con le mie impostazioni Macro in Office.
In Access, sono andato su File >> Opzioni >> Centro protezione >> Impostazioni Centro protezione e ho impostato Macro su Abilitato.
Ora la cartella di destinazione è stata eliminata correttamente."
In ACCESS, capite? Ma a cosa corrisponde in EXCEL? ... "le impostazioni di Macro" ???
In Excel e' simile dal momento che e' sempre suite Office.
File \ Opzioni di Excel \ Centro protezione \ Impostazioni centro protezione \ Impostazioni delle macro
Io pero' non attiverei le macro indiscriminatamente, e' una misura di protezione minima ma dovrebbe restare com'e'.
ehehe .. grazie Vecchio Frac ... ma sono sotto MAC-OS (vedi allegato) ... mannaggia!
Sotto Excel/file poi non so dove andare ...
Allegati:
You must be logged in to view attached files.Kill per i File
ma se ne hai tanti
mydir/* oppure mydir/.*
RmDir elimina la cartella quando è vuota
Da un mio File prima elimino i File poi la cartella
DefPath = "C:\Users\" & Environ("userName") & "\" & "desktop\temp\"
Kill DefPath & "storico.zip"
Kill DefPath & "storico.txt"
RmDir "C:\Users\" & Environ("userName") & "\desktop\temp\"Ma la cartella è già vuota ... (e poi MAC-OS non accetta caratteri jolly)
Ma sembra che ho trovato la soluzione in un altro modo: usando NAME.
Il mio problema era quello di "svuotare" una cartella con le copie dei file della mia procedura (gestione ordine tabacchi, sono 12 file in una cartella + 4 in un'altra).
Ogni volta che si entra nella procedura (e in altri momenti il programma salva tutti i file in una directory con data e ora.
Directory poi registrate nella schermata di controllo e poi gestite per poter, eventualmente, ripristinare una situazione precedente (come puoi vedere sullo sfondo dei messaggi negli allegati).
Bene, occorreva per non accumulare directory su directory, via via che aggiungevo una directory di salvataggio eliminassi ogni volta la più vecchia, o meglio la spostassi da SAVE in una SAVE_OLD.
Insomma creavo in SAVE_OLD una directory con lo stesso nome, gli copiavo i file da quella originale, eliminavo i file dall'originale e a questo punto dovevo eliminare l'originale "vuota". ecco perchè usavo rmDir.
Tutto questo perchè non trovavo una funzione per muovere una directory ... invece no, NAME fa tutto questo per File e Directory non cambia solo il nome di un file o directory ma li sposta anche secondo il percorso indicato.
Rimane il fatto che rmdir non funziona sotto MAC-OS ...
Grazie ragazzi! Siete formidabili e poi così solleciti nelle risposte che non vi batte nessuno. IL programma che ho fatto per gestire i tabacchi è formidabile, ma quando leggo i vostri appunti rimango scioccato dalle vostre conoscenze del VBA rispetto alle mie! Vi invidio e vi ammiro con tutto il cuore.
Presto vi ricontatterò sottoponendovi in un'altra discussione, se c'è modo di intercettare la digitazione in una cella per inserire un RETURN automatico se si batte una lettera. Devo riportare dei codici e ogni volta A INVIO, C INVIO, ... oppure -2,5 INVIO (e qui va bene) ma poi R INVIO ... potessi eliminare l'INVIO quando batto una lettera ...
A presto risentirci, vi voglio bene.
Non conosco Mac ma stavo leggendo (sempre su Stackoverflow) un trucco con l'api system. Ti lascio il link perche' il thread e' lungo e in inglese e bisogna digerirlo ma sembra interessante (per chi ha Mac almeno):
https://stackoverflow.com/questions/6136798/vba-shell-function-in-office-2011-for-mac
Presto vi ricontatterò sottoponendovi in un'altra discussione, se c'è modo di intercettare la digitazione in una cella per inserire un RETURN automatico se si batte una lettera.
Apri un'altra discussione ma la perplessita' che ho e' questa: hai bisogno di inserire dei caratteri in una cella separati con Invio? L'editing delle celle non e' molto avanzato in Excel. Chiaramente nella prossima discussione farai degli esempi piu' illuminanti
-
AutoreArticoli
