Condividi tramite

Aggiungere nome e cognome a file esistenti in una determinata cartella

Anonimo
2023-01-21T17:55:34+00:00

Buongiorno a tutti,

come sempre avrei bisogno del vostro aiuto per capire, se possibile e come fare, ad aggiungere ad un certo numero di files archiviati in una cartella il nome e cognome dell'intestatario della cartella.

Ho una lista personale su excel (Nome - Cognome - grado) ad ogni persona corrisponde una cartella con (Nome - Cognome - Grado) in questa cartella ci sono una certa quantità di certificati sia in "PDF" che in "JPEG".

Avrei la necessita tramite macro di aggiungere ad ognuno di questi file il nome e cognome del possessore.

Spero di essere stato chiaro e che la mia domanda non sia troppo pazza :)

Grazie e buona giornata

Giuseppe

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2023-01-26T17:57:57+00:00

    Ciao Giuseppe,

    continuando a fare prove (ovviamente), mi sono reso conto che alla riga 49

    Set oSubFolder = oFSO.GetFolder(sDirectory & sSeparator & arrIn(i, 4) & Space(1) & arrIn(i, 5))

    sDirectory mi restituiva "Personnel Certificates" quindi mi è venuto il dubbio che non leggesse l'intera Path.

    Pertanto ho sostituito sDirectory con sPath ed il codice ha funzionato alla grande su tutti i certificati in tutte le cartelle.

    Non so se la procedura è corretta ma adesso funziona benissimo.

    Puoi darmi riscontro di quanto ho fatto?

    Se, come nel mio file prova, il codice viene eseguito mentre la directory padre è la directory predefinita, la variabile sDirectory restituirà il percorso completo della directory di interesse:

      [![](https://learn-attachment.microsoft.com/api/attachments/14c429d9-9e6a-443f-b6b0-c9376cd885c1?platform=QnA"https://learn-attachment.microsoft.com/api/attachments/132d94c7-657a-4d24-a1ac-7eaa36850e86?platform=QnA" rel="ugc nofollow">Immagine

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

13 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2023-01-23T20:54:01+00:00

    Ciao Norman,

    il codice va benissimo ma come sempre, dato che io non scrivo tutte le varianti del caso, mi va in errore quando nontrova il nome e cognome. Ovviamente mi restituisce "path not found "

    Avrei bisogno di far girare il codice solo sulle righe ove c'è il cognome e nome e non su tutte. Ecco come è strutturato il mio foglio:

    MAR DROF 446001 Master
    MAR DROF 446015 Master DP
    MAR DROF 446015 Master DP (OIM)
    MAR 446015 Master DP (OIM) Castellano Giuseppe
    MAR 446015 Master DP (OIM) Morris Robert Paul
    MAR DROF 446003 Chief Mate
    MAR DROF 446016 Chief Mate DP
    MAR DROF 446016 Chief Mate DP (BS)
    MAR 446016 Chief Mate DP (BS) Pitrola Santo
    MAR 446016 Chief Mate DP (BS) Chrostek Maciej
    MAR DROF 446005 OOW Navigational Watch
    MAR 446005 OOW Navigational Watch Da Silva Felipe Simon
    MAR 446005 OOW Navigational Watch Bujanovic Vedran
    MAR 446005 OOW Navigational Watch Makin Hrvoje
    MAR 446005 OOW Navigational Watch ABRAHAMS Shukrey
    MAR DROF 446005 OOW Navigational Watch (BCO)
    MAR DROF 446018 OOW Navigational Watch DP
    MAR 446018 OOW Navigational Watch DP Rogowski Maciej
    MAR 446018 OOW Navigational Watch DP Bezerra Santos Carlos Marcelo
    MAR 446018 OOW Navigational Watch DP Wojciech Pawlowski
    MAR 446018 OOW Navigational Watch DP Mariusz Maslowski
    MAR DROF 446018 OOW Navigational Watch DP (BCO)
    MAR 446018 OOW Navigational Watch (BCO) Robert Witko
    MAR 446018 OOW Navigational Watch (BCO) Martinkus Deividas
    MAR 446018 OOW Navigational Watch DP (BCO) Dudek Rafal
    MAR 446018 OOW Navigational Watch DP (BCO) Kowalczyk Daniel

    Inoltre sarebbe possibile rendere la path dinamica?

    Ho provato a sostituire:

    Const sDirectory As String ="O:\VESSEL\STRN-DCS-DB\GE-DC-Document-Control\GE-DC 23 Matrix\Matrix\Personnel Certificates"

    con ActiveWorkbook.Path & "\Personnel Certificates"

    ma non va e questa modifica sarebbe molto utile in quanto se dovessi spostare tutta la cartella principale "Matrix" riuscirei sempre a puntare la cartella di destinazione.

    Grazie come sempre del tuo prezioso aiuto

    Giuseppe

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-01-23T15:38:27+00:00

    Ciao Giuseppe,

    certamente vi do più info possibili per creare questo codice.

    Iniziamo dal folgio excel, ho una matrice dati impostata in questo modo:

    MAR 446013 Navigational Watch Rating Beljajev Artur
    MAR 446013 Navigational Watch Rating NAZARETH Ariel Lorenzana
    MAR 446013 Navigational Watch Rating Tilburn Nathan
    MAR 446013 Navigational Watch Rating Adams Rajap
    MAR 446013 Navigational Watch Rating Solomons Leonard Clint
    MAR 446013 Navigational Watch Rating JUMAOAS Christopher
    MAR 446013 Navigational Watch Rating BAISA Pepito Tabang
    MAR OUT 446013 Navigational Watch Rating MONDARES Romel Pugnaria

    per ognuna delle persone in matrice, ho una cartella dedicata (intitolata con colonna "D:E" ) con all'interno tutti i certificati che la persona possiede.

    Vorrei, tramite codice, ppoter aggiungere ad ogni certificato della cartella il nome e cognome del proprietario del certificato.

    Quindi secondo me una cosa del genere:

    Cliccare sulla persona interessata, cercare la cartella che abbia lo stesso nome della colonna "D" e colonna "E" selezionale la cartella e modificare tutti i file all'interno di essa aggiungendo già al nome esistente solo la colonna "E" cioè il nome e cognome del proprietario del certificato.

    Ad esempio se seleziono la prima persona della lista:

    Navigational Watch Rating Beljajev Artur vado a puntare alla sua cartella che si trova nel mio caso in :

    O:\VESSEL\STRN-DCS-DB\GE-DC-Document-Control\GE-DC 23 Matrix\Matrix\Personnel Certificates*Navigational Watch Rating Beljajev Artur*

    a questo punto dovrei entrate nella cartella selezionata e modificare tutti i file in essa (PDF & JPEG) aggiungendo al nome del certificato stesso il nome del proprietario e cioè:

    Confined Space Entry certificate

    diventerà

    Confined Space Entry certificate Beljajev Artur

    Prova qualcosa del genere:

    '========>>

    Option Explicit

    Option Compare Text

    '-------->>

    Public Sub Tester()

    Dim oFSO As Object 
    
    Dim oFolder As Object, oSubFolder As Object, ofile As Object 
    
    Dim WB As Workbook 
    
    Dim srcSH As Worksheet 
    
    Dim srcRng As Range 
    
    Dim arrIn As Variant 
    
    Dim sSeparator As String 
    
    Dim sOldName As String, sNewName As String, sSuffix As String 
    
    Dim LRow As Long 
    
    Dim i As Long 
    
    Const sDirectory As String ="O:\VESSEL\STRN-DCS-DB\GE-DC-Document-Control\GE-DC 23 Matrix\Matrix\Personnel Certificates\" 
    
    Const sFoglio\_Sorgente As String = **"Foglio1"              '<<=== Modifica** 
    
    Const iPrima\_Riga As Long = **2                                      '<<=== Modifica** 
    
    Set WB = ThisWorkbook 
    
    Set srcSH = WB.Sheets(sFoglio\_Sorgente) 
    
    With srcSH 
    
        LRow = LastRow(srcSH, .Columns("A")) 
    
        Set srcRng = .Range("A" & iPrima\_Riga).Resize(LRow - iPrima\_Riga + 1, 5) 
    
    End With 
    
    arrIn = srcRng.Value 
    
    Set oFSO = CreateObject("Scripting.FileSystemObject") 
    
    Set oFolder = oFSO.GetFolder(sDirectory) 
    
    sSeparator = Application.PathSeparator 
    
    For i = LBound(arrIn) To UBound(arrIn) 
    
        Set oSubFolder = oFSO.GetFolder(sDirectory & sSeparator & arrIn(i, 4) & Space(1) & arrIn(i, 5)) 
    
        For Each ofile In oSubFolder.Files 
    
            sOldName = Split(ofile.Name, ".")(0) 
    
            sSuffix = Split(ofile.Name, ".")(1) 
    
            If sSuffix = "JPEG" Or sSuffix = "PDF" Then 
    
            sNewName = oSubFolder & sSeparator & sOldName & Space(1) & arrIn(i, 5) & "." & sSuffix 
    
            Name ofile.Path As sNewName 
    
            End If 
    
        Next ofile 
    
    Next i 
    
    Call MsgBox(Prompt:="Finito!", \_ 
    
        Buttons:=vbInformation, \_ 
    
        Title:="REPORT!") 
    

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

    Optional Rng As Range, \_ 
    
    Optional minRow As Long = 1) 
    
    If Rng Is Nothing Then 
    
        Set Rng = SH.Cells 
    
    End If 
    
    On Error Resume Next 
    
    LastRow = Rng.Find(What:="\*", \_ 
    
        After:=Rng.Cells(1), \_ 
    
        Lookat:=xlPart, \_ 
    
        LookIn:=xlFormulas, \_ 
    
        SearchOrder:=xlByRows, \_ 
    
        SearchDirection:=xlPrevious, \_ 
    
        MatchCase:=False).Row 
    
    On Error GoTo 0 
    
    If LastRow < minRow Then 
    
        LastRow = minRow 
    
    End If 
    

    End Function

    '<<========

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2023-01-22T16:12:41+00:00

    Ciao Norman,

    certamente vi do più info possibili per creare questo codice.

    Iniziamo dal folgio excel, ho una matrice dati impostata in questo modo:

    MAR 446013 Navigational Watch Rating Beljajev Artur
    MAR 446013 Navigational Watch Rating NAZARETH Ariel Lorenzana
    MAR 446013 Navigational Watch Rating Tilburn Nathan
    MAR 446013 Navigational Watch Rating Adams Rajap
    MAR 446013 Navigational Watch Rating Solomons Leonard Clint
    MAR 446013 Navigational Watch Rating JUMAOAS Christopher
    MAR 446013 Navigational Watch Rating BAISA Pepito Tabang
    MAR OUT 446013 Navigational Watch Rating MONDARES Romel Pugnaria

    per ognuna delle persone in matrice, ho una cartella dedicata (intitolata con colonna "D:E" ) con all'interno tutti i certificati che la persona possiede.

    Vorrei, tramite codice, ppoter aggiungere ad ogni certificato della cartella il nome e cognome del proprietario del certificato.

    Quindi secondo me una cosa del genere:

    Cliccare sulla persona interessata, cercare la cartella che abbia lo stesso nome della colonna "D" e colonna "E" selezionale la cartella e modificare tutti i file all'interno di essa aggiungendo già al nome esistente solo la colonna "E" cioè il nome e cognome del proprietario del certificato.

    Ad esempio se seleziono la prima persona della lista:

    Navigational Watch Rating Beljajev Artur vado a puntare alla sua cartella che si trova nel mio caso in :

    O:\VESSEL\STRN-DCS-DB\GE-DC-Document-Control\GE-DC 23 Matrix\Matrix\Personnel Certificates*Navigational Watch Rating Beljajev Artur*

    a questo punto dovrei entrate nella cartella selezionata e modificare tutti i file in essa (PDF & JPEG) aggiungendo al nome del certificato stesso il nome del proprietario e cioè:

    Confined Space Entry certificate

    diventerà

    Confined Space Entry certificate Beljajev Artur

    Spero di essere stato più chiaro e che si possa fare.

    Grazie

    Giuseppe

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2023-01-22T00:40:16+00:00

    Ciao Giuseppe,

    come sempre avrei bisogno del vostro aiuto per capire, se possibile e come fare, ad aggiungere ad un certo numero di files archiviati in una cartella il nome e cognome dell'intestatario della cartella.

    Ho una lista personale su excel (Nome - Cognome - grado) ad ogni persona corrisponde una cartella con (Nome - Cognome - Grado) in questa cartella ci sono una certa quantità di certificati sia in "PDF" che in "JPEG".

    Avrei la necessita tramite macro di aggiungere ad ognuno di questi file il nome e cognome del possessore.

    Spero di essere stato chiaro e che la mia domanda non sia troppo pazza :)

    Penso che per rendere comprensibili le tue esigenze e per fornirti un utile aiuto, sarebbe di notevole aiuto se tu potessi fornirci un esempio pratico dei dati di origine e dei risultati desiderati.

    A questo proposito, sono a conoscenza della tua ultima email che è mia intenzione indirizzare a brevissimo.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento