| | Post: 1 | Registrato il: 17/08/2020
| Età: 36 | Utente Junior | 2019 | | OFFLINE | |
|
17/08/2020 19:37 | |
Ciao a tutti,
dopo vari tentativi sono riuscito a creare un codice che mi consente di creare automaticamente delle cartelle e sottocartelle sul desktop con dei dati che inserito in una tabella excel.
Il limite di questo codice è che ogni volta, devo andare a dirgli da quale cella prendere il testo che andrà a comporre il nome della cartella (myfolder)...nel mio caso ho messo la cella A1, B1, C1 ecc..
Al contrario, vorrei che quando inserisco i dati nell'ultima riga e clicco sul pulsante di attivazione della macro, in automatico mi peschi i dati relativi alla colonna A, B, C ecc... dell'ultima riga appena inserita.
grazie a chiunque vorrà aiutarmi :)
[TESTO ::Sub CARTELLAESOTTOCARTELLA()
myfolder = Range("A1") & "_" & Range("B1") & "_" & Range("C1") & "_" & Range("D1") & "_" & Range("E1") & "_" & Range("F1").Value
Shell "cmd.exe /c mkdir C:\" & myfolder & "\1.Amministrativa"
Shell "cmd.exe /c mkdir C:\" & myfolder & "\2.Tecnica"
Shell "cmd.exe /c mkdir C:\" & myfolder & "\3.Economica"
Shell "cmd.exe /c mkdir C:\" & myfolder & "\4.Doc.Gara"
MsgBox "La cartella " & myfolder & " è stata creata"
End Sub] |
|
| | Post: 972 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
17/08/2020 23:10 | |
Ti propongo di apportare queste modifiche alla tua macro aggiungendo un ciclo sulle righe compilate (fa fede la colonna A) ed un controllo sulla l'esistenza o meno della cartella per evitare di ricrearla: Option Explicit
Sub CARTELLAESOTTOCARTELLA()
Dim myfolder As String
Dim FSO As Object
Dim ur As Long
Dim riga As Long
Set FSO = CreateObject("Scripting.FileSystemObject")
ur = Range("A" & Rows.Count).End(xlUp).Row
For riga = 1 To ur
myfolder = Range("A" & riga) & "_" & Range("B" & riga) & "_" & Range("C" & riga) & "_" _
& Range("D" & riga) & "_" & Range("E" & riga) & "_" & Range("F" & riga).Value
If Not FSO.FolderExists("C:\" & myfolder) Then
Shell "cmd.exe /c mkdir C:\" & myfolder & "\1.Amministrativa"
Shell "cmd.exe /c mkdir C:\" & myfolder & "\2.Tecnica"
Shell "cmd.exe /c mkdir C:\" & myfolder & "\3.Economica"
Shell "cmd.exe /c mkdir C:\" & myfolder & "\4.Doc.Gara"
MsgBox "La cartella " & myfolder & " è stata creata"
End If
Next riga
Set FSO = Nothing
End Sub
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 1 | Registrato il: 17/08/2020
| Età: 36 | Utente Junior | 2019 | | OFFLINE | |
|
18/08/2020 08:52 | |
rollis13, 17/08/2020 23:10:
Ti propongo di apportare queste modifiche alla tua macro aggiungendo un ciclo sulle righe compilate (fa fede la colonna A) ed un controllo sulla l'esistenza o meno della cartella per evitare di ricrearla: Option Explicit
Sub CARTELLAESOTTOCARTELLA()
Dim myfolder As String
Dim FSO As Object
Dim ur As Long
Dim riga As Long
Set FSO = CreateObject("Scripting.FileSystemObject")
ur = Range("A" & Rows.Count).End(xlUp).Row
For riga = 1 To ur
myfolder = Range("A" & riga) & "_" & Range("B" & riga) & "_" & Range("C" & riga) & "_" _
& Range("D" & riga) & "_" & Range("E" & riga) & "_" & Range("F" & riga).Value
If Not FSO.FolderExists("C:\" & myfolder) Then
Shell "cmd.exe /c mkdir C:\" & myfolder & "\1.Amministrativa"
Shell "cmd.exe /c mkdir C:\" & myfolder & "\2.Tecnica"
Shell "cmd.exe /c mkdir C:\" & myfolder & "\3.Economica"
Shell "cmd.exe /c mkdir C:\" & myfolder & "\4.Doc.Gara"
MsgBox "La cartella " & myfolder & " è stata creata"
End If
Next riga
Set FSO = Nothing
End Sub
Ciao, innanzitutto ti ringrazio tantissimo. L'unica cosa è che se ho 100 righe mi crea sempre 100 cartelle. Invece vorrei che prendesse solo l'ultima riga che io ho inserito. Perché se no mi crea ogni volta una marea di cartelle che ho già .
Grazie ancora per il prezioso aiuto |
| | Post: 973 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
18/08/2020 09:07 | |
E dove sta scritto che ricrea le cartelle ? Non per niente ho inserito la riga di codice per verificarne la 'non' presenza:
If Not FSO.FolderExists("C:\" & myfolder) Then
...
crea la cartella dato che non c'è
...
End If
Al massimo si può dire che la mia macro ricontrolla nell'elenco tutte le righe relative alle cartelle precedentemente create.
Puoi sempre sostituire il codice di verifica ed usare una cella d'appoggio dove registrare a fine macro il numero dell'ultima riga elaborata così da poter gestire il ciclo For/Next facendolo partire dal numero presente nella cella d'appoggio (invece che da '1') e fino a 'ur'. [Modificato da rollis13 18/08/2020 09:11]
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 2 | Registrato il: 17/08/2020
| Età: 36 | Utente Junior | 2019 | | OFFLINE | |
|
18/08/2020 10:17 | |
rollis13, 18/08/2020 09:07:
E dove sta scritto che ricrea le cartelle ? Non per niente ho inserito la riga di codice per verificarne la 'non' presenza:
If Not FSO.FolderExists("C:\" & myfolder) Then
...
crea la cartella dato che non c'è
...
End If
Al massimo si può dire che la mia macro ricontrolla nell'elenco tutte le righe relative alle cartelle precedentemente create.
Puoi sempre sostituire il codice di verifica ed usare una cella d'appoggio dove registrare a fine macro il numero dell'ultima riga elaborata così da poter gestire il ciclo For/Next facendolo partire dal numero presente nella cella d'appoggio (invece che da '1') e fino a 'ur'.
Ah ho capito... scusa 😉il discorso è che l'archivio è abbastanza incasinato e io vorrei crearla in c: per poi spostarla manualmente in archivio.
Comunque ho risolto 😉 graziee ancora |
| | Post: 974 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
18/08/2020 11:01 | |
Grazie del riscontro positivo 👍.
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
|
18/08/2020 14:30 | |
A parte l'ottimo VBA di rollis13(Ciao)
ur = Range("A" & Rows.Count).End(xlUp).Row ' trova l'ultima riga scritta, pertanto
myfolder = Range("A" & ur) & "_" & Range("B" & ur) & "_" & Range("C" & ur) & "_" _ & Range("D" & ur) & "_" & Range("E" & ur) & "_" & Range("F" & ur).Value
Ps. Ricordati sempre le variabili...Dim myfolder As String, Ur as Long
Pps. Se fosse in C:\Archivio...? Basta mettere EX Shell "cmd.exe /c mkdir C:\Archivio\" & myfolder & "\4.Doc.Gara" [Modificato da ABCDEF@Excel 18/08/2020 14:34] |
|
|