Condividi:        

vba excel: conoscere nome autore file + se aperto

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

vba excel: conoscere nome autore file + se aperto

Postdi karug64 » 18/04/20 10:31

Salve a tutti.

Situazione:
Su un server condiviso di una rete aziendale pervengono una serie di file che un team di operatori è chiamato a lavorare.
Nell'attesa di passare ad Office 365 (attualmente siamo su office 2007) dovrei progettare un sistema che permetta di modificare i singoli file, ad ognuno degli utenti abilitati, con certezza che non si lavori lo stesso file più volte.

E' un problema particolarmente complesso (per me, ovviamente) che avrei pensato di risolvere in questo modo:

realizzo un foglio xlsm che ogni utente tiene sul proprio pc locale che da form mi permetta di selezionare un file excel scegliendolo dal percorso sulla cartella del server condiviso (e questo lo so fare ....).
Una volta selezionato avrei bisogno di sapere:

1) se il file è aperto da un altro utente
2) se non è aperto conoscere il nome dell'ultimo autore che vi apportato modifiche

Fatto questo saprò che quel file non è in uso da nessuno e che non è stato modificato da nessuno degli utenti che vi possono accedere (che io conosco) e quindi potrà essere lavorato altrimenti avvertirò l'utente che il file o non è disponibile o è già stato lavorato.

Non so, però fare i passaggi 1) e 2) (hai detto niente ....) e non so neppure se questa sia la soluzione giusta, ma è l'unica che mi viene in mente.....

Avete suggerimenti alternativi ?
Potreste aiutarmi a risolvere i punti 1 e 2 (Se è più facile ottenere questo risultato con vb.net (altro linguaggio che so usare) ben venga.....) ?

Grazie infine.
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Sponsor
 

Re: vba excel: conoscere nome autore file + se aperto

Postdi Dylan666 » 18/04/20 12:53

Excel da già una notifica in caso di apertura di un file di rete da un altro utente:
https://support.office.com/it-it/articl ... b04aed68b3

Il problema è che tale controllo non è infallibile e quindi troverai in rete soluzione fantasiose:
https://forum.ialweb.it/forum_posts.asp ... tro-utente

Ma saranno sempre workaround finché non implementi un sistema di file sharing con meccanismi di check-in e check-out.
Lascio qualche idea:
https://pdf.wondershare.com/business/op ... ement.html
Avatar utente
Dylan666
Moderatore
 
Post: 40105
Iscritto il: 18/11/03 16:46

Re: vba excel: conoscere nome autore file + se aperto

Postdi karug64 » 18/04/20 14:42

Grazie per la risposta.

Per il secondo quesito avrei quasi risolto così:

Codice: Seleziona tutto
Dim Wb As Workbook
Dim autore As String
Dim modificatore As String
Dim datacreazione As String
Dim ultimavariazione As String

    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "File ", "*.xls*"
        .FilterIndex = 1
        .InitialView = msoFileDialogViewList
        .Title = "Titolo della finestra di dialogo"
        .ButtonName = "Seleziona"
        .Show
        If .SelectedItems.Count > 0 Then
            UserForm1.Label2.Caption = .SelectedItems(1)
        End If
    End With
   
    Application.ScreenUpdating = False

Set Wb = Workbooks.Open(Label2.Caption)
autore = Wb.BuiltinDocumentProperties("author")
modificatore = Wb.BuiltinDocumentProperties("Last author")
datacreazione = Wb.BuiltinDocumentProperties("creation date")
ultimavariazione = Wb.BuiltinDocumentProperties("Last save time")

Wb.Close

Application.ScreenUpdating = True

UserForm1.Textautore = autore
UserForm1.Textdatacreazione = datacreazione
UserForm1.Textdatavariazione = ultimavariazione
UserForm1.Textultimoautore = modificatore



che funziona perfettamente !!!

Ma il problema è che ho scoperto che le informazioni sono valide se leggo un file creato con Office....
Purtroppo, ho constatato che i file da leggere, sebbene con estensione xls, xlsx sono creati con openoffice e i metadati non sono in parte uguali (ovviamente) e quindi ricevo "errori di automazione"....

l'errore lo ottengo sulle date di creazione ("creation date") e modifica ("Last save time")

Un grosso problema ....

Qualcuno sa, per caso, come sono memorizzate queste informazioni ?

La soluzione migliore, sarebbe poter leggere queste informazioni, senza leggere il file, comunque ....

Grazie
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22

Re: vba excel: conoscere nome autore file + se aperto

Postdi Anthony47 » 18/04/20 15:46

Per controllare se il file e' libero oppure occupato puoi usare questa funzione
Codice: Seleziona tutto
Function FileStatus(filename As String) As Variant
'Check file status; codice di ritorno:
'0=file libero, 70=file occupato, 53=file non esiste
'76=path non esiste
'altri errori: da indagare
'
    Dim filenum As Integer, errnum As Integer
'
    On Error Resume Next   ' Turn error checking off.
    filenum = FreeFile()   ' Get a free file number.
    ' Attempt to open the file and lock it.
    Open filename For Input Lock Read As #filenum
    Close filenum          ' Close the file.
    errnum = Err           ' Save the error number that occurred.
    On Error GoTo 0        ' Turn error checking back on.
FileStatus = errnum
End Function

La usi come
Codice: Seleziona tutto
Dim FStat As Long, myF As String
myF = "D:\Dropbox\SHARED\Copia di calcolo_enigmatico.xlsm"    '<<< Il file
FStat = FileStatus(myF)
A te interessera' sondare se FStat e' pari a 0, file libero, o se e' pari a 70, file e' in uso.

Quanto alle date di modifica e relativo autore, SE la prima volta che i file vengono salvati in Excel questi metadati si aggiustano allora potresti lavorare con la logica che "se va in errore, nessuna modifica e' stata fatta"

Comunque non la vedo semplice...
Nelle situazioni in cui c'era questo bisogno io ho sempre suggerito di creare un ambiente di lavoro separato per ogni utente; poi, se tutte le modifiche devono confluire in un unico file, transitoriamente si apre il file comune, si inserisce la modifica, si chiude il file comune e si torna sul proprio ambiente.
Opzionalmente si puo' tenere una copia dei dati comuni, se va fatta la verifica preventiva di coerenza tra i dati che si vogliono inserire e quelli gia' presenti sull'ambiente comune; ma questo non esime dal controllare la coerenza sui dati effettivi (non in copia) quando si prova a inserire la modifica sul file comune

Insomma un bel lavoro

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: conoscere nome autore file + se aperto

Postdi karug64 » 18/04/20 16:27

Ok. Grazie a tutti.

Ci lavoro su .....
Office 2010
karug64
Utente Senior
 
Post: 746
Iscritto il: 20/11/11 21:22


Torna a Applicazioni Office Windows


Topic correlati a "vba excel: conoscere nome autore file + se aperto":


Chi c’è in linea

Visitano il forum: Nessuno e 103 ospiti