Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Attivazione automatica ultima riga

Ultimo Aggiornamento: 18/08/2020 14:30
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]
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 11:15. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com